java web 如何去掉url中的java contextpathh

19117人阅读
1,request.getRealPath(&/&);这个方法已不推荐用
2,在Servlet 里用this.getServletContext().getRealPath(&/&);获得要路径。
&&&&& 或者 request.getSession().getServletContext().getRealPath(&/&)来获取。
3,struts里用this.getServlet().getServletContext().getRealPath(&/&)获得要路径。
在spring中,可以通过
&&& ContextLoader.getCurrentWebApplicationContext().getServletContext().getRealPath(&/&)& 来获取。
再转java获取WEB服务真实路径&:
(1)、request.getRealPath(&/&);//不推荐使用获取工程的根路径
(2)、request.getRealPath(request.getRequestURI());//获取jsp的路径,这个方法比较好用,可以直接在servlet和jsp中使用
(3)、request.getSession().getServletContext().getRealPath(&/&);//获取工程的根路径,这个方法比较好用,可以直接在servlet和jsp中使用
(4)、this.getClass().getClassLoader().getResource(&&).getPath();//获取工程classes下的路径,这个方法可以在任意jsp,servlet,java文件中使用,因为不管是jsp,servlet其实都是java程序,都是一个class。所以它应该是一个通用的方法。
this.getClass().getClassLoader().getResource(&template&);&
&& 首先,调用对象的getClass()方法是获得对象当前的类类型,这部分数据存在方法区中,而后在类类型上调用getClassLoader()方法是得到当前类型的类加载器,我们知道在Java中所有的类都是通过加载器加载到虚拟机中的,而且类加载器之间存在父子关系,就是子知道父,父不知道子,这样不同的子加载的类型之间是无法访问的(虽然它们都被放在方法区中),所以在这里通过当前类的加载器来加载资源也就是保证是和类类型同一个加载器加载的。&
最后调用了类加载器的getResourceAsStream()方法来加载资源。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:429880次
积分:3941
积分:3941
排名:第7565名
原创:36篇
转载:92篇
评论:35条
(1)(1)(1)(1)(1)(6)(1)(4)(1)(6)(16)(14)(9)(13)(6)(22)(8)(17)web项目中各种路径的获取
1.可以在servlet的init方法里
String path = getServletContext().getRealPath(&/&);
这将获取web项目的全路径
例如 :E:\eclipseM9\workspace\tree\
tree是我web项目的根目录
2.你也可以随时在任意的class里调用
this.getClass().getClassLoader().getResource(&/&).getPath();
这将获取 到classes目录的全路径
例如 : E:\eclipseM9/workspace/tree/WEB-INF/classes/
这个方法也可以不在web环境里确定路径,比较好用
3.request.getContextPath();
获得web根的上下文环境
tree是我的web项目的root context
/* 取得当前目录的路径
path=request.getRealPath(&&);
/*得到jbossWEB发布临时目录 warUrl=.../tmp/deploy/tmp14544test-exp.war/
path=C:\jboss-4.0.5.GA\server\default\tmp\deploy\tmp14544test-exp.war\
String path = (String)request.getContextPath();
/*得到项目(test)应用所在的真实的路径 path=/test&
String path = request.getRequestURI();
/*得到应用所在的真实的路径 path=/test/admin/admindex.jsp
String savePath=request.getRealPath(request.getServletPath());
/*得到当前文件的磁盘绝对路径
//JAVA 取得当前目录的路径
File file=new File(&.&);&
String path=file.getAbsolutePath();
path=file.getPath();
/*得到jboss运行目录 path=C:\jboss-4.0.5.GA\bin\
---------------------------------------------
相对路径/绝对路径总结
1.基本概念的理解
绝对路径:绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(URL和物理路径)例如:
C:xyz est.txt 代表了test.txt文件的绝对路径。/index.htm也代表了一个URL绝对路径。
相对路径:相对与某个基准目录的路径。包含Web的相对路径(HTML中的相对目录),例如:在
Servlet中,&/&代表Web应用的跟目录。和物理路径的相对表示。例如:&./& 代表当前目录,&../&代表上级目录。这种类似的表示,也是属于相对路径。
另外关于URI,URL,URN等内容,请参考RFC相关文档标准。
RFC 2396: Uniform Resource Identifiers (URI): Generic Syntax,
(http://www.ietf.org/rfc/rfc2396.txt)
2.关于JSP/Servlet中的相对路径和绝对路径。
2.1服务器端的地址
服务器端的相对地址指的是相对于你的web应用的地址,这个地址是在服务器端解析的(不同于html和javascript中的相对地址,他们是由客户端解析的)也就是说这时候在jsp和servlet中的相对地址应该是相对于你的web应用,即相对于http: //192.168.0.1/webapp/的。
其用到的地方有:
forward:servlet中的request.getRequestDispatcher(address);这个address是在服务器端解析的,所以,你要forward到a.jsp应该这么写:request.getRequestDispatcher(&/user/a.jsp&)这个/ 相对于当前的web应用webapp,其绝对地址就是:http://192.168.0.1/webapp/user/a.jsp。 sendRedirect:在jsp中&%response.sendRedirect(&/rtccp/user/a.jsp&);%&
2.22、客户端的地址
所有的html页面中的相对地址都是相对于服务器根目录(http://192.168.0.1/)的,而不是(跟目录下的该Web应用的目录) http://192.168.0.1/webapp/的。 Html中的form表单的action属性的地址应该是相对于服务器根目录(http://192.168.0.1/)的,所以,如果提交到a.jsp 为:action=&/webapp/user/a.jsp&或action=&&%=request.getContextPath()% &&/user/a.jsp;
提交到servlet为actiom=&/webapp/handleservlet& Javascript也是在客户端解析的,所以其相对路径和form表单一样。
因此,一般情况下,在JSP/HTML页面等引用的,Javascript.Action等属性前面最好都加上
&%=request.getContextPath()%&,以确保所引用的文件都属于Web应用中的目录。另外,应该尽量避免使用类似&.&,&./&,&../../&等类似的相对该文件位置的相对路径,这样当文件移动时,很容易出问题。
3. JSP/Servlet中获得当前应用的相对路径和绝对路径
3.1 JSP中获得当前应用的相对路径和绝对路径
根目录所对应的绝对路径:request.getRequestURI()
文件的绝对路径  :application.getRealPath(request.getRequestURI());
当前web应用的绝对路径 :application.getRealPath(&/&);
取得请求文件的上层目录:new File(application.getRealPath(request.getRequestURI())).getParent()
3.2 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()
4.java 的Class中获得相对路径,绝对路径的方法
4.1单独的Java类中获得绝对路径
根据java.io.File的Doc文挡,可知:
默认情况下new File(&/&)代表的目录为:System.getProperty(&user.dir&)。
一下程序获得执行类的当前路径
package org.cheng.&
import java.io.F&
public class FileTest ...{&
public static void main(String[] args) throws Exception ...{&
System.out.println(Thread.currentThread().getContextClassLoader().getResource(&&));&
System.out.println(FileTest.class.getClassLoader().getResource(&&));&
System.out.println(ClassLoader.getSystemResource(&&));&
System.out.println(FileTest.class.getResource(&&));&
System.out.println(FileTest.class.getResource(&/&));&
//Class文件所在路径&
System.out.println(new File(&/&).getAbsolutePath());&
System.out.println(System.getProperty(&user.dir&));&
4.2服务器中的Java类获得当前路径
(1).Weblogic
WebApplication的文件根目录是你的weblogic安装所在根目录。
例如:如果你的weblogic安装在c:beaweblogic700.....
那么,你的文件根路径就是c:.
所以,有两种方式能够让你访问你的服务器端的文件:
a.使用绝对路径:
比如将你的参数文件放在c:yourconfigyourconf.properties,
直接使用 new FileInputStream(&yourconfig/yourconf.properties&);
b.使用相对路径:
相对路径的根目录就是你的webapplication的根路径,即WEB-INF的上一级目录,将你的参数文件放
在yourwebappyourconfigyourconf.properties,
这样使用:
new FileInputStream(&./yourconfig/yourconf.properties&);
这两种方式均可,自己选择。
(2).Tomcat
在类中输出System.getProperty(&user.dir&);显示的是%Tomcat_Home%/bin
不是你的JSP放的相对路径,是JSP引擎执行这个JSP编译成SERVLET
的路径为根.比如用新建文件法测试File f = new File(&a.htm&);
这个a.htm在resin的安装目录下
(4).如何读相对路径哪?
在Java文件中getResource或getResourceAsStream均可
例:getClass().getResourceAsStream(filePath);//filePath可以是&/filename&,这里的/代表web
发布根路径下WEB-INF/classes
默认使用该方法的路径是:WEB-INF/classes。已经在Tomcat中测试。
通过上面内容的使用,可以解决在Web应用服务器端,移动文件,查找文件,复制
删除文件等操作,同时对服务器的相对地址,绝对地址概念更加清晰。
建议参考URI,的RFC标准文挡。同时对Java.io.File. Java.net.URI.等内容了解透彻
对其他方面的理解可以更加深入和透彻。
这是在Java中去当前项目的根目录的方法
java 代码/** *//**&
* TODO 取得当前项目的根目录&
* @author PHeH
public class Application ...{&
/** *//**&
* TODO 获取根目录&
* @return&
* @author PHeH
public static String getRootPath()...{&
//因为类名为&Application&,因此& Application.class&一定能找到&
String result = Application.class.getResource(&Application.class&).toString();&
int index = result.indexOf(&WEB-INF&);&
if(index == -1)...{&
index = result.indexOf(&bin&);&
result = result.substring(0,index);&
if(result.startsWith(&jar&))...{&
// 当class文件在jar文件中时,返回&jar:file:/F:/ ...&样的路径&
result = result.substring(10);&
}else if(result.startsWith(&file&))...{&
// 当class文件在class文件中时,返回&file:/F:/ ...&样的路径&
result = result.substring(6);&
if(result.endsWith(&/&))result = result.substring(0,result.length()-1);//不包含最后的&/&&Java Web项目中路径问题的解决方案 - 博客频道 - CSDN.NET
音乐喝啤酒的CSDN博客
记录成长的每一点进步!
分类:服务器
在javaweb项目中添加配置文件,满足连接数据库配置参数以及其他自定义参数存放,可自己写一个配置文件**.properties,把项目所需的自定义配置信息以名值对的形式写入文件。在项目工程目录下的WebRoot\WEB-INF\classes目录下新建一个conf文件夹专门存放配置文件,然后把**.properties配置文件放到conf中,部署时IDE会自动将其复制到相应路径。
java web项目未开启服务(有没有部署到tomcat中一样)使用this.getClass().getResource(&/&)得到Url对象,打印如下:
file:/D:/myEclipseWorkspace/你的项目工程名/WebRoot/WEB-INF/classes/
此路径为java web项目源路径。
部署到tomcat中的java web项目开启服务后使用this.getClass().getResource(&/&)得到Url对象,打印如下:
file:/D:/program/apache-tomcat-6.0.14/webapps/你的项目工程名/WEB-INF/classes/
然后调用toString().substring(6)获得绝对路径的前半部分,加上相对路径,如
conf/jdbc.properties
拼接成配置文件的绝对路径:(这个路径最前面的“/“本人也不清楚是什么意思,但是测试发现有没有那个”/“都能成功)
/F:/D:/program/apache-tomcat-6.0.14/webapps/你的项目工程名/WEB-INF/classes/conf/send.properties
java application项目使用this.getClass().getResource(&/&)得到Url对象,打印如下:
file:/D:/myEclipseWorkspace/你的项目工程名/bin/
此路径为java application项目的class文件的根路径。
注意:未开启tomcat web服务时打印的不是上面的路径,是你的项目源文件的classes路径。
上面的是本人最近在学习javaWeb时候遇到路径问题的解决方法,以下的是网上搜集到的资料共享一下,未测试
  Java中使用的路径,分为两种:绝对路径和相对路径。归根结底,Java本质上只能使用绝对路径来寻找资源。所有的相对路径寻找资源的方法,都不过是一些便利方法。不过是API在底层帮助我们构建了绝对路径,从而找到资源的!
  在开发Web方面的应用时, 经常需要获取服务器中当前WebRoot的物理路径。
  如果是Servlet , Action , Controller, 或者Filter , Listener , 拦截器等相关类时, 我们只需要获得ServletContext, 然后通过ServletContext.getRealPath(&/&)来获取当前应用在服务器上的物理地址。
  如果在类中取不到ServletContext时,有两种方式可以做到:
  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.DebitNoteAction.class.getResource(&&)
  得到的是当前类FileTest.class文件的URI目录。不包括自己!
  如:file:/D:/eclipse/springTest/WebRoot/WEB-INF/classes/
  atacarnet/src/com/evi/modules/atacarnet/action/
  2.DebitNoteAction.class.getResource(&/&)
  得到的是当前的classpath的绝对URI路径。
  如:file:/D:/eclipse/springTest/WebRoot/WEB-INF/classes/
  3.Thread.currentThread().getContextClassLoader().getResource(&&)
  得到的也是当前ClassPath的绝对URI路径
  如:file:/D:/eclipse/springTest/WebRoot/WEB-INF/classes/
  推荐使用该方法获取。
  4.DebitNoteAction.class.getClassLoader().getResource(&&) 或ClassLoader.getSystemResource(&&)
  得到的也是当前ClassPath的绝对URI路径。
  如:file:/D:/eclipse/springTest/WebRoot/WEB-INF/classes/
  5.取得服务器相对路径
  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应用程序的根目录的绝对路径。
  要取得src的文件非常容易,因为src是默认的相对目录,比如你说要取得src下com目录的test.java文件,你只需要这样就够了
  File f = new File(com/test.java);
  但如果我要取得不在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&));
-------------------------------
另:Request中getContextPath、getServletPath、getRequestURI、getRequestURL、getRealPath的区别
  假定你的web application 名称为news,你在浏览器中输入请求路径:http://localhost:8080/news/main/list.jsp
  则执行下面向行代码后打印出如下结果:
1、 System.out.println(request.getContextPath());
  打印结果:/news
2、System.out.println(request.getServletPath());
  打印结果:/main/list.jsp
3、 System.out.println(request.getRequestURI());
  打印结果:/news/main/list.jsp
4、System.out.println(request.getRequestURL());
  打印结果:http://localhost:8080/news/main/list.jsp
5、 System.out.println(request.getRealPath(&/&));
  打印结果:F:\Tomcat 6.0\webapps\news\tes
排名:第12478名
(38)(7)(8)(5)(13)(1)(21)(19)(38)(16)(10)(6)(0)(12)(4)(1)}

我要回帖

更多关于 web.xml contextpath 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信