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路径)

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

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


转载于:https://my.oschina.net/5365437/blog/142505

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值