`

<转载><感谢>Servlet路径问题

阅读更多

你的应用访问地址是"http://192.168.0.1/app/"
其中的"/app"是contextPath,可以从request.getContextPath()得到

 

概念
    绝对路径和相对路径
        "/view/login.jsp"就是绝对路径,从根目录/开始写;
        "view/login.jsp"就是相对路径,"./view/login.jsp"也是相对路径,这种路径是相对于当前文件的目录来讲的。
    绝对地址和相对地址
        "http://192.168.0.1/app/login"就是绝对地址;
        "/login"就是相对地址,"view/login.jsp"也是相对地址,这个地址是相对于浏览器地址栏中的当前地址来讲的。
 
原理
    1. 服务器解析的路径。
        Servlet forward to JSP
        JSP forward to Servlet
        JSP forward to JSP
        JSP include JSP

        可以从根目录/开始写绝对路径;也可以从本目录开始写,这样可用"."和".."来表示本目录和父目录。

 

    2. 客户端浏览器解析的路径。
        表单action路径
        redirect重定向路径
        超链接路径
        图片路径
        CSS路径
        Javascript文件路径以及里面要用到的路径

 

    绝对路径的解析,浏览器直接加在服务器地址后面来访问。例如"/login",浏览器会访问"http://192.168.0.1/login",路径里把"/app"丢失了。绝对路径前面一定要加上contextPath,否则部署环境一变,你的应用就找不到北了。

 

    相对路径的解析,浏览器以根据地址栏中的当前地址作为基准,把相对路径加上去来访问。例如当前地址栏地址是"http://192.168.0.1/view/login.jsp",那么相对路径"img/face.png"会被浏览器解析为"http://192.168.0.1/view/img/face.png"。
 
    forward到别的路径以后,浏览器地址栏的当前地址并不会变化,这种情况下,在JSP文件中使用相对路径就很容易发生错误,因为你还要关心forward前是个什么路径,如果forward了多次,或者上一个请求也是forward过来的,那么浏览器地址栏的当前地址根本就没法追踪。有的人说你可以base标签啊,回答:我的应用是WAP,没这个标签。有的人说你可以用变量追踪啊,这种办法很丑陋,很麻烦。

 

结论
    1. 不要使用相对路径,统一使用绝对路径,为啥?好找呗。
    2. 在页面中使用相对地址时,一定要加上contextPath。为啥?原来部署在服务器根目录"/",现在想部署在"/app",你要不加上contextPath会死的比较难看。
   

分享到:
评论

相关推荐

    jsp 注册<servlet>方法说明

    &lt;servlet&gt; &lt;servlet-name&gt;HelloWorldname&lt;/servlet-name&gt; &lt;!-- 此说明该&lt;servlet/&gt; 已经得到了注册名HelloWorldname, 既此servlet已经得到了注册名HelloWorldname, 它与&lt;servlet-mapping/&gt;必须注册同样的注册...

    学习servlet的实例和参考api

    类&lt;br&gt;ServletConfig ServletOutputStream&lt;br&gt;ServletContext ServletInputStream&lt;br&gt;ServletResponse GenericServlet&lt;br&gt;ServletRequest&lt;br&gt;Servlet&lt;br&gt;&lt;br&gt;javax.servlet.http&lt;br&gt;接口 类 &lt;br&gt;HttpSession Cookie...

    ssm的jar包

    &lt;groupId&gt;javax.servlet&lt;/groupId&gt; &lt;artifactId&gt;javax.servlet-api&lt;/artifactId&gt; &lt;version&gt;3.1.0&lt;/version&gt; &lt;scope&gt;provided&lt;/scope&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;javax.servlet.jsp&lt;/groupId&gt; ...

    XML考试系统

    &lt;br&gt;&lt;br&gt;类&lt;br&gt;Bean 类&lt;br&gt;Com.gton.bean.*&lt;br&gt;AdminBean 管理员&lt;br&gt;ResultBean 结果&lt;br&gt;TestBean 试题&lt;br&gt;TestsBean 试卷&lt;br&gt;UserBean 用户&lt;br&gt;Com.gton.bean.db.*&lt;br&gt;DataBean 数据库操作&lt;br&gt;...

    JSP訳文--工具--Java

    Model1和Model2&lt;br&gt;ASP+和JSP之间的抉择&lt;br&gt;JSP中的虚拟路径&lt;br&gt;读取Text文件&lt;br&gt;new:ASPer看过来&lt;br&gt;困扰JSP的一些问题:jsp和宏之间的争议&lt;br&gt;jsp的5个不足之处&lt;br&gt;JSP不能代替Servlet&lt;br&gt;Resin中的JSP范例&lt;br&gt;JSP...

    Maven整合ssm

    &lt;groupId&gt;javax.servlet&lt;/groupId&gt; &lt;artifactId&gt;javax.servlet-api&lt;/artifactId&gt; &lt;version&gt;3.1.0&lt;/version&gt; &lt;/dependency&gt; &lt;!-- mybatis依赖的jar包 --&gt; &lt;dependency&gt; &lt;groupId&gt;org.mybatis&lt;/groupId&gt; ...

    修改后的 fckedit.jar

    param&gt;&lt;br&gt; &lt;param-name&gt;FCKDeniedExtensionsImage&lt;/param-name&gt;&lt;br&gt; &lt;param-value /&gt;&lt;br&gt; &lt;/context-param&gt;&lt;br&gt;&lt;br&gt; &lt;servlet&gt;&lt;br&gt; &lt;servlet-name&gt;Connector&lt;/servlet-name&gt;&lt;br&gt; &lt;servlet-class&gt;&lt;br&gt; ...

    java课设超市订单管理系统源代码.zip

    &lt;groupId&gt;javax.servlet&lt;/groupId&gt; &lt;artifactId&gt;servlet-api&lt;/artifactId&gt; &lt;version&gt;2.5&lt;/version&gt; &lt;/dependency&gt; &lt;!--jsp--&gt; &lt;dependency&gt; &lt;groupId&gt;javax.servlet.jsp&lt;/groupId&gt; &lt;artifactId&gt;jsp-api&lt;/...

    Java 课程设计 高校公寓管理系统

    &lt;artifactId&gt;standard&lt;/artifactId&gt; &lt;version&gt;1.1.2&lt;/version&gt; &lt;artifactId&gt;jstl&lt;/artifactId&gt; &lt;version&gt;1.2&lt;/version&gt; &lt;artifactId&gt;jsp-api&lt;/artifactId&gt; ... &lt;artifactId&gt;javax.servlet-api&lt;/artifactId&gt;

    Java 登录注册案例实例

    &lt;artifactId&gt;javax.servlet-api&lt;/artifactId&gt; &lt;version&gt;3.1.0&lt;/version&gt; &lt;artifactId&gt;commons-io&lt;/artifactId&gt; &lt;version&gt;2.11.0&lt;/version&gt; &lt;artifactId&gt;mybatis&lt;/artifactId&gt; &lt;version&gt;3.5.5&lt;/version&gt; ...

    一个在线报名系统

    &lt;servlet-name&gt;registerServlet&lt;/servlet-name&gt; &lt;servlet-class&gt;servlet.registerServlet&lt;/servlet-class&gt; &lt;/servlet&gt; &lt;servlet-mapping&gt; &lt;servlet-name&gt;registerServlet&lt;/servlet-name&gt; &lt;url-pattern&gt;/...

    spring和mybatis结合的maven工程

    &lt;groupId&gt;javax.servlet&lt;/groupId&gt; &lt;artifactId&gt;javax.servlet-api&lt;/artifactId&gt; &lt;version&gt;4.0.0-b01&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;javax.servlet.jsp&lt;/groupId&gt; &lt;artifactId&gt;...

    web.xml文件中各个标签的介绍

    例如:&lt;servlet-mapping&gt;&lt;servlet-name&gt;firstServlet&lt;/servlet-name&gt;URL 模式映射到某个 servlet&lt;url-pattern&gt;/??????&lt;/url-pattern&gt;&lt;/servlet-mapping&gt; 10. 会话超时(Session Timeout) session-config 元素用于...

    servlet.jar 等

    springetc.rar&lt;br&gt;包含如下包:&lt;br&gt;saaj.jar&lt;br&gt;serializer-2.7.0.jar&lt;br&gt;servlet.jar&lt;br&gt;servlet-api.jar&lt;br&gt;slf4j-api-1.3.1.jar&lt;br&gt;slf4j-simple-1.3.1.jar&lt;br&gt;smtp.jar&lt;br&gt;soap.jar&lt;br&gt;spring.jar&lt;br&gt;spring-mock...

    Servlet与 JSP 指南,PPT教学课件part2(共3个)

    &lt;br&gt;1、servlet与JSP技术概述&lt;br&gt;2、servlet基础&lt;br&gt;3、客户请求的处理:表单数据&lt;br&gt;4、客户请求的处理:HTTP请求报头&lt;br&gt;5、服务器响应的生成:HTTP状态代码&lt;br&gt;6、服务器响应的生成: HTTP响应报头&lt;br&gt;7、cookie...

    easyExcel、poi,jar包版本冲突,jar包处理

    1、下载资源 ... &lt;groupId&gt;javax.servlet&lt;/groupId&gt; &lt;artifactId&gt;servlet-api&lt;/artifactId&gt; &lt;/exclusion&gt; &lt;/exclusions&gt; &lt;/dependency&gt; 再引用com.customize poi系列poi,poi-ooxml,poi-ooxml-schemas

    图片验证的SERVLET

    &lt;/init-param&gt;&lt;br/&gt; &lt;init-param&gt;&lt;br/&gt; &lt;param-name&gt;height&lt;/param-name&gt;&lt;br/&gt; &lt;param-value&gt;20&lt;/param-value&gt;&lt;br/&gt; &lt;/init-param&gt;&lt;br/&gt; &lt;/servlet&gt;&lt;br/&gt; &lt;br/&gt; &lt;servlet-mapping&gt;&lt;br/&gt; &lt;servlet-name&gt;checkimage&lt;/...

    Servlet与 JSP 指南,PPT教学课件part1(共3个)

    &lt;br&gt;1、servlet与JSP技术概述&lt;br&gt;2、servlet基础&lt;br&gt;3、客户请求的处理:表单数据&lt;br&gt;4、客户请求的处理:HTTP请求报头&lt;br&gt;5、服务器响应的生成:HTTP状态代码&lt;br&gt;6、服务器响应的生成: HTTP响应报头&lt;br&gt;7、cookie...

    北大Java语言程序设计(ppt课件)

    例外处理(Exception)&lt;br&gt; &lt;br&gt;第七讲 多线程 &lt;br&gt; &lt;br&gt;第八讲 图形用户界面与事件处理&lt;br&gt; &lt;br&gt;第九讲 Java Applet&lt;br&gt; &lt;br&gt;第十讲 网络通信 &lt;br&gt; &lt;br&gt;第十一讲 J2EE &lt;br&gt;JDBC&lt;br&gt;J2EE简介&lt;br&gt;Servlet&lt;br&gt;JSP&lt;br&gt;...

    使用Maven管理进行多模块开发案例

    &lt;groupId&gt;javax.servlet&lt;/groupId&gt; &lt;artifactId&gt;servlet-api&lt;/artifactId&gt; &lt;version&gt;2.5&lt;/version&gt; &lt;scope&gt;provided&lt;/scope&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;javax.servlet.jsp&lt;/groupId&gt; ...

Global site tag (gtag.js) - Google Analytics