Вызов сервлета из класса Java

У меня возникла проблема при вызове сервлета в простом Java-классе для тестирования. Я хочу передать параметр вместе с сервлетом, и метод будет POST. Как это может быть достигнуто?

При поиске ответов я увидел, что кто-то порекомендовал HTTPClient. Но просто интересно, есть ли способ избежать этого.

3 ответа

Используйте следующий код. Используя этот код, вы также можете поддерживать сеансы.

package webapp;
import org.apache.http.client.HttpClient;
import org.apache.http.impl.client.DefaultHttpClient;


public class HttpClientSingleton {
    public static HttpClientSingleton mSingleton = null;

    public static HttpClient mHttpClient = null;

    //constructor
    private HttpClientSingleton(){
    mHttpClient = new DefaultHttpClient();
    }

    public static HttpClientSingleton getInstance(){
    if( mSingleton == null ){
        mSingleton = new HttpClientSingleton();
    }
    return mSingleton;
    }



}

jsp file:

<%
try{
    int i=0;
String sid = "ED6379C8FDDB801EB970BBDE55E5732D"; 
HttpClientSingleton h1 = HttpClientSingleton.getInstance();
HttpClient client= h1.mHttpClient;


HttpPost responses = new HttpPost("http://localhost:8080/docinbangalore/Billing_address_display?sid="+sid+"");
try {

    HttpResponse respons = client.execute(responses);
    BufferedReader rd = new BufferedReader(new InputStreamReader(respons.getEntity().getContent()));
    String line = "";
    out.println(line = rd.readLine());
    while ((line = rd.readLine()) != null) {
     out.println(line);

    }
  } catch (IOException e) {
    e.printStackTrace();
  }}
catch(Exception e)
{
    out.println(e);
}

%>

Все, что вам нужно сделать, это запросить URL. Поместите все пары "имя-значение", как обычно, и откройте для него поток.

Вот пример кода:

import java.io.*; 
import javax.servlet.http.*; 
import javax.servlet.*;

public class SpecialServlet extends HttpServlet 
{

public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException
{ 
    PrintWriter out = res.getWriter(); 
    out.println ("Hello " + req.getParameter("name") + ", this is SpecialServlet!"); 
    out.close(); 
}
} 

Java-программа:

import java.net.*; 
import java.io.*; 

public class CmdLineApplication
{
public static void main (String args[])
{
String line;
try
{
URL url = new URL( "http://127.0.0.1/servlet/special?name=CmdLineApplication" );
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
line = in.readLine();
System.out.println( line );
in.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}

Поместите файл сервлета.class в WEB-INF/classes Dir вашего двигателя сервлета. Запустите другой класс в командной строке обычным способом:

java CmdLineApplication

Вы должны увидеть строку из сервлета

Контейнер сервлета отвечает за инициализацию и вызов сервлета. Вы не можете напрямую вызывать класс сервлета.

Для размещения запроса вы можете использовать HttpClient.

Apache HTTPClient

Или вы можете использовать

URLConnection

Другие вопросы по тегам