如何将http请求发送到另一个servlet

时间:2013-08-09 14:21:18

标签: java java-ee-6

在我的项目文件夹中,我们在ContextPath/WEB-INF/Classes/*.class名称下有2个java文件App1.classApp2.class

如果我想运行App1.class,我需要在浏览器中触发URL。

  http://localhost:8080/Mapping/App1

以同样的方式,如果您想触发App2.class,请使用以下链接

 http://localhost:8080/Mapping/App2

我想从App2触发App1,意味着如果您在浏览器中使用相应的网址触发App1,则会触发App2

我也不想做任何回应。

我该怎么办呢。

任何人都可以帮助我。

感谢。

3 个答案:

答案 0 :(得分:6)

  

我想从App1触发App2,意味着如果你在浏览器中触发带有相应URL的App1,它将触发App2。

考虑将App1App2配置为Mapping网络应用中的servlet;您可以使用RequestDispatcher forward() App2请求App1。这将发生在服务器端,即浏览器将收到响应,好像它来自if (isForwardReqd()) { RequestDispatcher rd = request.getRequestDispatcher("App2"); rd.forward(request, response); }

App1

请注意forward()在执行IllegalStateException之前不得提交回复,否则您将获得{{1}}。

参考
http://docs.oracle.com/javaee/7/api/javax/servlet/RequestDispatcher.html

  

定义一个对象,该对象接收来自客户端的请求并将它们发送到服务器上的任何资源(例如servlet,HTML文件或JSP文件)。

答案 1 :(得分:2)

您可以使用Java发送Get请求;

URL url = new URL("http://localhost:8080/Mapping/App2");
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setRequestMethod("GET");
conn.connect();

或者你应该配置App2,以便它的动作由一个单独的类或两个servlet都可以访问的方法处理。

答案 2 :(得分:1)

可能的方式

HTTP GET请求(可选)查询参数

String query = String.format("param1=%s&param2=%s", 
             URLEncoder.encode("param1Value", "UTF-8"), 
             URLEncoder.encode("param1Value", "UTF-8"));

    URL url = new URL(servletURL + "?" + query);
    HttpURLConnection conn = (HttpURLConnection)url.openConnection();
    conn.setRequestMethod("GET");
    Map<String, List<String>> header = conn.getHeaderFields();
    int responseCode = conn.getResponseCode();
    System.out.println("Headers : "+header);
    System.out.println("Response Code "+responseCode);

RequestDispatcher - 将请求从一个资源发送到其他资源。如果它们在同一个项目中可用服务器

  • 此界面允许您执行服务器端转发/包含, 执行请求的Servlet的service(...)/ doGet(...)方法。

    RequestDispatcher rd = req.getRequestDispatcher("/servlet2");
    rd.forward(req, resp); // rd.include(req, resp);
    

    Same Server,Different-Project

    RequestDispatcher rd = req.getServletContext().getContext("/Project2").getRequestDispatcher("/ips");
        rd.forward(req,  resp);
    

<强> .sendRedirect()

  • 从客户端重定向请求[在客户端浏览器中更改URL]。
  • 当服务器遇到sendRedirect方法时,它会向具有3XX状态代码的客户端发送临时重定向响应,然后请求新的URL。
  • www.sun.com重定向到www.oracle.com/sun/index.html

    response.sendRedirect(servletURL); // Different Server.
    

Invoking Other Servlet使用不同的方式