Java或Web中怎样解决jsp路径问题题

Java Web开发之访问路径问题分析
作者:老李-大连
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了Java Web开发之访问路径问题,较为详细的分析了java web开发过程中常见的绝对路径与相对路径使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
本文实例讲述了Java Web开发之访问路径问题。分享给大家供大家参考。具体如下:
Web应用是由大量的文件组成的,系统等运行主要是靠文件之间的相互调用来完成,调用就是根据文件的位置来确定的。如果你在访问某个文件的时候,系统报下面这样的错误,如果你的文件名没有写错,就是路径出错了。
为了说明路径问题,我们假设有以下的文档结构:
这是JBuilder2006下的一个截图,应用的名字是filepathweb,有两个文件夹,aa和bb,其中aa下有a_a.jsp和a_b.jsp两个文件,bb下有b_a.jsp文件。
Web文件访问的基本格式如下:
协议://主机:端口/应用名/文件夹名/文件
协议:这里应该是http协议;
主机:是运行Web应用的服务器的地址,可以使用主机名(或者域名),可以使用IP地址,如果是本机的话,可以使用虚拟IP地址(127.0.0.1),可以使用机器名。
端口:Web服务器运行时候所使用的端口,每个服务器程序都会有端口。对于Web应用来说,默认的端口是80。
应用名:在同一个应用服务器上可能运行多个Web应用,这是允许的,我们在访问某个应用的时候,需要指定所访问的Web应用,这个路径通常是Web应用文件夹的名字,但是可以配置成其它的。应用的配置参见Web应用部署相关内容。
文件夹名:在同一个Web应用中可能会根据不同的功能创建不同的文件夹来存放不同功能模块的文件,为了访问这个文件,必须指定它所在的文件夹。
文件:要访问的jsp文件。
需要注意的是文件夹名和文件名共同确定了这个文件,相当于文件的完整路径。对于Servlet的访问,使用的不是文件名,而是在web.xml中配置的路径,可以参加Servlet部分内容。
例:如何访问上面的Web应用的中的a_a.jsp文件,假设在本机上访问,使用的端口是8083,部署的时候使用的应用的名字就是filepathweb。
路径应该这样写:
http://127.0.01:8083/filepathweb/aa/a_a.jsp
http://localhost:8083/filepathweb/aa/a_a.jsp
需要解释几个问题:
(1)有人说,上网的时候从来不需要输入端口,原因是使用了默认端口,Web应用的默认端口是80。
(2)有人说,从来也不需要输入应用的名字,原因是设置了默认应用,关于默认应用请参考本书中的其它相关内容。
(3)有人说,也不需要输入要访问的文件名,原因是设置了欢迎网页,在web.xml中设置的,关于这部分内容,请参考本书中其它相关内容。
上面介绍了对于某个文件的访问方式,这里的访问方式叫绝对路径,也就是我们使用完整的路径,在web应用的文件相互访问的时候,除了可以使用绝对路径,还可以使用相对路径。例如,我们要在a_a.jsp文件中访问a_b.jsp,直接写绝对路径肯定没有问题,但是写起来不方便,另外如果部署的时候Web应用的名字发生变化了,访问的路径都需要改变,所以我们应该使用相对路径。
相对路径有两种情况:第一种,相对于当前文件的位置;第二种,相对于应用的位置。
相对路径在使用的时候需要知道以下知识:
(1)当前路径是".",表示当前路径。
(2)上一级路径是"..",要访问上一级文件夹,就需要写"./../"。
(3)相对于应用的路径直接写"/"。
根据上面的情况在a_a.jsp文件中访问a_b.jsp有以下3种方式(通过超链的方式):
&a href="a_b.jsp"&a_b.jsp&/a&&br&
&a href="http://localhost:8083/filepathweb/aa/a_b.jsp"&a_b.jsp&/a&&br&
&a href="/filepathweb/aa/a_b.jsp"&a_b.jsp&/a&&br&
第一种情况,就是相对路径,因为a_a.jsp和a_b.jsp在同一个文件夹,所以直接写a_b.jsp,系统会在a_a.jsp所在的文件夹查找a_b.jsp,使用的相对于当前文件的路径。
第二种情况,使用了绝对路径,就是前面介绍过的。
第三种情况,使用了应用的位置信息,然后只要写在应用中的位置就可以了。
这是访问同一个文件的情况,如果要访问不同文件夹的文件怎样办呢?例如,要在a_a.jsp中访问bb文件夹中的b_a.jsp。
对于bb中的b_a.jsp的访问,上面使用的3种方法中的第二种和第三种同样可以直接使用,但是相对于当前文件的路径比较麻烦,下面是在a_a.jsp中访问b_a.jsp的3种方式:
&a href="./../bb/b_a.jsp"&a_b.jsp&/a&&br&
&a href="http://localhost:8083/testweb/bb/b_a.jsp"&a_b.jsp&/a&&br&
&a href="/testweb/bb/b_a.jsp"&a_b.jsp&/a&&br&
需要说明的是相对于路径,如果当前文件夹比较深,可以多次使用"../","./"表示当前文件夹。
希望本文所述对大家的JSP程序设计有所帮助。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具中使用的路径,分为两种:绝对路径和相对路径。归根结底,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)框架的思路,在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,你在浏览器中输入请求路径:  则执行下面向行代码后打印出如下结果:1、 System.out.println(request.getContextPath());  打印结果:/news2、System.out.println(request.getServletPath());  打印结果:/main/list.jsp3、 System.out.println(request.getRequestURI());  打印结果:/news/main/list.jsp4、System.out.println(request.getRequestURL());  打印结果:5、 System.out.println(request.getRealPath("/"));  打印结果:F:\Tomcat 6.0\webapps\news\test
阅读(...) 评论()2434人阅读
在写程序时,想要获取某个资源文件,或想访问某个Servlet,如果路径写不对,就找不到该文件,或访问失败。由此可见,路径很重要。下面我们就来一一分析如何正确找到资源文件及访问Servlet。
1.Servlet访问路径
Servlet的访问路径是在web.xml文件中配置的,如下所示:
&url-pattern&Servlet访问路径&/url-pattern&
Servlet访问路径有如下两种书写方式:
路径以“/”开头
路径以“*“开头
Servlet的访问路径要么以“/”开头,要么以“*”开头,但是在Servlet中,现在很少使用“*”开头,在后面将要学习的过滤器中会使用它来匹配要过滤的资源。
2.请求转发和请求包含路径
请求转发和请求包含需要给出即将转发和包含资源的路径,例如:
request.getRequestDispatcher(“/BServlet”).forward(request,response),表示要转发到BServlet。request对象的getRequestDispatcher(Stringpath)方法的参数有如下两种书写方式:
以“/”开头:
相对当前项目路径,即:http://localhost:8080/项目名,例如:request.getRequestDispatcher(“/BServlet”)表示转发或包含路径为http://localhost:8080/项目名/BServlet的Servlet。
不以“/”开头:
相对当前Servlet的路径,例如:当前Servlet是AServlet,访问它的路径为http://localhost:8080/项目名/servlet/AServlet,那么request.getRequestDispatcher(“BServlet”)就相当于,转发或包含路径为http://localhost:8080/项目名/servlet/BServlet的Servlet。
以上两种书写方式中,以“/”开头的路径是绝对路径,不以“/”开头的路径是相对路径。为了以后的开发简便,建议大家采用第一种方式,即以“/”开头的路径。
3.重定向路径
进行重定向时,需要给出将要重定向的资源的路径,例如:
response.sendRedirect(“/Example/BServlet”),表示重定向到Example项目中的访问路径为“/BServlet”的Servlet。
重定向中的路径是客户端路径,只要是客户端路径都需要加上项目名,否则找不到将要访问的资源。重定向路径有以下要求:
路径要以“/”开头
以“/”开头,相对当前主机,即http://localhost:8080,所以路径上要加上项目名,如:response.sendRedirect(“/Example/Servlet”),对应的路径就是:http://localhost:8080/Example/Servlet。
4.页面中超链接和表单路径
页面中的超链接和表单路径和重定向路径一样,也是客户端路径,因此路径中要加上项目名。例如:
&formaction=”/Example/AServlet”&&/form&
&ahref=”/Example/AServlet”&&/a&
如果超链接或者表单路径中没有加上项目名,如:&ahref=”AServlet”&,并且没有以“/”开头,那么就是相对路径,相对于当前页面所在路径。例如,超链接所在页面是index.jsp,那么index.jsp页面的路径就是:http://localhost:8080/项目名,超链接路径就是:http://localhost:8080/项目名/AServlet。如果是这样就不存在问题,但是如果页面并不是在应用的根目录下,而是根目录下的一个目录中,例如html目录中,那么index.jsp的访问路径就应该是:http://localhost:8080/项目名/html,那么再使用&ahref=”AServlet”&中的路径就会出现问题,所以建议大家使用绝对路径。
5.ServletContext获取资源路径
ServletContext获取资源路径使用的方式是getRealPath(Stringpath),该方法获取的是应用发布到Tomcat安装目录下的webapps目录中的根目录,如:servletContext.getRealPath(“/”)返回的路径就是D:\apache-tomcat-7.0.42\webapps\项目名。
6.ClassLoader获取资源路径
在之前的文档中,我们讲解了在Servlet中使用ClassLoader来获取资源路径,今天我们要学习的是在普通类中使用ClassLoader获取资源路径。具体如下:
(1)创建一个web应用,Example14,在该应用下的【src】目录下新建txt文件,one.txt,文件内容如下所示:
(2)在该应用下新建一个Class类,DemoLoader,主要代码如例1-1所示:
例1-1DemoLoader.java
publicclassDemoLoader{
publicvoidfun1()throwsIOException{
//1.获得ClassLoader对象
ClassLoadercl=this.getClass().getClassLoader();
InputStreamin=cl.getResourceAsStream(&one.txt&);
Stringvalue=IOUtils.toString(in);
System.out.println(value);
在DemoLoader中,我们使用了IOUtils帮助类,该类是commons-io-1.4.jar包中的类,IOUtils类的toString(InputStream)方法是将输入流转换成字符串并返回。
(3)例1-1中,我们使用了单元测试,现在运行fun1()方法,运行结果如图1-1所示:
图1-1运行结果
由运行结果可知,使用ClassLoader的getResourceAsStream(“one.txt”)方法获取到了src目录下的one.txt文件资源。
(4)现在将fun1()方法稍作修改,如例1-2所示:
例1-2fun1()方法
publicvoidfun1()throwsIOException{
//1.获得ClassLoader对象
ClassLoadercl=this.getClass().getClassLoader();
InputStreamin=cl.getResourceAsStream(&/one.txt&);
Stringvalue=IOUtils.toString(in);
System.out.println(value);
例1-2相对于例1-1,在路径上多加了“/“。
(5)再次运行fun1()方法,运行结果如图1-2所示:
图1-2运行结果
由运行结果可知,路径以“/”开头,one.txt文件就找不到了。cl.getResource(“/”)获取的URL为null,如果是cl.getResource(“”),那么获取的URL的值为“file:/F:/space/Example13/WebRoot/WEB-INF/classes/“,因此要注意:
使用ClassLoader获取资源路径,资源路径不能以“/“开头。
7.Class获取资源路径
在之前的文档中,我们也讲解过在Servlet中使用Class来获取资源路径,下面我们要学习的是在普通类中使用Class获取资源路径,具体如下:
(1)在DemoLoader类中再次新建一个单元测试方法fun2(),主要代码如例1-3所示:
例1-3fun2()方法
publicvoidfun2()throwsIOException{
Classc=this.getClass();//获取Clas对象
InputStreamin=c.getResourceAsStream(&/one.txt&);//获取one.txt文件流
System.out.println(IOUtils.toString(in));//打印文件内容
fun2()方法中,使用Class获取资源时,资源路径是以“/“开头。
(2)运行fun2()方法,运行结果如图1-3所示:
图1-3运行结果
(3)对fun2()方法稍作修改,如例1-4所示:
例1-4fun2()方法
publicvoidfun2()throwsIOException{
Classc=this.getClass();//获取Clas对象
InputStreamin=c.getResourceAsStream(&one.txt&);//获取one.txt文件流
System.out.println(IOUtils.toString(in));//打印文件内容
将例1-3中fun2()方法中的资源路径前面的“/“去掉。
(4)再次运行fun2()方法,运行结果如图1-4所示:
图1-4运行结果
图1-4中,运行结果出现空指针异常,原因是没有找到one.txt文件。
Myeclipse中的应用在工作空间中,目录结构如图1-5所示:
图1-5class文件所在目录
one.txt文件在工作空间的位置,如图1-6所示:
图1-6txt文件所在目录
使用Class获取资源路径,要注意以下两点:
路径以“/“开头:相对的是classes目录,即在图1-6中的目录下查找文件;
例如:class.getResource(“/“),它返回的URL为:
file:/F:/space/Example14/WebRoot/WEB-INF/classes/
所以想要获取src根目录下的one.txt文件,可以通过class.getResourceAsStream(“/one.txt”)方法。
路径不以“/”开头:相对的是当前类的class文件所在的路径,即在图1-5中的目录下查找文件;
例如:class.getResource(“”)方法的返回值为:
file:/F:/space/Example14/WebRoot/WEB-INF/classes/cn/itcast/road/
而通过class.getResource(“one.txt”)方法获取one.txt文件,是在classes目录下的cn/itcast/road目录下查找one.txt,由于one.txt文件是在classes目录下,所以报了图1-4的空指针异常。
以上内容根据传智播客老师的授课内容整理:支持传智播客---
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:175224次
积分:3212
积分:3212
排名:第10633名
原创:143篇
转载:14篇
译文:10篇
评论:56条
阅读:45730java(Web)中相对路径,绝对路径问题总结
- Java综合 - web - ITeye论坛
java(Web)中相对路径,绝对路径问题总结
锁定老帖子
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
yaofeng911
等级: 初级会员
来自: 苏州
发表时间:&&
最后修改:
相关知识库:
1.基本概念的理解
  绝对路径:绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(URL和物理路径)例如:C:\xyz\test.txt 代表了test.txt文件的绝对路径。也代表了一个URL绝对路径。
  相对路径:相对与某个基准目录的路径。包含Web的相对路径(HTML中的相对目录),例如:在Servlet中,"/"代表Web应用的跟目录。和物理路径的相对表示。例如:"./" 代表当前目录,"../"代表上级目录。这种类似的表示,也是属于相对路径。
另外关于URI,URL,URN等内容,请参考RFC相关文档标准。
RFC 2396: Uniform Resource Identifiers (URI): Generic Syntax, ()
2.关于JSP/Servlet中的相对路径和绝对路径。
2.1服务器端的地址
   服务器端的相对地址指的是相对于你的web应用的地址,这个地址是在服务器端解析的(不同于html和javascript中的相对地址,他们是由客户端浏览器解析的)也就是说这时候在jsp和servlet中的相对地址应该是相对于你的web应用,即相对于的。
  其用到的地方有:
forward:servlet中的request.getRequestDispatcher(address);这个address是在服务器端解析的,所以,你要forward到a.jsp应该这么写:request.getRequestDispatcher(“/user/a.jsp”)这个/相对于当前的web应用webapp,其绝对地址就是:。 sendRedirect:在jsp中&%response.sendRedirect("/rtccp/user/a.jsp");%&
2.22、客户端的地址
所有的html页面中的相对地址都是相对于服务器根目录()的,而不是(跟目录下的该Web应用的目录)http://192.168.0.1/webapp/的。
Html中的form表单的action属性的地址应该是相对于服务器根目录()的,所以,如果提交到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/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:\bea\weblogic700.....那么,你的文件根路径就是c:\.所以,有两种方式能够让你访问你的服务器端的文件:a.使用绝对路径:比如将你的参数文件放在c:\yourconfig\yourconf.properties,直接使用 new FileInputStream("yourconfig/yourconf.properties");b.使用相对路径:相对路径的根目录就是你的webapplication的根路径,即WEB-INF的上一级目录,将你的参数文件放
在yourwebapp\yourconfig\yourconf.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中测试。
等级: 初级会员
来自: 上海
发表时间:&&
yaofeng911 写道
1.基本概念的理解
  绝对路径:绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(URL和物理路径)例如:C:\xyz\test.txt 代表了test.txt文件的绝对路径。也代表了一个URL绝对路径。
  相对路径:相对与某个基准目录的路径。包含Web的相对路径(HTML中的相对目录),例如:在Servlet中,"/"代表Web应用的跟目录。和物理路径的相对表示。例如:"./" 代表当前目录,"../"代表上级目录。这种类似的表示,也是属于相对路径。
另外关于URI,URL,URN等内容,请参考RFC相关文档标准。
RFC 2396: Uniform Resource Identifiers (URI): Generic Syntax, ()
2.关于JSP/Servlet中的相对路径和绝对路径。
2.1服务器端的地址
   服务器端的相对地址指的是相对于你的web应用的地址,这个地址是在服务器端解析的(不同于html和javascript中的相对地址,他们是由客户端浏览器解析的)也就是说这时候在jsp和servlet中的相对地址应该是相对于你的web应用,即相对于的。
  其用到的地方有:
forward:servlet中的request.getRequestDispatcher(address);这个address是在服务器端解析的,所以,你要forward到a.jsp应该这么写:request.getRequestDispatcher(“/user/a.jsp”)这个/相对于当前的web应用webapp,其绝对地址就是:。 sendRedirect:在jsp中&%response.sendRedirect("/rtccp/user/a.jsp");%&
2.22、客户端的地址
所有的html页面中的相对地址都是相对于服务器根目录()的,而不是(跟目录下的该Web应用的目录)http://192.168.0.1/webapp/的。
Html中的form表单的action属性的地址应该是相对于服务器根目录()的,所以,如果提交到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/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:\bea\weblogic700.....那么,你的文件根路径就是c:\.所以,有两种方式能够让你访问你的服务器端的文件:a.使用绝对路径:比如将你的参数文件放在c:\yourconfig\yourconf.properties,直接使用 new FileInputStream("yourconfig/yourconf.properties");b.使用相对路径:相对路径的根目录就是你的webapplication的根路径,即WEB-INF的上一级目录,将你的参数文件放
在yourwebapp\yourconfig\yourconf.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前端技术
Java企业应用
编程语言技术}

我要回帖

更多关于 车辆路径问题 的文章

更多推荐

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

点击添加站长微信