1

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

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

  http://localhost:8080/Mapping/App1

同样,如果要触发App2.class,请使用以下链接

 http://localhost:8080/Mapping/App2

我想从 触发App2App1意思是如果你App1在浏览器中用相应的 URL 触发,它就会被触发App2

我也不想回应。

我怎样才能做到这一点。

谁能帮我。

谢谢。

4

3 回答 3

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.

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

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

于 2013-08-09T14:28:48.943 回答
2

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

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

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

于 2013-08-09T14:24:24.487 回答
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);
    

    相同的服务器,不同的项目

    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使用不同的方式

于 2016-01-05T14:38:54.723 回答