`

总结的有关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.zip

    本人论文是AGV路径规划研究,学习总结了一些有关路径规划方面的东西,希望对你们有所帮助,大家一起学习!

    第一章JAVA面向对象的程序设计.doc

    5:JAVA的包、目录及路径; 6:java的applet; 7:JAVA的类库(java.lang.*; java.utli.*) 8: JAVA深入(JDBC数据库编程,java.serverlet.* java.http.*等基于网络的编程JSP) 五:主要参考书: 1:深入浅出java语言...

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

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

    jsp_servlet路径问题

    这个是我和几个朋友学了Java的总结,里面很多东西 很好 很强大!

    JCraete2005

    学JAVA时间也不短了,可总没有一点自己原创的东西,今天就以写IDE开发工具的使用技巧作为我原创的开始吧,希望大家能喜欢这篇文章,也希望鄙文能对广大初学JAVA的朋友有一点帮助!在使用JCRETOR过程中,自己摸索出了...

    Maven安装本地仓库报错总结

    基础配置环境很简单,就不多说了,只要cmd中mvn -v有东西就行了。 有几个很重要的点: 1.Java版本和Maven兼容问题,我置前一直用的都是Java13,maven装了3.6.3,一直不兼容。 2.本地仓库路径问题,在setting.xml配置...

    java单用户商城源码-Mobile-commerce-:学习SSM框架写的移动商城项目,详情可看ReadMe

    写这篇博文的目的也是为了总结一下在这次项目中学到了什么东西,除了上面这些知识点大纲,还有很多实用的小技巧: 项目可以分成后台模块、前台模块(没必要写在一起),如果前台模块崩了,不会影响到后台模块。有必要...

    NLPIR:使用NLPIR分析文本

    NLPIR_JAVA 使用中科院NLPIR系统实现类似舆情分析的基础工作,包括...#测试文件在‘test1’文件夹中 【具体路径: NLPIR/SentimentAnalysis/src/test1/Test.java】 本项目仓库所含文件为所有源代码以及运行所需的东西,

    springmybatis

    1.Configuration.xml 是 mybatis 用来建立 sessionFactory 用的,里面主要包含了数据库连接相关东西,还有 java 类所对应的别名,比如 &lt;typeAlias alias="User" type="com.yihaomen.mybatis.model.User"/&gt; 这个别名...

    asp.net知识库

    XPath中相对路径和绝对路径 XPath 简单语法 Asp.Net(C#)利用XPath解析XML文档示例 XSL .Net框架下的XSLT转换技术简介 一个XSLT的简单例子 XSLXSLT板主题整理 xsl入门的好文章 新手学习XSL的好东西 XSL语法介绍 XSL...

    leakcanary1.6.2aar和jar

    搜到一篇文章,嗯,感觉有我要的东西 ![image.png](https://upload-images.jianshu.io/upload_images/11562793-446a980a54bf60a7.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240) 点进去一看,额,只是记录...

    Eclipse权威开发指南2.pdf

    5.3.2 修订版:任何东西都不会被丢失..... 134 5.3.3 更新:跟上小组的进度..... 134 5.3.4 提交:共享您的资源..... 134 5.3.5 版本设置:捕获资源的当前状态..... 135 5.3.6 分支和合并:支持并行开发..... 135...

    Eclipse权威开发指南3.pdf

    5.3.2 修订版:任何东西都不会被丢失..... 134 5.3.3 更新:跟上小组的进度..... 134 5.3.4 提交:共享您的资源..... 134 5.3.5 版本设置:捕获资源的当前状态..... 135 5.3.6 分支和合并:支持并行开发...

    Eclipse权威开发指南1.pdf

    5.3.2 修订版:任何东西都不会被丢失..... 134 5.3.3 更新:跟上小组的进度..... 134 5.3.4 提交:共享您的资源..... 134 5.3.5 版本设置:捕获资源的当前状态..... 135 5.3.6 分支和合并:支持并行开发...

    spring security 参考手册中文版

    26.2.2 Web安全表达式中的路径变量 204 26.3方法安全表达式 204 26.3.1 @Pre和@Post注释 205 访问控制使用@PreAuthorize和@PostAuthorize 205 使用@PreFilter和@PostFilter进行过滤 207 26.3.2内置表达式 207 ...

    测试培训教材

     -测试总结和报告。 一个好的测试管理工具应该能把以上几个阶段都管理起来。 测试人员每时每刻都在度量别人的工作成果,而测试人员的工作成果又由谁来度量呢?度量的标准和依据是什么呢?软件测试的度量是测试...

    网管教程 从入门到精通软件篇.txt

    Windows XP(包括 Windows 2000)的控制台命令是在系统出现一些意外情况下的一种非常有效的诊断和测试以及恢复系统功能的工具。小编的确一直都想把这方面的命令做个总结,这次辛苦老范给我们整理了这份实用的秘笈。 ...

    C#微软培训资料

    14.4 继承中关于属性的一些问题.169 14.5 小 结 .172 第四部分 深入了解 C#.174 第十五章 接 口 .174 15.1 组件编程技术 .174 15.2 接 口 定 义 .177 15.3 接口的成员 .178 15.4 接口的实现 .182 ...

Global site tag (gtag.js) - Google Analytics