`
天涯海角tour
  • 浏览: 173977 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

jsp .servlet 文件路径问题

    博客分类:
  • java
阅读更多
转载 http://www.webdn.com/web_file/java/0038.asp
1.基本概念的理解

  绝对路径:绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(URL和物理路径)例如:
C:\xyz\test.txt 代表了test.txt文件的绝对路径。http://www.sun.com/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页面等引用的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.file;
import java.io.File;

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

(3).Resin

不是你的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中测试。

5.读取文件时的相对路径,避免硬编码和绝对路径的使用。(来自网络)
5.1 采用Spring的DI机制获得文件,避免硬编码。
   参考下面的连接内容:
   http://www.javajia.net/viewtopic.php?p=90213&
5.2 配置文件的读取
参考下面的连接内容:
http://dev.csdn.net/develop/article/39/39681.shtm
5.3 通过虚拟路径或相对路径读取一个xml文件,避免硬编码
参考下面的连接内容:
http://club.gamvan.com/club/clubPage.jsp?iPage=1&tID=10708&ccID=8

6.Java中文件的常用操作(复制,移动,删除,创建等)(来自网络)
常用 java File 操作类
http://www.easydone.cn/014/200604022353065155.htm

Java文件操作大全(JSP中)
http://www.pconline.com.cn/pcedu/empolder/gj/java/0502/559401.html

java文件操作详解(Java中文网)
http://www.51cto.com/html/2005/1108/10947.htm

JAVA 如何创建\删除\修改\复制目录及文件
http://www.gamvan.com/developer/java/2005/2/264.html

总结:
通过上面内容的使用,可以解决在Web应用服务器端,移动文件,查找文件,复制
删除文件等操作,同时对服务器的相对地址,绝对地址概念更加清晰。
建议参考URI,的RFC标准文挡。同时对Java.io.File. Java.net.URI.等内容了解透彻
对其他方面的理解可以更加深入和透彻。
分享到:
评论
1 楼 zhanggnol 2010-11-13  
在百度里搜了几篇  servlet路径问题, 出来的大多数都是这一篇  。。。。

相关推荐

    javax.servlet jar包---解决找不到javax.servlet.*等问题

    - 在传统的Java Web项目中,通常将`javax.servlet.jar`和`javax.servlet.jsp.jar`添加到项目的类路径中,这可以通过在`WEB-INF/lib`目录下放置这两个jar包实现。 - 使用Maven或Gradle等构建工具时,可以在pom.xml...

    jakarta.servlet.jsp.jstl-api-2.0.0.jar

    将"jakarta.servlet.jsp.jstl-api-2.0.0.jar"添加到Tomcat的类路径中,可以确保JSP页面能够识别并使用JSTL标签。 JSTL主要包含以下几个核心标签库: 1. **Core Library**(c:):提供了基本的控制流和数据处理功能...

    javax.servlet.jar与javax.servlet.jsp.jar

    在Java Web开发中,`javax.servlet.jar`和`javax.servlet.jsp.jar`是两个非常重要的库文件,它们分别提供了Servlet和JSP(JavaServer Pages)的核心API。这两个库是开发基于Java的Web应用程序不可或缺的部分,特别是...

    Java web常用包javax.servlet.jsp.jstl-1.2.1.zip

    7. **配置与依赖**:在使用JSTL时,需要在web.xml文件中配置JSTL相关的jar文件,并确保它们在类路径中可用。`javax.servlet.jsp.jstl-1.2.1.jar`及其依赖如`javax.servlet.jsp.jstl-api-1.2.1.jar`、`taglibs-...

    javax.servlet.jsp.jar

    2. **手动导入**:如果你的环境不支持自动化依赖管理,你可以从官方网站或者其他可靠的源下载`javax.servlet.jsp.jar`,然后将其放入项目的`lib`目录,或者添加到你的IDE的类路径中。 3. **检查应用服务器**:如果...

    javax.servlet.jar包下载

    在Java编程环境中,`javax.servlet.jar` 是一个非常重要的库,它包含了Servlet和JSP(JavaServer Pages)的核心API,是开发Web应用程序的基础组件。这个包由Java EE(Enterprise Edition)标准提供,允许开发者创建...

    servlet-api.jar和jsp-api.jar文件

    1. **JspServlet**:默认的JSP引擎,用于处理JSP页面请求。 2. **JspPage接口**:JSP页面被编译成Java类时,该类会实现这个接口,使得JSP页面可以作为Servlet来运行。 3. **jsp.java文件**:当JSP页面被首次请求时...

    tomcat10升级单个jar里面的jakarta.servlet.http.HttpServletRequest

    直接进入lib文件夹: 源文件:commons-fileupload-...源应该是压缩存档、文件夹或单个文件的路径。目标将在指定路径创建为与源相同类型的资源。 参考说明地址:https://github.com/apache/tomcat-jakartaee-migration

    javax.servlet jar包-解决找不到javax.servlet.*等问题

    1. **添加Servlet库**:如果你是在IDEA或Eclipse等集成开发环境中,需要在项目的类路径中添加`javax.servlet.jar`。如果是Maven项目,可以在pom.xml文件中添加如下依赖: ```xml &lt;groupId&gt;javax.servlet ...

    javax.servlet.rar

    E:\eclipse-java-indigo-SR1-win32\eclipse\plugins 选择javax.servlet.jsp_2.0.0.v201101211617.jar;javax.servlet_2.5.0.v201103041518.jar 进行添加即可 注释:由于版本不同,文件包名可能稍有区别。

    编译时提示软件包javax.servlet.http不存在,如何解决

    例如,javac -classpath ./test.jar TestJar.java 将使用 ./test.jar 作为类搜索路径来编译 TestJar.java 文件。 Java 编译和运行时的类搜索路径 在 Java 编译和运行时,类搜索路径是非常重要的。它指定了 Java ...

    javax.servlet-api-3.1.0.jar javax.el-api-2.2.4.jar javax.el-2.2.4.jar

    考虑到版本兼容性,开发者需要确保所使用的Servlet API和EL实现与运行环境的服务器版本相匹配,以避免潜在的冲突和不兼容问题。例如,Servlet 3.1 API可能无法在只支持Servlet 2.5的服务器上运行。 综上所述,`...

    java网上商城项目源码(jsp.servlet+javabean+mysql+jdbc)

    9. **src**目录:这个目录通常包含项目的Java源代码文件,包括JSP、Servlet和JavaBean等。 10. **WebRoot**目录:这是Web应用的根目录,包含HTML、CSS、JavaScript文件,以及图片、静态资源和Web应用的配置文件。 ...

    javax-servlet-api-3.0.1.jar

    由于这个JAR文件只包含API接口,因此不会包含任何实际的Servlet实现,避免了不同容器间的版本冲突问题。 在Java web开发中,理解并熟练运用Servlet API是基础,也是构建高性能、可扩展的web应用程序的关键。通过这...

    用jsp.servlet实现人力资源管理系统

    而"HRProjectV2.0"很可能是项目源码的压缩包,包含了所有相关的JSP文件、Servlet类、配置文件、数据库脚本以及可能的测试文件等。解压后,开发者可以深入研究源代码,了解如何将JSP和Servlet集成在一起,以及它们...

    零基础学Java.Web开发:JSP.Servlet.Struts.Spring.Hibernate.Ajax(PPT).

    这个压缩包中的资源,"零基础学Java.Web开发:JSP Servlet Struts Spring Hibernate Ajax(PPT)",旨在为初学者提供一个全面的学习路径,从基础的网页编程到复杂的框架应用。 1. **JavaServer Pages (JSP)**: JSP是...

    WebLogic平台下部署Servlet与Jsp

    2. **遇到的问题及解决**:实验初期可能遇到未编译JAVA文件就打包的问题,解决方法是在打包前先确保所有源代码都已正确编译。 3. **后续扩展**:可以尝试部署更复杂的Servlet与Jsp应用,探索更多高级功能,如会话...

    jsp_servlet路径问题

    ### JSP/Servlet中的路径问题详解 #### 一、路径的基本概念 在JSP和Servlet技术中,理解和处理路径是非常重要的。路径可以分为绝对路径和相对路径两种。 **1. 绝对路径** - **定义**:绝对路径是指文件或目录在...

    0Java.Web开发:JSP.Servlet.Struts.Spring.Hibernate.Ajax

    通过配置在Web应用的部署描述符(web.xml)中,Servlet可以被映射到特定的URL路径。 3. **Struts**:Struts是一个基于MVC(Model-View-Controller)设计模式的Java Web框架,它简化了构建基于JSP和Servlet的Web应用...

Global site tag (gtag.js) - Google Analytics