Servlet路径跳转问题
Servlet中路径跳转(服务器端跳转)JSP
1.相对路径
//XML文件
<servlet-mapping>
<servlet-name>RegServlet</servlet-name>
<url-pattern>/servlet/RegServlet</url-pattern>
</servlet-mapping>
request.getRequestDispatcher("../userinfo.jsp").forward(request,response);
@WebServlet("/RegServlet") //新特性 访问地址直接配置好了
request.getRequestDispatcher("userinfo.jsp").forward(request, response); //相对路径方式
2. 绝对路径
request.getRequestDispatcher("/userinfo.jsp").forward(request, response);// ‘/’表示根目录 绝地路径
Servlet中路径跳转(请求重定向跳转)JSP
response.sendRedirect(request.getContextPath()+"/userinfo.jsp"); //这里使用的是加上了上下文的绝对路径
response.sendRedirect("userinfo.jsp"); //这里使用的是相对路径
Servlet的路径跳转
一、JSP跳转到Servlet
1、相对路径,如href="servlet/TestServlet" 如果写成"/servlet/TestServlet"会报错,因为第一个“/”表示的是【服务器根目录】
2、绝对路径,通过内置成员变量path实现,如href="<%=path%>/servlet/TestServlet" ,path得到的是项目根目录,如【http://localhost:8080/ServletDemo】
其中path指的就是:
例子:
<!--使用相对路径访问HelloServlet --> <!-- /servlet/HelloServlet 第一个/表示服务器的根目录 --> <a href="servlet/HelloServlet">访问HelloServlet!</a><br> <!-- 使用绝对路径 访问HelloServlet,可以使用path变量:path变量表示项目的根目录--> <a href="<%=path%>/servlet/HelloServlet">访问HelloServlet!</a><br>
二、Servlet跳转JSP
1、请求重定向:response.sendRedirect(request.getContextPath()+"/xxx.jsp");
request.getContextPath()获得项目根目录,或者通过"../xxx.jsp"取得上层路径得到
2、服务器内部转发: request.getRequestDispatcher("../xxx.jsp").forward(req,resp);
request.getRequestDispatcher("/test.jsp").forward(request, response); /斜线表示项目的根目录
小结:Servlet都可以通过../xxx.jsp获取路径
三、web.xml的路径
web.xml的<url-pattern>必须以“/”开头,“/”表示项目的根目录
在JSP页面上使用相对路径和绝对路径调用servlet web.xml的<url-pattern>必须以“/”开头,“/”表示项目的根目录。
如果在Servlet中使用请求重定向方式跳转到其他jsp页面,则需要:
response.sendRedirect(request.getContextPath()+"/test.jsp");
服务器内部跳转路径:
request.getRequestDispatcher("/test.jsp").forward(request,response);//这里的斜线表示项目的根目录
或者
request.getRequestDispatcher("../test.jsp").forward(request,response);//“..”表示回到上层目录也就是根目录;
PS:如果<url-pattern>带一层路径 如:<url-pattern>/servlet/loginServlet</url-pattern>,则内部转发的时会从WebRoot/servlet/路径下找jsp页面。
如果要转发的页面不在WebRoot/servlet/路径下,则需要“..”回到上层或根目录再定位到jsp页面,如下:
request.getRequestDispatcher("../test.jsp").forward(request,response);
如果要转发的页面在WebRoot/servlet/路径下,则如下:
request.getRequestDispatcher("/test.jsp").forward(request,response);