編程比較Servlet重定向和請求轉發的區別。

重定向:

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>

spacer.gif

          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結果如下:

spacer.gif

              5請求地址沒有發生變化

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章