以/开始表示相对于当前应用下的绝对路径。
加不加应用名?给浏览器用的 要加 :给 tomcat内部用的 不加。
1.1 表单:
1.1.1 表单地址的写法
Form action:
1. 全地址:
写法1:
http://localhost/Day11ServletRequest/servlet/RegisterServlet
action=http://192.168.3.199/Day11ServletRequest/servlet/RegisterServlet
2. 写相对路径
写法2:相对于当前的页面的相对位置去写
/jsp/xxx/login.jsp
/jps/pages/login.html
当相对位置发生变化的时候,会有问题。
写法3:以/+当前的项目名为开始,写相对于当前项目的根路径的位置
缺点:应用名被写死。
使用哪种写法比较好?写法3.
改进写法:
<form action="${pageContext.request.contextPath }/pages/login.html " method=”get”>
增加写法4: 该页面有设置basepath的情况。
相对于这个路径写
跟当前页面的路径没关系。
A href
Link
浏览器发出的请求 以/开始加应用名。
1.1.2 表单思考题
/servlet/serletA
servlet考虑如下url的写法:
上面这个如果去掉反斜杠
变成相对路径,则相当于在当前的servlet路径的基础上增加,最后变成如下:
当然是不对的。
还可以这么写
自带表示跟的 /
The path starts with a "/" character but does not end with a "/" character
1.2 转发跟包含
//以'/'开头,表示 以当前的WebRoot为起点。
//不以/开头,直接写路径 表示相对当前的路径
1.2.0.1 相对路径
1.2.0.2 以/开始的绝对路径
http://localhost/Day11_ServletReqII/servlet/ServletA
RequestDispatcher dispater= request.getRequestDispatcher("/servlet/ServletB");
//B http://localhost/Day11_ServletReqII/servlet/ServletB
Tomcat容器的web应用内部。不用写应用名。当前就在应用内部。
所以不写应用名
1.2.0.3 转发包含标签
同转发给包含的代码里路径
根目录01.jsp
<jsp:forward page="/servletB"></jsp:forward>
根目录/servletB
1.3 Refresh的url
给浏览器用的,以/开始,需要写应用名。
ServletA页面。
response.setHeader("refresh","2;url='/Day12_ServletResponse/01.html'");
response.setHeader("refresh","2;url=01.html");
http://localhost/app/ServletA
http://localhost/app/servlet/01.html
这个路径:
给浏览器看 写相对于项目的绝对路径。
也可以写相对路径。但要知道相对于谁。
//response.setHeader("refresh", "2;url='/Day12_ServletResponse/01.html'");
写完整路径也可以。
http://localhost/Day12_ServletResponse/01.html
1.4 重定向
也可以写相对路径,但是需要知道相对于谁。
1.5 Context getRealpath
Context.getRealpath(“/mm/jpg”)
已经定义到当前的WEB-ROOT下,所以 该路径写相对于WEB-ROOT的相对路径
String realPath = getServletContext().getRealPath("WEB-INF/mm.jpg");
注意:前面加斜杠也可以。
getServletContext().getRealPath("/WEB-INF/mm.jpg");
这里如果不知道,不确定打印出来即可!!!