繁体   English   中英

从Java main方法调用servlet

[英]Invoking servlet from java main method

import java.net.*; 
import java.io.*; 
public class sample
{  
    public static void main (String args[]) 
    { 
        String line;
        try 
        { 
            URL url = new URL( "http://localhost:8080/WeighPro/CommPortSample" ); 
            BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream())); 
            line = in.readLine(); 
            System.out.println( line ); 
            in.close(); 
        }
        catch (Exception e)
        { 
            System.out.println("Hello Project::"+e.getMessage());
        } 
    } 
}

我的Servlet正在调用另一个Jsp页面,如下所示,

 RequestDispatcher rd=request.getRequestDispatcher("index.jsp");
 rd.forward(request, response);

我没有在浏览器中得到任何反应/输出,浏览器一旦被调用就必须在其中执行。

我是否缺少此过程的任何基本步骤? 请帮忙!!!

如果要在浏览器中打开它,请尝试此操作

java.awt.Desktop.getDesktop().browse(java.net.URI.create("http://localhost:8080/WeighPro/CommPortSample"));

您的问题不清楚。 您实际上是要从Main方法调用Servlet,还是要向Web应用程序发出HTTP请求?

如果您要发出HTTP请求,则上面的代码看不到任何明显的问题,这使我相信问题出在Servlet中。 您还提到,浏览器中什么也没有,但是在上面运行程序并不涉及浏览器。

您的意思是说您去时没有得到回应

http://localhost:8080/WeighPro/CommPortSample

在浏览器中?

正如Suresh所说,您不能直接从main方法调用Servlet。 相反,您的Servlet应该在其他类上调用方法,并且这些其他类应该可以从main方法或Test Cases中调用。 您需要设计您的应用程序以使其成为可能。

import java.io.BufferedInputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;

public class OutBoundSimul {

    public static void main(String[] args) {

        sendReq();

    }

    public static void sendReq() {
        String urlString = "http://ip:port/applicationname/servletname";

        String respXml = text;

        URL url = null;

        HttpURLConnection urlConnection = null;
        OutputStreamWriter out = null;
        BufferedInputStream inputStream = null;
        try {
            System.out.println("URL:"+urlString);
            url = new URL(urlString);
            urlConnection = (HttpURLConnection)url.openConnection();
            urlConnection.setDoInput(true);
            urlConnection.setDoOutput(true);
            urlConnection.setRequestMethod("POST");
            System.out.println("SendindData");
            out = new OutputStreamWriter(urlConnection.getOutputStream());
            System.out.println("Out:"+out);
            out.write(respXml);
            out.flush();
            inputStream = new BufferedInputStream(urlConnection.getInputStream());
            int character = -1;
            StringBuffer sb = new StringBuffer();
            while ((character = inputStream.read()) != -1) {
                sb.append((char) character);
            }
            System.out.println("Resp:"+sb.toString());
        } catch (Exception e) {
            e.printStackTrace();
        }


    }

}

调用带有查询参数的Servlet Form Main方法

Java IO

public static String accessResource_JAVA_IO(String httpMethod, String targetURL, String urlParameters) {
    HttpURLConnection con = null; 
    BufferedReader responseStream = null;
    try {
        if (httpMethod.equalsIgnoreCase("GET")) {
            URL url = new URL( targetURL+"?"+urlParameters ); 
            responseStream = new BufferedReader(new InputStreamReader( url.openStream() )); 
        }else if (httpMethod.equalsIgnoreCase("POST")) {
            con = (HttpURLConnection) new URL(targetURL).openConnection();
            // inform the connection that we will send output and accept input
            con.setDoInput(true);   con.setDoOutput(true);  con.setRequestMethod("POST");
            con.setUseCaches(false); // Don't use a cached version of URL connection.
            con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            con.setRequestProperty("Content-Length", Integer.toString(urlParameters.getBytes().length));
            con.setRequestProperty("Content-Language", "en-US");  

            DataOutputStream requestStream = new DataOutputStream ( con.getOutputStream() );
            requestStream.writeBytes(urlParameters);
            requestStream.close();

            responseStream = new BufferedReader(new InputStreamReader( con.getInputStream(), "UTF-8" ));
        }

        StringBuilder response = new StringBuilder(); // or StringBuffer if not Java 5+ 
        String line;
        while((line = responseStream.readLine()) != null) {
            response.append(line).append('\r');
        }
        responseStream.close();
        return response.toString();
    } catch (Exception e) {
        e.printStackTrace();        return null;
    } finally {
        if(con != null) con.disconnect(); 
    }
}

Apache Commons 使用commons-〜.jar { httpclientlogging }

public static String accessResource_Appache_commons(String url){
    String response_String = null;

    HttpClient client = new HttpClient();

    GetMethod method = new GetMethod( url ); 
//  PostMethod method = new PostMethod( url );
    method.setRequestHeader("Content-type", "text/xml; charset=ISO-8859-1");
    method.setQueryString(new NameValuePair[] { 
        new NameValuePair("param1","value1"),
        new NameValuePair("param2","value2")
    });  //The pairs are encoded as UTF-8 characters. 
    try{
        int statusCode = client.executeMethod(method);
        System.out.println("Status Code = "+statusCode);

        //Get data as a String OR BYTE array method.getResponseBody()
        response_String = method.getResponseBodyAsString();
        method.releaseConnection();
    } catch(IOException e) {
        e.printStackTrace();
    }
    return response_String;
}

使用httpclient.jar的 Apache

public static String accessResource_Appache(String url) throws ClientProtocolException, IOException{
    try {
        CloseableHttpClient httpclient = HttpClients.createDefault();
        URIBuilder builder = new URIBuilder( url )
                                .addParameter("param1", "appache1")
                                .addParameter("param2", "appache2");

        HttpGet method = new HttpGet( builder.build() );
//      HttpPost method = new HttpPost( builder.build() );

        // Create a custom response handler
        ResponseHandler<String> responseHandler = new ResponseHandler<String>() {
            @Override
            public String handleResponse( final HttpResponse response) throws IOException {
                int status = response.getStatusLine().getStatusCode();
                if (status >= 200 && status < 300) {
                    HttpEntity entity = response.getEntity();
                    return entity != null ? EntityUtils.toString(entity) : null;
                }
                return "";
            }
        };
        return httpclient.execute( method, responseHandler );
    } catch (URISyntaxException e) {
        e.printStackTrace();
    }
    return null;
}

JERSY 使用JARS {客户,核心,服务器}

public static String accessResource_JERSY( String url ){
    ClientConfig config = new DefaultClientConfig();
    Client client = Client.create(config);
    WebResource service = client.resource( url );
    ClientResponse response = service.accept(MediaType.TEXT_PLAIN).get(ClientResponse.class);
    if (response.getStatus() != 200) {
        System.out.println("GET request failed >> "+ response.getStatus());
    }else{
        String str = response.getEntity(String.class);
        if(str != null && !str.equalsIgnoreCase("null") && !"".equals(str)){
             return str;
        }
    }
    return "";
}

Java Main方法

public static void main(String[] args) throws IOException {

    String targetURL = "http://localhost:8080/ServletApplication/sample";
    String urlParameters = "param1=value11&param2=value12";

    String response = "";
//      java.awt.Desktop.getDesktop().browse(java.net.URI.create( targetURL+"?"+urlParameters ));
//      response = accessResource_JAVA_IO( "POST", targetURL, urlParameters );
//      response = accessResource_Appache_commons( targetURL );
//      response = accessResource_Appache( targetURL );     
    response = accessResource_JERSY( targetURL+"?"+urlParameters );
    System.out.println("Response:"+response);
}

简直你做不到。

Web容器将生成一个响应和请求对。 您无法生成响应对象并发送到浏览器。

您期望通过哪个客户端/浏览器获得响应? 不知道。 对 ?

当容器收到来自客户端的请求时,它将生成响应对象并为您提供服务,您可以使用服务方法访问该响应。

如果要查看/测试响应,则必须从那里进行请求。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM