Servlet请求转发与重定向路径问题!

WEB应用部署到Tomcat:

<Context path="/project" docBase="D:\code_tower\code_tower\WebRoot" reloadable="true"/>

应用目录结构:

start.jsp发起请求:

    <form action="../../ts/TestServlet">
        <!-- action应相对于当前jsp文件位置 -->
        <input type="text" name="key" value="zhongbinhua"/>
        <input type="submit"/>
    </form>

result.jsp 请求转发或从定向页面:

  <body>
    username:<%=request.getParameter("key") %>
  </body>

部署描述符中对Servlet配置:

  <servlet-mapping>
    <servlet-name>TestServlet</servlet-name>
    <url-pattern>/ts/TestServlet</url-pattern>
  </servlet-mapping>

 Servlet示例:

package com.test;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class TestServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        
        //请求转发:共发送1个请求
        /**浏览器显示:username:zhongbinhua */
        
        //浏览器地址:请求:http://localhost:8080/project/ts/TestServlet?key=zhongbinhua
        //200 OK
        //绝对路径:'/'指http://localhost:8080/project
        RequestDispatcher dis = request.getRequestDispatcher("/result/result.jsp");
        
        /**相对路径:相对当前Servlet(TestServlet)的路径*/
        //RequestDispatcher dis = request.getRequestDispatcher("../result/result.jsp");
        
        dis.forward(request, response);
        
        //重定向:共发送2个请求:服务器返回给浏览器第一个请求的响应之后,浏览器自动向服务器发送第二个请求!
        /**浏览器地址:http://localhost:8080/project/result/result.jsp*/
        /**浏览器显示:username:null */
        
        //第一个请求正确:http://localhost:8080/project/ts/TestServlet?key=zhongbinhua
        /**第二个请求绝对路径错误:http://localhost:8080/result/result.jsp 
         * '/'指http://localhost:8080 */
        //response.sendRedirect("/result/result.jsp");
        
        //第一个请求正确:http://localhost:8080/project/ts/TestServlet?key=zhongbinhua
        /**第二个请求相对路径错误:
         * http://localhost:8080/project/ts/result/result.jsp */
        //response.sendRedirect("result/result.jsp");
        
        //第一个请求正确:http://localhost:8080/project/ts/TestServlet?key=zhongbinhua
        //302 Moved Temporarily
        //http://localhost:8080/project/result/result.jsp
        //200 OK
        /**相对路径:相对当前Servlet(TestServlet)的路径*/
        //response.sendRedirect("../result/result.jsp");
        
    }

}

 Servlet重定向示意图: 共2个请求!

 

 Servlet请求转发示意图: 共1个请求!

 

posted @ 2013-12-15 17:50  龍變  阅读(5166)  评论(0编辑  收藏  举报