标签:jsp path sendredirect requestdispatcher
在jsp(serlvet)中,页面的"变换"有两种方式,第一重定向,第二转发:RequestDispatcher dispatcher=request.getRequestDispatcher("b.jsp") dispatcher.forward(request,response);
大致的示意图如下:
我们先看jsp中关于资源的引用
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <img width="400" height="300" src="../images/b.jpg" /> 这是第一张<br/> <img width="400" height="300" src="images/b.jpg" /> 这是第二张<br/> <img width="400" height="300" src="/images/b3.jpg" /> 这是第三张<br/> <img width="400" height="300" src="<%=request.getContextPath()%>/images/b.jpg" /> 这是第四张<br/> <img width="400" height="300" src="PathTest/images/b.jpg" /> 这是第五张<br/>
当我们直接访问b.jsp时,效果如下
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <img width="400" height="300" src="../images/a.jpg" /> <a href="../testServlet">去b页面</a>
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // request.getRequestDispatcher("jsp/b.jsp").forward(request, response); request.getRequestDispatcher("/jsp/b.jsp").forward(request, response); }如果使用服务器跳转,那么默认路径就是当前的项目,因而,上面两种url方式(不管url前面是否有"/")都可以#
那么大家想想http://localhost:8900/PathTest/testServlet 在这个地址下(记着是服务器端跳转,"b.jsp"这个页面对用户来说就是透明的,你压根就不知道你到底访问的是那个页面# 另一方面,servlet的地址是:http://localhost:8900/PathTest/testServlet, 目录却是:http://localhost:8900/PathTest)
此时访问图片1的模式 ../images/b.jpg访问的图片地址其实就是:http://localhost:8900/images/b.jpg 怎么可能会有照片?
所以,在项目中,图片一的那种相对路径的方式是没办法两全其美的#
所以最好使用,图片四的访问方式,用绝对路径#
我们改动servlet,如下:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.sendRedirect("/jsp/b.jsp"); }
我们把servlet换成:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.sendRedirect("jsp/b.jsp"); }点击去b页面后,地址栏成为http://localhost:8900/PathTest/jsp/b.jsp
显示出图片一与图片四
通过上面的例子,我们又可以得出结论
客户端跳转时,它的路径并不是相对于当前的项目#
所以,如果使用绝对路径,那么就得加上项目名称如下:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.sendRedirect(request.getContextPath()+"/jsp/b.jsp"); }
本文大范围的参考了
http://cxshun.iteye.com/blog/1123913
这篇博客,特此说明,并表示感谢
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:jsp path sendredirect requestdispatcher
原文地址:http://blog.csdn.net/dlf123321/article/details/47281729