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

来源:互联网 发布:node.js 安装 编辑:程序博客网 时间:2024/04/26 19:27
前段时间自己也刚好遇到了这个问题,把相对路径改成绝对路径就没问题了,今天复习到这里就稍微总结一下。

使用绝对路径:使用相对路径可能会有问题, 但使用绝对路径肯定没有问题. 

一、下面先用一个小项目来说事,目录结构如下:


a.jsp:
<a href="path/b.jsp">去BBB界面</a>

b.jsp
<a href="c.jsp">去CCC界面</a>

c.jsp
<a href="../a.jsp">去AAA界面</a>
这样写的话,肯定是能a到b,b到c,现在,我们用个TestServlet来处理a.jsp的请求.
a.jsp:
<a href="TestServlet">去BBB界面</a>

TestServlet中doGet()方法:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//模拟从数据库中查询数据
List<String> cities = Arrays.asList("樟村","玉山","上饶");
request.setAttribute("cities", cities);

//通过转发的方式响应/path/b.jsp
request.getRequestDispatcher("/path/b.jsp").forward(request, response);

}

返回到的b.jsp接收转发过来的信息:
城市:<%=request.getAttribute("cities") %>

这样a.jsp能到b.jsp,此时浏览器地址栏上显示的是Servlet的路径,而jsp页面的超链接还是相对于改jsp页面的地址,则可能会出现路径混乱的问题。
a.jsp--->/TestServlet --转发--->b.jsp(有一个超链接:和b.jsp在同一路径下的c.jsp)--->无法得到页面

该如何解决呢?肯定是要说到绝对路径了

二、编写绝对路径来避免上面的问题
1、在javaweb中什么叫“绝对路径”
相对于contextPath的路径。即任何的路径都必须带上contextPath
比如:http://localhost:8080/contextPath(当前WEB应用的上下文路径)/a.jsp

2、如何解决呢?
1)这里我们要先提一下JavaWeb开发中的"/"到底表示什么
①当前WEB应用的根路径:http://localhost:8080/contextPath/  :若 / 交给servlet容器来处理
 --请求转发时:request.getRequestDispatcher("/path/b.jsp").forward(request, response);
 --web.xml文件中映射servlet访问路径
<servlet-mapping>
<servlet-name>TestServlet</servlet-name>
<url-pattern>/TestServlet</url-pattern>
</servlet-mapping>

②、WEB站点的根路径:http://localhost:8080/  :若 / 交给浏览器来处理
 --超链接:<a href="TestServlet">去BBB界面</a>
 --表达中的action:<form action="/test.jsp">
 --做请求重定向的时候:response.sendRedirect("/a.jsp")

2)解决方法
如果 / 代表的是站点的根目录,在其前面加上contextPath,这个contextPath可以由request或application
的getContextPath()方法来获取。
<a href="<%=request.getContextPath() %>/path/c.jsp">去CCC界面</a>
这样上面的错误就解决了。
1 0
原创粉丝点击