重定向: 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請求地址沒有發生變化 雖然重定向和請求轉發都可以實現對訪問資源的更改,但是兩者是有區別的。請求轉發是容器內控制權的轉移,轉發前後仍處於同一個請求對象內,地址欄的地址在轉發前後不發生變化。重定向是完全的跳轉,瀏覽器會跳轉到重定向地址,並重新發送請求。 |