Servlet转发路径问题(RequestDispatcher)

    今天在学Servlet时遇到路径问题,具体为web.xml里映射配置为myeclipse默认生成的,如下

<servlet-mapping>
    <servlet-name>loginServlet</servlet-name>
    <url-pattern>/servlet/loginServlet</url-pattern> 
</servlet-mapping>


下面为action:

action="${pageContext.request.contextPath}/servlet/loginServlet"

servlet代码片段如下:

request.getRequestDispatcher("message.jsp").forward(request, response);
如果转发的是 到 当前路径 的话,那么转发访问的路径地址会变成如下,会带上转发前的目录 /servlet,造成404错误

http://localhost:8080/项目/servlet/message.jsp

但是如果web.xml里配置如下的话,使用 相对路径 或者 当前路径 转发都可以正常访问

 <servlet-mapping>
    <servlet-name>loginServlet</servlet-name>
    <url-pattern>/loginServlet</url-pattern> 
  </servlet-mapping>

-------------------------以下为请求转发与重定向的分类和区别

一:转发对象(RequestDispatcher)的获取方法为两种:

    1.通过 HttpServletRequest

public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
	request.getRequestDispatcher("/message.jsp").forward(request, response);
		
}
HttpServletRequest.getRequestDispatcher(String)


参数可以指定为    相对路径(指当前项目的webroot根目录) 或 当前路径(转发前所在的路径/当前servlet路径)

request.getRequestDispatcher("/message.jsp").forward(request, response);

http://localhost/工程名/message.jsp

request.getRequestDispatcher("message.jsp").forward(request, response);

http://localhost/转发前路径/message.jsp

    2.通过 ServletContext

参数只能指定为 相对路径(指当前项目的webroot根目录)带“/”开头的路径

ServletContext.getRequestDispatcher("/message.jsp").forward(request, response);   

http://localhost/工程名/message.jsp  

 
public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
	ServletContext servletContext = getServletContext();
       servletContext.getRequestDispatcher("/message.jsp").forward(request, response);

-------------------------------------------

经验告诉我,配置web.xml不要用默认的 /servlet/xxx(个人意见) 

问题关联:转发的页面里的 js css引入问题,也可能因为使用默认配置而造成引入出错

解决方法:动态引入图片或者JS

如用: request.getContextPath() 

这里不要网上 相对路径绝对路径 之类的知识点搞晕了。Servlet相关里

带“/” 说明代表的是当前web项目

不带"/"说明代表的是当前路径(转发前路径或servlet路径)

可能每个人说法不一样,我也搞混了好久

如有错误,欢迎大神指出,以免新手歧路


你可能感兴趣的:(servlet,转发,forward)