一:servlet
可能经常我们需要在servlet中处理一些路径问题,比如,想得到当前应用中某个文件的物理路径,或者需要知道某个请求的具体路径,这时就需要用到这些方法了。
1:获得web应用的物理绝对路径
用到了getServletContext()中的getRealPath ()方法,它能够返回当前web应用中的某个文件的物理绝对路径
String webRealPath=request.getSession().getServletContext().getRealPath("/");
这里用“/”,返回的时web应用根目录的物理路径,比如我的web应用在本机上的存放位置是
C:/Eclipse/workspace/mynews/MyNews
|__WEB-INF
|___class
|___lib
C:/Eclipse/workspace/mynews/MyNews
2:当我在浏览器输入以下请求路径时http://localhost:8080/mynews/index.jsp
以下各个方法输出结果如下:
request.getContextPath()输出:
/mynews
获得URI
request.getRequestURI()输出:
/mynews/index.jsp
获得URL
request.getRequestURL()输出:
http://localhost:8080/mynews/index.jsp
知道了这几个方法的不同,就很容易在程序中使用了
二:Jsp中的一些路径问题
在jsp中可以使用相对路径,所以很容易出现一些问题
比如我现在有名为path的一个web应用程序,其中的文件组织结构如下:
web
|__WEB-INF
|__index.jsp
|__internal
|__internal.jsp
在index.jsp中,有如下连接<a href="internal/internal.jsp">link</a>点击此连接后会连到如下地址:
http://localhost:8080/web/internal/internal.jsp,也就是说,上边那个连接地址是相对于index.jsp来说的。
当把链接改为<a href="/internal/internal.jsp">link</a>就会发现链接地址变成了如下:
http://localhost:8080/internal/internal.jsp也就是说,当加上“/”时,就变成了相对于网站根目录,而不是相对于web应用程序的根目录。
同样我们在internal.jsp中,我们可以使用../index.jsp来链接到index.jsp页面。
以上原则也适用于在提交表单时action中的路径问题,无论action转向的是servlet还是jsp页面。
END!