你的应用访问地址是"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会死的比较难看。
分享到:
相关推荐
<servlet> <servlet-name>HelloWorldname</servlet-name> <!-- 此说明该<servlet/> 已经得到了注册名HelloWorldname, 既此servlet已经得到了注册名HelloWorldname, 它与<servlet-mapping/>必须注册同样的注册...
类<br>ServletConfig ServletOutputStream<br>ServletContext ServletInputStream<br>ServletResponse GenericServlet<br>ServletRequest<br>Servlet<br><br>javax.servlet.http<br>接口 类 <br>HttpSession Cookie...
<groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> ...
<br><br>类<br>Bean 类<br>Com.gton.bean.*<br>AdminBean 管理员<br>ResultBean 结果<br>TestBean 试题<br>TestsBean 试卷<br>UserBean 用户<br>Com.gton.bean.db.*<br>DataBean 数据库操作<br>...
Model1和Model2<br>ASP+和JSP之间的抉择<br>JSP中的虚拟路径<br>读取Text文件<br>new:ASPer看过来<br>困扰JSP的一些问题:jsp和宏之间的争议<br>jsp的5个不足之处<br>JSP不能代替Servlet<br>Resin中的JSP范例<br>JSP...
<groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> </dependency> <!-- mybatis依赖的jar包 --> <dependency> <groupId>org.mybatis</groupId> ...
param><br> <param-name>FCKDeniedExtensionsImage</param-name><br> <param-value /><br> </context-param><br><br> <servlet><br> <servlet-name>Connector</servlet-name><br> <servlet-class><br> ...
<groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> </dependency> <!--jsp--> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</...
<artifactId>standard</artifactId> <version>1.1.2</version> <artifactId>jstl</artifactId> <version>1.2</version> <artifactId>jsp-api</artifactId> ... <artifactId>javax.servlet-api</artifactId>
<artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <artifactId>commons-io</artifactId> <version>2.11.0</version> <artifactId>mybatis</artifactId> <version>3.5.5</version> ...
<servlet-name>registerServlet</servlet-name> <servlet-class>servlet.registerServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>registerServlet</servlet-name> <url-pattern>/...
<groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.0-b01</version> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>...
例如:<servlet-mapping><servlet-name>firstServlet</servlet-name>URL 模式映射到某个 servlet<url-pattern>/??????</url-pattern></servlet-mapping> 10. 会话超时(Session Timeout) session-config 元素用于...
springetc.rar<br>包含如下包:<br>saaj.jar<br>serializer-2.7.0.jar<br>servlet.jar<br>servlet-api.jar<br>slf4j-api-1.3.1.jar<br>slf4j-simple-1.3.1.jar<br>smtp.jar<br>soap.jar<br>spring.jar<br>spring-mock...
<br>1、servlet与JSP技术概述<br>2、servlet基础<br>3、客户请求的处理:表单数据<br>4、客户请求的处理:HTTP请求报头<br>5、服务器响应的生成:HTTP状态代码<br>6、服务器响应的生成: HTTP响应报头<br>7、cookie...
1、下载资源 ... <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> </exclusion> </exclusions> </dependency> 再引用com.customize poi系列poi,poi-ooxml,poi-ooxml-schemas
</init-param><br/> <init-param><br/> <param-name>height</param-name><br/> <param-value>20</param-value><br/> </init-param><br/> </servlet><br/> <br/> <servlet-mapping><br/> <servlet-name>checkimage</...
<br>1、servlet与JSP技术概述<br>2、servlet基础<br>3、客户请求的处理:表单数据<br>4、客户请求的处理:HTTP请求报头<br>5、服务器响应的生成:HTTP状态代码<br>6、服务器响应的生成: HTTP响应报头<br>7、cookie...
例外处理(Exception)<br> <br>第七讲 多线程 <br> <br>第八讲 图形用户界面与事件处理<br> <br>第九讲 Java Applet<br> <br>第十讲 网络通信 <br> <br>第十一讲 J2EE <br>JDBC<br>J2EE简介<br>Servlet<br>JSP<br>...
<groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> ...