今天在学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路径)
可能每个人说法不一样,我也搞混了好久
如有错误,欢迎大神指出,以免新手歧路