`

总结的有关java路径的一些东西

    博客分类:
  • JAVA
阅读更多

这是我在网上搜索的一篇比较全的讲解java路径的文章,由于当时没有看作者,所以没贴链接

对作者抱歉,我只是做记录学习用!

 

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中

   2.2、客户端的地址 所有的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=""/user/a.jsp;
  提交到servlet为actiom="/webapp/handleservlet"
  javascript也是在客户端解析的,所以其相对路径和form表单一样。
    因此,一般情况下,在JSP/HTML页面等引用的CSS,javascript.Action等属性前面最好都加上 ,以确保所引用的文件都属于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.读取文件时的相对路径,避免硬编码和绝对路径的使用。

 

===============================================================

 

首先说一下调试:属于路径配置问题。
首先,提供一份已通过的配置文件:
    <?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
    xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
   
    <servlet>
        <servlet-name>test</servlet-name>
        <servlet-class>search.Search</servlet-class>

        <load-on-startup>1</load-on-startup>
       
    </servlet>

    <servlet-mapping>
    <servlet-name>test</servlet-name>
    <url-pattern>/search/Search</url-pattern>
    </servlet-mapping>
</web-app>

下面分析一下搜集资料:
    摘自快问:
    Q:请教一下高手,action=http://www.steel-pipe-tube-manufacturer.com/contact_us.html?action=send 是不是有可能是链接到动态网站上面去的? 据他讲,他好象也是静态网站.
A:静态网页不可能具有发送邮件的功能(除非调用外部邮件发送程序,如outlook,而这个链接就仅仅是完成一个调用这个外部程序的功能,不能直接发送,静态页面可以实现),
action=http://www.steel-pipe-tube-manufacturer.com/contact_us.html?action=send
分 成以后面的问好隔开分成两个部分,问号前为需要跳转的到的页面地址,问号后面是一组值,这组值将传到问号前面的页面以供代码利用,你这个问号前面的地址为 一以html扩展名的绝对路径所以是不是这个网站提供的邮件发送服务,而这里之所以是html扩展名是因为动态页面解析以后的页面,而其在服务器用于解 析的页面实际是动态页面。
    
<form action="#">:表示为该地址为缺省,即本地地址!

   
   Q: <html:form action="oxAction.do?forumID=取参数值代码" >中的 取参数值代码 部分如何写呢?

    A:这样的用法不行的   ,<htm:form action="<%%>" 中的<%%>不被Struts所解析的 ,用<%%>或者<bean:write>形式都是不行的?如何写代码解决在其中插入动态参数值问题?

   Q:<html:link page="/ss.do <form action="/ss.do 区别在哪?
   A:
<form action="ss.do?action=ddd  这个OK   会把form中包含的input标签中的name=value传递到服务器端
       <html:link page="/ss.do?action=ddd 这个ok   会把action最为一个parameter传到服务器

相对于Context路径与相对于项目路径分析与区别:(转)
    其实,在JSP中用到的相对上下文路径(Context Relative),比如<%@ include file="relativeURL" %> 或<jsp:include>动作中用到的相对路径,网上很多资料都是人云亦云,缺少清晰的实例,以Tomcat 5.0作为web server,经过实验之后,总结如下:

(1)若HTML或JSP元素中用到的路径是以文件名或目录名(包括. .. 这2种特殊目录符号)开头,则该路径的参照基准都是当前页面文件的目录位置。

(2)HTML和JSP元素中用到的相对上下文路径,即URL都是以"/"开头,它们的参照是不同的。实际上,在HTML中,这个"/"代表的是http://localhost:8080;而在JSP元素中以"/"开头,则指代在conf/server.xml中设置的<Context>中的path属性的值。

 

java中取得上下文路径的方法

1.在任意的class里调用
URLDecoder.decode(this.getClass().getClassLoader().getResource("/").getPath(), "UTF-8");
将获得当前class的全路径。
如 : C:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\clientweb\WEB-INF\classes
URLDecoder.decode负责把编码还原,不然路径中就会有类似于%20%ED等的符号。

2.可以在servlet的init方法里
String path = getServletContext().getRealPath("/");
这将获取web项目的全路径
例如:\eclipse\workspace\tree\
tree是web项目的根目录

3.request.getContextPath();
获得web根的上下文环境
如 /tree
tree是web项目的root context

 

=====================================================

通常我在写javascript的时候从来没有意识到document和window.document之间是有区别的,实际使用过程中也确实没有遇到问题,但是这埋下了非常大的隐患,当出现问题时,这个bug就会变得非常难找。
代码如下:
test1.jsp:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
 <title>test1.jsp</title>
</head>
<body>
<iframe src='test2.jsp' />
</body>
</html>

test2.jsp:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
 <title>test2.jsp</title>
</head>
<script language='JavaScript'>
function showA() {
 alert(document.getElementById('input2').value);
}
function showB() {
 alert(window.document.getElementById('input2').value);
}
</script>
<body>
<input id='input2' type='text' name='name2' value='ph2' /><br>
<input type='button' name='butt1' value='showA()' onclick='javascript:showA();' /><br>
<input type='button' name='butt2' value='showB()' onclick='javascript:showB();' /><br>
</body>
</html>

点showA()和点showB()有区别吗?大多数机器上都是没有,但是毕竟还是有,今天就被我遇到了,一个用户youxing他就告诉我在他的笔记本上showB()会出现错误。(操作系统,浏览器版本,设置都是一样,奇怪吧!)
问题在于当test2.jsp存在于iframe中时,这里的window.document究竟是指iframe里的document,还是指外面这个document呢?

所以,在此blog提醒自己,可以省略window.的地方,还是省略吧。


出处:http://blog.csdn.net/rekcah_ph/archive/2005/08/30/467859.aspx

分享到:
评论

相关推荐

    好东西,java开发文档

    总结来说,这个压缩包中的资源覆盖了Java Web开发的多个重要方面,包括流行的Struts 2框架、必备的开发工具Eclipse,以及全面的Java编程理论。对于想要在Java领域深入发展的开发者而言,这些都是不可多得的学习资料...

    我对JAVA学习和JAVA程序员找工作的看法

    标题中的“我对JAVA学习和JAVA程序员找工作的看法”表明了本文将围绕Java编程语言的学习路径和求职策略展开。描述中的“java程序员应该看的东西”则暗示了作者将分享他认为对于Java程序员重要的技能和知识...

    java知识总结

    它是运行Java应用程序所需的所有东西的集合。 - **JDK**(Java Development Kit,Java开发工具包):包含JRE以及额外的开发工具,如编译器`javac`、打包工具`jar`等。如果你打算开发Java应用程序,那么安装JDK是...

    java在线查看PDF(csdn)————程序.pdf

    //这行代码是设置 ContentType,把他设置成 pdf,不然浏览器访问就会出一大堆看不懂的东西 response.setContentType("application/pdf;charset=UTF-8"); response.getOutputStream().write(data); input.close()...

    Java基础知识点复习资料

    Java是当前最流行的编程语言之一,本文将对Java基础知识点进行总结和复习,包括类路径的设置、-path的设置、Java数据类型、基本运算符号、控制语句、数组、方法、重载、类的定义、对象的产生和使用、匿名对象、封装...

    java与sql2000链接 测试用例 lib包 sqlsp4包

    课程设计的时候遇到链接数据库 的问题,这是我个人总结的,还有附件一并给大家了,超级好的东西,不会用的同学可以给我留言 1.升级到sql2000到sp4 2.下载libsql2000 3.exlipec -&gt;窗口-&gt;首选项-&gt;java-&gt;构建路径-&gt;...

    个人总结的一些JSP基础

    物理路径" docBase="D:\\虚拟路径(文件在硬盘中的路径,注意分隔符用\\)" reloadable="true"&gt; ``` ### JSP语法基础 1. **脚本元素**: - `! %&gt;`:定义JSP页面的Java类成员,如变量、方法等,这些内容在JSP被翻译...

    百度地图API数据库经纬度(GPS数据)在地图中显示为路径

    总结起来,将数据库中的GPS经纬度数据在百度地图上以路径形式展示,涉及数据处理、地图API的使用以及Web开发技巧。通过以上步骤,你可以创建一个直观的可视化工具,帮助分析和理解地理轨迹数据。记得在实际操作中...

    java版农夫过河问题,dfs搜索,图搜索

    农夫每次只能带一样东西过河,且农夫不在时,如果狼和羊在一起,狼会吃掉羊;如果羊和白菜在一起,羊会吃掉白菜。问题是如何让农夫、狼、羊和白菜安全地过河? #### 二、问题模型化 在这个Java实现中,问题被建模...

    jxl操作EXCEL的好东西

    总结来说,jxl是一个强大的Java库,它简化了与Excel文件交互的过程,提供了丰富的功能,并且易于理解和使用。对于需要在Java应用程序中处理Excel数据的开发者而言,jxl是一个值得信赖的工具。通过学习和使用jxl,...

    手动配置环境

    - 示例中的`CLASSPATH`包含了`%JAVA_HOME%\lib\dt.jar`和`%JAVA_HOME%\lib\tools.jar`这两个路径,这表明这两个JAR文件被加入到了类路径中。 - 类似地,在环境变量设置中添加名为`CLASSPATH`的变量,并将其值设置...

    Mozilla Rhino 介绍

    `ScriptEngineManager`会在当前线程上下文的类加载器路径(Classpath)中的`META-INF/services/javax.script.ScriptEngineFactory`文件中查找可用的脚本引擎。它提供了三种方式来检索脚本引擎: 1. `...

    java 面试100问

    根据给定文件中的标题“java面试100问”及描述“java面试100问,针对人力资源可能提出的问题进行总结”,以下是对该文件部分所提及的知识点的详细解析: ### 1. 自我介绍与个人特点 在面试时,自我介绍是展现个人...

    thread 讲解 很经典的东西 POSIX的标准的

    总结,"thread 讲解 很经典的东西 POSIX的标准的"涵盖了线程编程的核心概念,特别是通过POSIX标准实现的多线程模型。理解并熟练掌握这些知识点对于开发高效、可移植的多线程应用至关重要。通过阅读提供的源代码,...

    struts2 好东西

    总结起来,Struts2框架以其优秀的MVC实现、拦截器机制、插件系统以及全面的配置选项,为Java web开发带来了便利和高效。尽管在近年来Spring Boot等新兴框架的冲击下,Struts2的热度有所下降,但它依然是许多企业级...

    GWT入门教程的好东西啊

    - **创建项目**:在IDE中创建新的GWT项目,并配置好相关的SDK路径。 - **编写Java代码**:根据需求编写Java代码,利用GWT提供的API来构建UI界面和处理逻辑。 - **运行项目**:在浏览器中预览项目,测试其功能是否...

    20道顶尖的Spring Boot面试题!.pdf

    然而,在面试中,很多开发者对 Spring Boot 的理解仅停留在简单的使用阶段,很多东西都不清楚。本文总结了 20 道顶尖的 Spring Boot 面试题,旨在帮助开发者更好地理解 Spring Boot。 1. 什么是 Spring Boot? ...

Global site tag (gtag.js) - Google Analytics