文章目录
- 1.资源定位
- 1.前置条件
- 上下文路径设置
- 2.上下文路径介绍
- 重点说明
- 3.资源定位方式
- 资源路径 = 上下文路径 + 资源位置
- a.html定位
- C.java定位
- 4.浏览器和服务器解析的区别
- 1.浏览器解析`/`(地址变化)
- 2.服务器解析`/`(地址不变)
- 5.带`/`与不带`/`的区别
- 1.带`/`指的是路径
- 2.不带`/`指的是资源
- 6.相对路径直接找到servlet
- 1.servlet位置
- 2.login.html位置
- 3.定位方式
- 2.浏览器默认相对路径
- 1.基本介绍
- 2.问题说明
- 3.base标签(更改浏览器默认相对路径)
- 1.基本介绍
- 2.代码演示
- 4.服务端请求转发定位资源
- 1.基本介绍
- 2.代码演示
- 1.a.html(最初界面)
- 2.C.java(中转界面 )
- 3.b.html(最终界面)
- 4.结果展示
- 3.小细节
- 转发时不带斜杠,服务器默认也是按照前面是上下文路径拼接
- 5.课后练习
- 基本环境
- 第三题
- 1.使用相对路径
- 2.使用浏览器默认相对路径
- 3.使用base标签更改浏览器默认相对路径
- 4.使用绝对路径
- 第四题
- 1.使用相对路径
- 2.使用绝对路径
- 第五题
- 1.使用相对路径
- 2.使用base标签更改浏览器默认相对路径
- 3.使用绝对路径
- 6.小结
- 1.匹配路径方法(重点)
- 1.上下文路径 + 资源路径
- 2.重定向到某个url如果含有中文,需要手动进行url编码
- 2.注意事项和细节说明
- 1.Web工程的相对路径和绝对路径
- 3.斜杠的解析
- 1.带斜杠与不带斜杠
- 2.获取真实路径和上下文路径
- 3.这个目录才是真正执行的文件
- 4.重定向的斜杠
- 5.重定向课后练习
- 1.相对路径
- 2.绝对路径(推荐)
- 3.动态获取上下文路径拼接(强烈推荐)
- 6.老韩小结
- 7.base路径优化
- jsp动态获取上下文路径
1.资源定位
1.前置条件
上下文路径设置
2.上下文路径介绍
重点说明
- 他们两个是互通的
- 意思就是假如C类想要定位
a.html
,就可以使用相对路径../d1/d2/a.html
- 这里的
../
虽然得到的是java目录下的资源,但是我说过了,他跟webapp是互通的,都称之为上下文路径
3.资源定位方式
资源路径 = 上下文路径 + 资源位置
a.html定位
(http://localhost:8080/webpath/) + ( d1/d2/a.html)
C.java定位
(http://localhost:8080/webpath/) + ( c/C) (假设web.xml里面配置的路径是/c/C)
4.浏览器和服务器解析的区别
1.浏览器解析/
(地址变化)
http://localhost:8080/ 比如:超链接,表单提交,重定向
2.服务器解析/
(地址不变)
http://localhost:8080/webpath/ 比如:请求转发,配置servlet路径,获取真实路径,获取上下文路径
5.带/
与不带/
的区别
1.带/
指的是路径
2.不带/
指的是资源
6.相对路径直接找到servlet
1.servlet位置
2.login.html位置
3.定位方式
可以看到这个servlet的地址就是上下文路径加资源,在这个表单中使用./
可以得到webapp的位置,这个其实就是上下文路径,再加上servlet的资源路径即可action="./c/C"
2.浏览器默认相对路径
1.基本介绍
2.问题说明
3.base标签(更改浏览器默认相对路径)
1.基本介绍
2.代码演示
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<!-- 这个解析的就是http://localhost:8080/webpath/ -->
<base href="/webpath/">
</head>
<body>
<form action="b.html">
<input type="submit" value="跳转">
</form>
</body>
</html>
4.服务端请求转发定位资源
1.基本介绍
- 请求转发解析的
/
是上下文路径 - 请求转发将请求和响应都转发到了那个界面,所以响应给浏览器的也是那个界面
- 开发中一般都是使用转发或重定向到那个界面
2.代码演示
1.a.html(最初界面)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<!-- 这个解析的就是http://localhost:8080/webpath/ -->
<base href="/webpath/">
</head>
<body>
<form action="c/C" method="get">
<input type="submit" value="跳转">
</form>
</body>
</html>
2.C.java(中转界面 )
package c;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* @author 孙显圣
* @version 1.0
*/
@WebServlet(urlPatterns = "/c/C") //此时解析的就是http://localhost:8080/webpath/c/C
public class C extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//请求转发到b.html
req.getRequestDispatcher("/b.html").forward(req,resp);
//这里解析的是http://localhost:8080/webpath/b.html
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
3.b.html(最终界面)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
我是b.html
</body>
</html>
4.结果展示
3.小细节
转发时不带斜杠,服务器默认也是按照前面是上下文路径拼接
5.课后练习
基本环境
第三题
1.使用相对路径
action=“./views/user/user.html”
2.使用浏览器默认相对路径
action=“views/user/user.html”
3.使用base标签更改浏览器默认相对路径
action=“views/user/user.html”
4.使用绝对路径
action=“/webpath/views/user/user.html”
第四题
1.使用相对路径
…/views/user/user.html
(这里的…/就直接是java目录下的了,也就是到了上下文路径)
2.使用绝对路径
/views/user/user.html
第五题
1.使用相对路径
href=“…/…/login.html”
2.使用base标签更改浏览器默认相对路径
href=“login.html”
3.使用绝对路径
href=“/webpath/login.html”
6.小结
1.匹配路径方法(重点)
1.上下文路径 + 资源路径
- 一共四种情况
- 相对:./ …/之类的(浏览器/服务器)
- 默认相对:浏览器有默认相对路径,服务器虽然也有但是不建议使用
- 修改默认相对:浏览器可以通过base修改默认相对路径
- 绝对:使用/开头(浏览器/服务器)
- 无论使用绝对路径还是相对路径,都要先找到上下文路径
- 上下文路径对于相对路径来说就是找到**
webapp/
或java/
**这两个都是一样的 - 上下文路径对于绝对路径来说,注意浏览器解析还是服务器解析的/是不同的
- 然后再匹配资源路径
2.重定向到某个url如果含有中文,需要手动进行url编码
2.注意事项和细节说明
1.Web工程的相对路径和绝对路径
3.斜杠的解析
1.带斜杠与不带斜杠
2.获取真实路径和上下文路径
package c;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* @author 孙显圣
* @version 1.0
*/
@WebServlet(urlPatterns = "/c/C") //此时解析的就是http://localhost:8080/webpath/c/C
public class C extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//这里获取的是http://localhost:8080/webpath/
String realPath = super.getServletContext().getRealPath("/");
String contextPath = super.getServletContext().getContextPath();
System.out.println(realPath);
System.out.println(contextPath);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
3.这个目录才是真正执行的文件
4.重定向的斜杠
5.重定向课后练习
1.相对路径
resp.sendRedirect(“…/views/user/user.html”);
2.绝对路径(推荐)
resp.sendRedirect(“/webpath/views/user/user.html”);
3.动态获取上下文路径拼接(强烈推荐)
String contextPath = super.getServletContext().getContextPath();
resp.sendRedirect(contextPath + “/views/user/user.html”);