JavaWeb中的绝对路径和相对路径问题

在开发的时候,因为路径,往往会造成很多问题。所以开发时,JavaWeb尽可能的用绝对路径

a.jsp

<span style="font-family:KaiTi_GB2312;font-size:18px;"><strong><body><h1>A page</h1><a href="pathProblem/b.jsp">To B page</a></body></strong></span>b.jsp<span style="font-family:KaiTi_GB2312;font-size:18px;"><strong><body><h1>B page</h1>Citys:<%= request.getAttribute("citys") %><a href="c.jsp">To C page</a></body></strong></span>c.jsp<span style="font-family:KaiTi_GB2312;font-size:18px;"><strong><body><h1>C page</h1><a href="../a.jsp">To A page</a></body></strong></span>上面3个jsp,都是相对路径,可以正常访问

但是,通过转发和重定向后

a.jsp

<span style="font-family:KaiTi_GB2312;font-size:18px;"><strong><body><h1>A page</h1><a href="testServlet">To B page</a></body></strong></span>b.jsp<span style="font-family:KaiTi_GB2312;font-size:18px;"><strong><body><h1>B page</h1>Citys:<%= request.getAttribute("citys") %><a href="c.jsp">To C page</a></body></strong></span>c.jsp<span style="font-family:KaiTi_GB2312;font-size:18px;"><strong><body><h1>C page</h1><a href="../a.jsp">To A page</a></body></strong></span>testServlet<span style="font-family:KaiTi_GB2312;font-size:18px;"><strong>@WebServlet("/testServlet")public class testServlet extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1.模拟从数据库中查询数据List<String> citys = Arrays.asList("BJ","SH","GZ");request.setAttribute("citys", citys);// 根目录下pathProblem 目录 下的b.jsprequest.getRequestDispatcher("/pathProblem/b.jsp").forward(request, response);}}</strong></span>a.jsp 可以访问 b.jsp,但是b.jsp却不能访问c.jsp?

因为在 a.jsp 转发到 b.jsp后,,路径(:8080/Session/testServlet),从b.jsp 再去c.jsp时,因为 b->c 是相对路径,所以 b 会认为 c.jsp 和当前WEB应用的根目录 ( /Session)处于同一目录,找不到,所以就会访问失败。这就出现了路径错乱的问题。

总结:

1.绝对路径的问题1). 开发时建议编写 "绝对路径" :写绝对路径肯定不会出问题,但是写相对路径有时候就会出现问题在由 Servlet 转发到 JSP 页面时,此时浏览器地址栏上显示的是Servlet 的路径,而若 JSP 的页面的超链接还是相对于该 JSP页面的地址,则可能会出现路径混乱的问题.

根目录 -/a.jsp -path

-/b.jsp

-/c.jspa.jsp -> Servlet 转发 -> b.jsp (有超链接,连接到和b.jsp 同目录下c.jsp 这时就会出现问题)->页面混乱2).编写绝对路径可以避免上述问题:绝对路径: 相对当前 Web 应用的根路径(ContextPath)的路径,即任何路径都必须带上ContextPath.:8080/Session/a.jsp √. ContextPath -> Session:8080/a.jsp ×. 当前站点 -> :8080/3).JavaWeb 中的 ‘/’ 到底代表什么?①.有时候代表的是: 当前WEB应用的根路径(:8080/ContextPath/) :若 ‘/’ 需要交给Servlet 来处理>请求转发时,request.getRequestDispatcher("/xxxx").forward(,,);>web.xml 中 映射Servlet<servlet-mapping><servlet-name>TestServlet</servlet-name><url-pattern> /TestServlet </url-pattern></servlet-mapping>>各种定制标签中的 /②.有时代表的是当前WEB站点的根路径(:8080/):若 ‘/’ 交给浏览器处理>超链接:<a href="/XXXX">>表单中的action <form action="/login.jsp">>做请求重定向的时候,response.sendRedirect("/a.jsp");如何完成编写绝对路径:若’/’代表的是站点的根目录,在其前面加上ContextPath 就可以了,而ContextPath 可以由request.getContextPath() 或application.getContextPath() 得到<a href="/TestPath">B page</a> 就无法访问Servlet改为 <a href="<%=request.getContextPath()%>/TestPath"> B page </a>response.sendRedirect(request.getContextPath()+"/pathProblem/b.jsp");

关于爱情的句子:情不知所起,一往而情深。

JavaWeb中的绝对路径和相对路径问题

相关文章:

你感兴趣的文章:

标签云: