Web中的路径问题
前言
在开发web中路径问题算是很蛋疼的一种问题,特别是在使用绝对路径的时候,在不同的目录下进行访问一会儿可以访问一会儿访问不到,令人着实厌烦。出现这种原因还是对Web中路径的概念理解的懵懵懂懂,像路径这种小问题必须要了解web路径的概念就不容易出现错误影响开发效率。
提醒
webapp代表的是web工程名字
服务器端的相对地址
是在服务器端解析的,是相对于web应用的地址
servlet中的相对地址应该是相对于web应用,即相对于
http://localhost:8080/webapp/
重定向的路径问题
forward跳转: servlet中的request.getRequestDispatcher(address);这个address是在服务器端解析的,
所以,要forward到a.jsp应该这么写: request.getRequestDispatcher("/user/a.jsp")这个/相对于当前的web应用webapp, 其绝对地址就是:
http:// localhost:8080 /webapp/user/a.jsp
sendRedirect跳转: response.sendRedirect(address);这个address是在客户端解析的,要跳转到a.jsp,应该这么写:
response.sendRedirect("/webapp/user/a.jsp");
客户端的相对地址
所有的html中的相对地址都是相对于http:// localhost:8080 / 的,而不是http:// localhost:8080 /webapp/ 的。
Html中的form表单的action属性的地址应该是相对于http:// localhost:8080 / 的。
所以,如果提交到a.jsp为:action="/webapp/user/a.jsp";提交到servlet为action="/webapp/handleservlet
Javascript也是在客户端解析的,所以其相对路径和form表单一样。
两种相对路径
相对于根目录的路径:
/jsp/path/pathTest.jsp
在服务器端解析为绝对路径为:
http://localhost:8080/webapp/jsp/path/pathTest.jsp
在客户端解析为的绝对路径为:
http://localhost:8080/jsp/path/pathTest.jsp
相对于当前目录的路径:
jsp/path/pathTest.jsp
当前目录的路径为
http://localhost:8080/webapp/jsp/path
那么绝对路径为:
http://localhost:8080/webapp/jsp/path/jsp/path/pathTest.jsp
站点根目录和css路径问题
当在jsp中引入css时,如果其相对路径相对于当前jsp文件的,会正常找到相应的css
但是如果从一个和当前jsp的路径不一样的Servlet中forward到这个jsp时,当前的相对路径是哪个Servlet的相对路径,而不是jsp所在的路径,这时不能在jsp中用这样的路径:<link href="css.css" rel="stylesheet" type="text/css">
或者<link href="../../css.css" rel="stylesheet" type="text/css">
。
这中情况下,要用站点根目录来引用css文件,就是相对于http://ip/ 的目录,以"/"开头,即href="/webapp/css.css"
。这样在servlet转发后和jsp中都是相对于站点根目录的相对路径,就能正确使用所定义的css样式了。
也可以理解为在客户端(jsp/html文件中),引用文件时,都要用/wabapp/***开头,因为客户端的相对地址是http://localhost:8080/
Servlet中几个获取路径方法的对比
对于url: http://localhost:8080/webapp/blog/list
那么分别调用request.getContextPath( )、request.getServletPath( ) 、
request.getURI( )、request.getURL( )分别返回什么路径?
这几个方法都是在HttpServletRequest接口中定义的。
-
request.getContextPath( )
返回web应用程序的路径,上例中该方法将返回/webapp
; -
request.getServletPath( )
返回Servlet的路径。上例中该方法将返回/blog/list
; -
request.getRequestURL( )
返回请求的URL,上例中即为http://localhost:8080/webapp/blog/list
; -
request.getRequestURI( )
返回HTTP请求行中请求URI的部分。上例中该方法将返回/webapp/blog/list
上一篇: 存储领域寒冬即将来临!禁售华为将导致DRAM价格继续下跌15%
下一篇: web应用路径问题
推荐阅读
-
iOS弹幕开发中遇到的问题汇总
-
C# 中的GroupBy的动态拼接问题及GroupBy<>用法介绍
-
详解Android Libgdx中ScrollPane和Actor事件冲突问题的解决办法
-
详解 Android中Libgdx使用ShapeRenderer自定义Actor解决无法接收到Touch事件的问题
-
iOS 开发中 NavigationController经常出现的问题原因分析
-
详解Android中Glide与CircleImageView加载圆形图片的问题
-
从Myeclipse 导入到eclipse中无法识别为 web项目 问题的解决步骤
-
Android 7.0中拍照和图片裁剪适配的问题详解
-
解决idea web 配置相对路径问题
-
ASP.NET中Web API的简单实例