重定向: RedirectServlet代码如下: |
packagecn.edu.qfnu.ch06.servlet;
importjava.io.IOException;
import javax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
publicclass RedirectServlet extends HttpServlet {
private static final long serialVersionUID =1L;
public RedirectServlet() {
super();
}
protected void doGet(HttpServletRequestrequest, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
request.setAttribute("name", "qiaozhiqing");
request.setAttribute("pwd", "123456");
response.sendRedirect("TargetServlet");
}
protected void doPost(HttpServletRequestrequest, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
}
TargetServlet代码如下: |
packagecn.edu.qfnu.ch06.servlet;
importjava.io.IOException;
importjava.io.PrintWriter;
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
publicclass TargetServlet extends HttpServlet {
private static final long serialVersionUID =1L;
public TargetServlet() {
super();
}
protected void doGet(HttpServletRequestrequest, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out=response.getWriter();
String name=(String)request.getAttribute("name");
String pwd=(String)request.getAttribute("pwd");
out.print("request对象中的值<br>");
out.print("name="+name+"<br>");
out.print("pwd="+pwd);
}
protected void doPost(HttpServletRequestrequest, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
}
Servlet配置的Web.xml代码如下: <servlet> <description></description> <display-name>RedirectServlet</display-name> <servlet-name>RedirectServlet</servlet-name> <servlet-class>cn.edu.qfnu.ch06.servlet.RedirectServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>RedirectServlet</servlet-name> <url-pattern>/RedirectServlet</url-pattern> </servlet-mapping> <servlet> <description></description> <display-name>TargetServlet</display-name> <servlet-name>TargetServlet</servlet-name> <servlet-class>cn.edu.qfnu.ch06.servlet.TargetServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>TargetServlet</servlet-name> <url-pattern>/TargetServlet</url-pattern> </servlet-mapping> 图 4请求地址发生变化 请求转发: ForwardServlet的代码: |
packagecn.edu.qfnu.ch06.servlet;
importjava.io.IOException;
importjavax.servlet.RequestDispatcher;
importjavax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
publicclass ForwardServlet extends HttpServlet {
privatestaticfinallongserialVersionUID = 1L;
public ForwardServlet() {
super();
}
protectedvoiddoGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
request.setAttribute("name", "qiao");
request.setAttribute("pwd", "123456");
RequestDispatcherrd=request.getRequestDispatcher("TargetServlet");
rd.forward(request, response);
}
protectedvoiddoPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
}
ForwardServlet的配置代码:
<servlet>
<description></description>
<display-name>ForwardServlet</display-name>
<servlet-name>ForwardServlet</servlet-name>
<servlet-class>cn.edu.qfnu.ch06.servlet.ForwardServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ForwardServlet</servlet-name>
<url-pattern>/ForwardServlet</url-pattern>
</servlet-mapping>
在浏览器中输入 http://localhost:8080/shiyanliude/ForwardServlet结果如下: 图5请求地址没有发生变化 虽然重定向和请求转发都可以实现对访问资源的更改,但是两者是有区别的。请求转发是容器内控制权的转移,转发前后仍处于同一个请求对象内,地址栏的地址在转发前后不发生变化。重定向是完全的跳转,浏览器会跳转到重定向地址,并重新发送请求。 |