`
dennisbing
  • 浏览: 160668 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

程序中的路径问题

阅读更多
1,Struts中的绝对路径写法


1)  采用绝对路径,但为了解决不同部署方式的差别,在所有非struts标签的路径前加${pageContext.request.contextPath},如原路径为:

”/images/title.gif”,改为

“${pageContext.request.contextPath}/images/title.gif”。

代码” ${pageContext.request.contextPath}”的作用是取出部署的应用程序名,这样不管如何部署,所用路径都是正确的。

缺点:

操作不便,其他工具无法正确解释${pageContext.request.contextPath}

2)  采用相对路径,在每个JSP文件中加入base标签,如:

<base href="http://${header['host']}${pageContext.request.contextPath}/pages/cust/relation.jsp" />

这样所有的路径都可以使用相对路径。

缺点:

对于被包含的文件依然无效。

    真正使用时需要灵活应用1)和2),写出更加健壮的代码。

2,Servlet中的路径问题

../”来表示上一级目录,“../../”表示上上级的目录

JSP和Servlet中的绝对路径和相对路径问题困扰了我好几天,经过努力之后将其部分心得和大家共享。

前提:假设你的Http地址为http://192.168.0.1/你的web应用为webapp,那么你的web应用URL为http://192.168.0.1/webapp/

web应用的目录结构:

webapp/
web-inf/
classes/
lib/

web.xml


handleservlet

/handleservlet此映射是相对于当前web应用的

user/

a.jsp
b.jsp

images/
css/
js/


所有相对路径都是由“/”开头的。如:/image/a.gif,/user/main.jsp,大家知道在html中的相对路径是这样的:

有个html文件:a.html,其中有,其中href属性表示引用的css文件的路径。

one.css:表示one.css和a.hmtl处于同一个目录
user/one.css:表示one.css处于a.html所在目录的子目录user中。

../one.css:表示one.css位于a.hmtl上一级目录下,
../../one.css:表示one.css位于a.hmtl上一级目录的上一级目录下,

./:表示和a.hmtl同一目录

我们称上述相对路径为html相对路径

1、服务器端的地址


服务器端的相对地址指的是相对于你的web应用的地址,这个地址是在服务器端解析的(不同于html和javascript中的相对地址,他们是由客户端浏览器解析的)也就是说这时候在jsp和servlet中的相对地址应该是相对于你的web应用,即相对于http://192.168.0.1/webapp/的。

其用到的地方有:
forwarder:servlet中的request.getRequestDispatcher(address);这个address是在服务器端解析的,所以,你要forwarder到a.jsp应该这么写:request.getRequestDispatcher(“/user/a.jsp”)这个/相对于当前的web应用webapp,其绝对地址就是:http://192.168.0.1/webapp/user/a.jsp。

sendRedirect:在jsp中

2、客户端的地址
所有的html中的相对地址都是相对于http://192.168.0.1/的,而不是http://192.168.0.1/webapp/的。


Html中的form表单的action属性的地址应该是相对于http://192.168.0.1/的,所以,如果提交到a.jsp为:action=”/webapp/user/a.jsp”;提交到servlet为
action=”/webapp/handleservlet”
Javascript也是在客户端解析的,所以其相对路径和form表单一样。

3、站点根目录和css路径问题

我们称类似这样的相对路径/webapp/….为相对于站点根目录的相对路径。

当在jsp中引入css时,如果其相对路径相对于当前jsp文件的,而在一个和这个jsp的路径不一样的servlet中forwarder这个jsp时,就会发现这个css样式根本没有起作用。这是因为在servlet中转发时css的路径就是相对于这个servlet的相对路径而非jsp的路径了。所以这时候不能在jsp中用这样的路径:或者类似href="one.css"和../../one.css的html相对路径是相对于引用这个css的文件的相对路径。而在servlet中转发时就是相对于这个servlet的相对路径了,因为jsp路径和servlet路径是不一样的,所以这样的引用肯定是出错的。

所以这个时候,要用站点根目录,就是相对于http://192.168.0.1/的目录,以“/”开头。因此上述错误应更正为href=”/webapp/one.css”类似的站点根目录的相对目录。这样在servlet转发后和jsp中都是相对于站点根目录的相对路径,就能正确使用所定义的css样式了。

3,我的试验

webTest的Project,然后是在src中有mvc.servlet/Controller_Servlet.java

然后在web.xml中有

  <servlet-mapping>
    <servlet-name>Controller_Servlet</servlet-name>
    <url-pattern>/servlet/Controller_Servlet</url-pattern>
  </servlet-mapping>

然后在webroot的根目录下的view_Table.jsp中的:

<form action="./servlet/Controller_Servlet" method="post">


分享到:
评论

相关推荐

    Java 解决中文路径问题

    中文字符在路径中可能会引起编码问题,导致程序无法正确读取或写入文件。这个问题主要涉及到字符编码、文件I/O操作以及系统环境的差异。下面我们将深入探讨如何解决Java中的中文路径问题。 首先,了解Java对路径...

    遗传算法解决最短路径问题matlab程序加注释

    在最短路径问题中,每个个体代表一条可能的路径,路径的长度作为适应度函数,用于评价路径的好坏。以下是遗传算法解决最短路径问题的关键步骤: 1. **初始化种群**:随机生成一组路径(个体),每条路径由起始节点...

    pyinstaller的bootloader不支持中文路径问题.zip

    问题参见:...在将该exe放在没有中文字符的路径下时,程序能够很好的解压,并能正常支持。但是,当将其放在含有中文字符的路径下时,程序无法运行,抛出异常。

    最短路径问题 大型程序

    总结来说,解决大型程序中的最短路径问题需要深入理解图论和算法,选择适当的解决方案,并根据实际需求优化计算性能。对于有多个起点的情况,可能需要采用Dijkstra算法、Floyd-Warshall算法或A*搜索算法的变体。同时...

    用贪心算法解单源最短路径问题

    3. 实验内容:使用贪心算法解决单源最短路径问题,并通过本例熟悉贪心算法在程序设计中的应用方法。 4. 实验步骤: (1)初始化顶点集合S,仅含源点。 (2)选择具有最短特殊路径长度的顶点u,将u添加到S中,同时对...

    通过已安装exe程序名获取程序路径

    在解决“通过已安装exe程序名获取程序路径”的问题时,我们可以传递一个NULL参数给`GetModuleFileName`,它会返回调用进程的可执行文件的路径。这样,如果我们知道程序的名称,比如"notepad.exe",但不知道其具体...

    C#获取指定程序的运行路径

    获取指定程序的运行路径,前段时间项目中要用到该功能,网上很多都是获取当前程序的运行路径,最后找了很久才找到类似的代码,修改了传上来共享下,帮助需要的人

    根据注册表查找程序路径

    这篇教程将详细介绍如何利用C++通过注册表查找程序路径,并提供一个现成的类和方法供直接使用。 首先,我们需要了解注册表的基本结构。在Windows中,注册表主要由五大根键组成:HKEY_CLASSES_ROOT (HKCR),HKEY_...

    获取应用程序的路径

    总结来说,获取应用程序路径在C++开发中是一个实用的功能,可以借助Windows API或第三方库如Boost来实现。根据具体需求和环境选择合适的方法,确保代码的兼容性和可靠性。在VS2008中,由于C++11标准尚未完全支持,...

    实现求解单源点最短路径问题

    【单源点最短路径问题】是指在图论中,给定一个有向图G=(V,E),其中V是顶点集合,E是边集合,每个边e上有权重c(e),我们想要找到从一个特定顶点V0出发到图中其他所有顶点的最短路径。这个问题通常出现在网络优化、...

    在Java程序中获取当前运行程序的路径

    另外,`java.lang.management`包中的`OperatingSystemMXBean`接口提供了关于操作系统的管理信息,虽然它不能直接获取程序路径,但可以帮助了解程序运行的上下文。例如: ```java ManagementFactory....

    鼠标指向窗体,显示窗体运行的程序路径

    总的来说,掌握获取和显示窗体运行程序路径的技术,不仅可以增强对Windows系统底层运作的理解,还能在实际问题解决中提供有力的支持。通过编程实现这一功能,可以提升我们的系统分析和问题诊断能力,是IT专业人员...

    delphi程序路径基本操作

    7. 路径中的环境变量 Delphi程序也可以使用环境变量,如 `%APPDATA%` 或 `%USERPROFILE%`。通过`ExpandEnvironmentStrings`函数,可以将这些环境变量展开为实际的路径。 8. 文件操作 Delphi提供了丰富的文件操作...

    WPF中Image控件Source属性的相对路径和绝对路径问题(经验总结)

    WPF 中 Image 控件 Source 属性的相对路径和绝对路径问题总结 在 WPF 中,Image 控件的 Source 属性可以指定为相对路径或绝对路径,但这两种路径有不同的使用场景和注意事项。本文将总结 WPF 中 Image 控件 Source ...

    labview 生成EXE路径问题

    这个子VI可以接收“当前VI路径”,检查路径中是否包含“exe”字符串来判断当前环境是调试还是运行EXE。如果检测到“exe”,则表明是运行在EXE环境下,需要多执行一次“拆分路径”来获取正确的路径;反之,如果未检测...

Global site tag (gtag.js) - Google Analytics