1.先来聊聊前端的html
对于前端中的路径我们来举个例子
1.1造一个servlet
@WebServlet("/Servlet001")
public class Servlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String s = req.getRequestURL().toString();
System.out.println(s);
}
}
1.2造一个html并且写一个标签用于访问servlet
<a href="/Servlet001">点我访问Servlet001</a>
1.3我们先规定虚拟路径是 /
访问并点击
小码这不没有问题吗?
1.4让我们来给一个虚拟路径
1.5再次访问
404我们查看一下URL便可以知道,我们刚刚配的虚拟路径呢??我们手动在地址栏中加上
这样就可以访问成功了,那我们就知道了,因为a标签的hred里面就只写了/servlet001,在一个html页面里面,案例展现的是ip和端口没有变,但是虚拟路径丢了。
解决方法有两种,
1.手动改href,但是当用户更改虚拟路径后,我们又要改
2.我们可以使用相对路径,跳跳跳,跳到web目录,因为web目录相当与根路径(ip端口虚拟路径),所以我们从这里开始,访问动态资源Servlet
对于书写相对路径我们需要明确几点
- 你在哪里
- 你的目标是哪
我在这里
我要去这里
所以我站在我的位置,向上走一级就可以到达Val下面和html目录同级的目录
我们发现就这样,我们完成了对Servlet的访问
2.如果上面已经明白的差不多了我们接着走
我们这次这样玩,刚刚不是已经通过网页上的相对路径找到了Servlet的URL路径吗,我们在通过重定向或者请求转发来跳跳跳到其他的静态页面,这里我们仍然继续讨论相对路径。
2.1造一个名字很鸡贼的Servlet
@WebServlet("/aaa/bbb/Servlet002")
public class Servlet002 extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
}
2.2然后我们在web下面直接造一个HTML
需要注意的是经Servlet名字很鸡贼,我们应该知道,在浏览器地址栏中,一个斜杠你可以当作一级目录来看
然后我们在Servlet中开始跳
2.3还是抓住两点内容
- 你在哪里
- 你要去哪里
我在
http://localhost:8080/Val/aaa/bbb/Servlet002
我要去
http://localhost:8080/Val/oo.html
所以我们首先要向上跳一级到bbb,再跳一级到aaa即可,因为此时aaa和oo.html同级
书写相对路径到重定向函数中
resp.sendRedirect("../../html/test1.html");
测试
我们访问Servlet然后直接重定向到对应位置了
总结
我们使用相对路径主要是为了解决当虚拟路径发生变化时候,资源路径问题。
但是有一点需要说:在jsp中我们建议使用绝对路径
在servlet中我们也建议使用绝对路径,因为我们在上面发现,当虚拟路径由 / 变为Val的时候,没有在资源路径中,如果这样的情况发生在jsp和servlet中,我们可以采用 获取虚拟路径的方法拼一个绝对路径
req.getContextPath();