您的位置:首页 > 编程语言 > Java开发

JavaWeb项目各种路径的获取

2017-04-05 09:54 148 查看
1.关于JSP/Servlet中的相对路径和绝对路径。

1)服务器端的地址

指的是相对于你的web应用的地址,这个地址是在服务器端解析的,也就是说这时候在jsp和servlet中的相对地址应该是相对于你的web应用,即相对于http: //192.168.30.147/webapp/的。

其用到的地方有:

  forward:servlet中的request.getRequestDispatcher(address);这个address是在服务器端解析的。

  所以,你要forward到a.jsp应该这么写:request.getRequestDispatcher(“/user/a.jsp”)这个/ 相对于当前的web应用webapp,其绝对地址就是:http://192.168.30.147/webapp/user/a.jsp。 sendRedirect:在jsp中<%response.sendRedirect("/rtccp/user/a.jsp");%>

2)客户端的地址

所有的html和javascript页面中的相对地址,,这个地址是在客户端浏览器解析的,都是相对于服务器根目录,及相对于(http://192.168.30.147/)的。

其用到的地方有:

  Html中的form表单的action属性的地址应该是相对于服务器根目录(http://192.168.30.147/)的。

  所以,如果提交到a.jsp 为:action="/webapp/user/a.jsp"或action="<%=request.getContextPath()% >"/user/a.jsp;

  提交到servlet为actiom="/webapp/handleservlet" Javascript也是在客户端解析的,所以其相对路径和form表单一样。

  因此,一般情况下,在JSP/HTML页面等引用的CSS,Javascript.Action等属性前面最好都加上

  <%=request.getContextPath()%>,以确保所引用的文件都属于Web应用中的目录。另外,应该尽量避免使用类似".","./","../../"等类似的相对该文件位置的相对路径,这样当文件移动时,很容易出问题。

3)JSP中获得当前应用的相对路径和绝对路径

根目录所对应的绝对路径:request.getRequestURI()

文件的绝对路径  :application.getRealPath(request.getRequestURI());

当前web应用的绝对路径 :application.getRealPath("/");

取得请求文件的上层目录:new File(application.getRealPath(request.getRequestURI())).getParent()

4)Servlet中获得当前应用的相对路径和绝对路径

根目录所对应的绝对路径:request.getServletPath();

文件的绝对路径 :request.getSession().getServletContext().getRealPath(request.getRequestURI())

当前web应用的绝对路径 :servletConfig.getServletContext().getRealPath("/");

(ServletContext对象获得几种方式:

javax.servlet.http.HttpSession.getServletContext()

javax.servlet.jsp.PageContext.getServletContext()

javax.servlet.ServletConfig.getServletContext()

)

2、java类中获取路径

1) 利用Java的类加载机制 调用 XXX.class.getClassLoader().getResource(""); 方法来获取到ClassPath , 然后处理获得WebRoot目录

(这种方式只能是该class在WebRoot/WEB-INF/classes下才能生效, 如果该class被打包到一个jar文件中, 则该方法失效。这时就应该用下面一种方式)

2) spring框架的思路, 在WEB-INF/web.xml中,创建一个webAppRootKey的param, 指定一个值(默认为webapp.root)作为键值

然后通过Listener , 或Filter , 或Servlet 执行String webAppRootKey = getServletContext().getRealPath("/");

并将webAppRootKey对应的webapp.root 分别作为Key , Value写到System Properties系统属性中。之后在程序中通过System.getProperty("webapp.root")来获得WebRoot的物理路径

下面是一些得到classpath和当前类的绝对路径的一些方法。你可使用其中的一些方法来得到你需要的资源的绝对路径:

  1.得到当前类FileTest.class文件的URI目录,不包括自己:

        DebitNoteAction.class.getResource("")

  如:file:/D:/eclipse/springTest/WebRoot/WEB-INF/classes/atacarnet/src/com/evi/modules/atacarnet/action/

  2.得到当前ClassPath的绝对URI路径

        this.getClass().getResource("/")  

        this.getClass().getClassLoader().getResource("")

        Thread.currentThread().getContextClassLoader().getResource("")  

        ClassLoader.getSystemResource("")

  如:file:/D:/eclipse/springTest/WebRoot/WEB-INF/classes/

(推荐使用Thread.currentThread().getContextClassLoader().getResource("")来得到当前的classpath的绝对路径的URI表示法)

  3.取得服务器相对路径

        System.getProperty("user.dir")

  如:E:\apache-tomcat-5.5.16\apache-tomcat-5.5.16\bin

  6.取得项目中的绝对路径

        request.getRealPath("/")

        request.getRealPath("/config/")

  (但现在不提倡使用request.getRealPath("/")了,大家可试用ServletContext.getRealPath("/")方法得到Web应用程序的根目录的绝对路径)

  7.要取得src的文件非常容易,因为src是默认的相对目录,比如你说要取得src下com目录的test.java文件,你只需要这样就够了

        File f = new File(com/test.java);

  8.但如果我要取得不在src目录或者WebRoot目录下的文件呢,而是要从src或者WebRoot同级的目录中取呢,比如说doc吧

  我的硬方法是这样实现的:

String path = this.getServletContext().getRealPath("/");

Properties p = new Properties();

p.load(new FileInputStream(new File(path.substring(0,(path.lastIndexOf("\\WebRoot") + 1)) + "doc/db.properties")));

System.out.println(p.getProperty("driverName"));
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: