使用 RequestDispatcher 和 HttpServletResponse 进行 Java 中的 Servlet 协作
什么是 Servlet 协作?
特定 Java web 应用程序的 Servlet 之间的信息交换被称为 Servlet 协作。这使得能够通过方法调用将信息从一个 servlet 传递/共享到另一个 servlet。
Java 提供的实现 Servlet 协作的主要方式有哪些? servlet API 提供了两个接口,即:
- javax . servlet . RequestDispatcher
- javax . servlet . http . HttpServletresponse
这两个接口包括负责实现 servlets 之间信息共享目标的方法。
使用请求调度程序界面
RequestDispatcher 接口提供了将客户端请求分派到另一个 web 资源的选项,该资源可以是一个 HTML 页面、另一个 servlet、JSP 等。它提供了以下两种方法:
- public void forward(servlet request,ServletResponse response)抛出 ServletException,Java . io . ioexception: forward()方法用于将客户端请求转移到另一个资源(HTML 文件、servlet、jsp 等)。当调用此方法时,控件被转移到下一个被调用的资源。另一方面,include()方法用于将调用文件的内容包含到被调用文件中。调用此方法后,控件保留在调用资源中,但处理后的输出包含在被调用资源中。 下图说明了它的工作方式:
- public void include(servlet request,ServletResponse response)抛出 ServletException,Java . io . ioexception: include()方法用于将调用资源的内容包含到被调用资源中。当调用此方法时,控件仍保留在调用资源中。它只是将调用资源的已处理输出包含到被调用资源中。 下图说明了它的工作原理:
- 使用 RequestDispatcher 进行 Servlet 协作的示例 以下示例说明如何使用 RequestDispatcher 界面实现 Servlet 协作: index.html
超文本标记语言
<html>
<head>
<body>
<form action="login" method="post">
Name:<input type="text" name="userName"/><br/>
Password:<input type="password" name="userPass"/><br/>
<input type="submit" value="login"/>
</form>
</body>
</html>
- Login.java
Java 语言(一种计算机语言,尤用于创建网站)
// First java servlet that calls another resource
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class Login extends HttpServlet {
public void doPost(HttpServletRequest req,
HttpServletResponse res)
throws ServletException, IOException
{
// The method to receive client requests
// which are sent using 'post'
res.setContentType("text/html");
PrintWriter out = response.getWriter();
// fetches username
String n = request.getParameter("userName");
// fetches password
String p = request.getParameter("userPass");
if(p.equals("Thanos"){
RequestDispatcher rd = request.getRequestDispatcher("servlet2");
// Getting RequestDispatcher object
// for collaborating with servlet2
// forwarding the request to servlet2
rd.forward(request, response);
}
else{
out.print("Password mismatch");
RequestDispatcher rd = request.getRequestDispatcher("/index.html");
rd.include(request, response);
}
}
}
- Welcome.java
Java 语言(一种计算机语言,尤用于创建网站)
// Called servlet in case password matches
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class Welcome extends HttpServlet {
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{
response.setContentType("text/html");
PrintWriter out = response.getWriter();
// fetches username
String n = request.getParameter("userName");
// prints the message
out.print("Welcome " + n);
}
}
- web.xml
超文本标记语言
<web-app>
<servlet>
<servlet-name>Login</servlet-name>
<servlet-class>Login</servlet-class>
</servlet>
<servlet>
<servlet-name>WelcomeServlet</servlet-name>
<servlet-class>Welcome</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Login</servlet-name>
<url-pattern>/servlet1</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>WelcomeServlet</servlet-name>
<url-pattern>/servlet2</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
输出:
- index.html
- 如果密码匹配:
- 如果密码不匹配:
使用 HttpServletResponse 接口
- HttpServletResponse 接口负责管理 Http 响应。为了实现 servlet 协作,它使用了以下方法:
public void sendRedirect(String URL)throws IOException;
- 此方法用于将响应重定向到另一个资源,可能是 servlet、jsp 或 html 文件。它接受的参数是一个网址,可以是绝对的,也可以是相对的。它在客户端工作,并使用浏览器的网址栏发出请求。
使用发送重定向()进行重定向的示例
- 下面这个使用 servlet 创建的 web 应用程序的例子获取了写在网页文本字段中的文本,并将其指向 servlet。然后 servlet 将其重定向到谷歌,谷歌根据所写的文本生成搜索结果。 index.html
超文本标记语言
<html>
<head>
<body>
<form action="search" method="GET">
<input type="text" name="name">
<input type="submit" value="search">
</form>
</body>
</html>
Java 语言(一种计算机语言,尤用于创建网站)
// Servlet class to redirect the text keyword
// in the 'name' field to google.com
// using sendRedirect()
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MySearcher extends HttpServlet {
protected void doGet(HttpServletRequest
request,
HttpServletResponse response)
throws ServletException, IOException
{
String name = request.getParameter("name");
response.sendRedirect("https://www.google.co.in/#q=" + name);
// response redirected to google.com
}
}
- web.xml
超文本标记语言
<web-app>
<servlet>
<servlet-name>MySearcher</servlet-name>
<servlet-class>MySearcher</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MySearcher</servlet-name>
<url-pattern>/search</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
输出:
- index.html
- 搜索结果
requestispatcher 的 forward()方法和 HttpServletResponse 的 sendRedirect()有什么区别?
- 虽然这两种方法看起来是一样的,但两者之间还是有区别的,具体如下:
版权属于:月萌API www.moonapi.com,转载请注明出处