1 前言
本文将对近期项目练习中出现的关于文件路径的问题进行分析和总结,主要涉及html页面中的href及ajax指向路径、jsp页面中href指向路径及servlet转发或重定向路径等内容,本文的分析及总结将尽量做到知其然知其所以然。
注:本文中的项目练习,是通过IDEA的MAVEN插件,部署到TOMCAT完成的。**所有html、jsp页面都在webapp文件夹下,所有src中的java文件会由maven自动编译为class文件,放在WEB-INF文件夹下。**
2 html页面标签内的路径写法
2.1 html页面之间直接跳转的路径写法
直接在标签的href中写指向的html页面文件名即可
<a href="login.html">登录</a>
2.2 html页面内通过ajax跳转到servlet的路径写法
直接在URL属性处写servlet的value值(但是最前面不要加/)即可
$.post("registerUserServlet", $(this).serialize(), function (data) {});
如果是指向servlet下的方法,写value值(但是最前面不要加/)+"/"+方法名即可
$.post("user/register", $(this).serialize(), function (data) {});
2.3 servlet内通过java代码书写的html标签的路径写法
直接在标签的href中写指向的html页面文件名即可
<a href="login.html">登录</a>
3 jsp页面标签内的路径写法
3.1 jsp页面之间直接跳转的路径写法
直接在标签的href中写指向的html页面文件名即可
<a class="btn btn-primary" href="add.jsp">添加联系人</a>
由于jsp页面中可以获取绝对路径,加上绝对路径也可以
<a class="btn btn-primary" href="${pageContext.request.contextPath}/add.jsp">添加联系人</a>
若不小心在未添加绝对路径的情况下,还在文件名前面加了个"/"符号,路径则会直接指ip+/文件下,比如上面两种情况的链接为http://localhost:8080/finalTest0/add.jsp,写错情况下或指向http://localhost:8080/add.jsp,错误写法如下
<a class="btn btn-primary" href="/add.jsp">添加联系人</a>
3.2 jsp页面内跳转到servlet的路径写法
直接在标签的href中写servlet的value值(但是最前面不要加/)即可
<a
href="FindUserByPageServlet" style="text-decoration:none;font-size:33px">查询所有用户信息
</a>
由于jsp页面中可以获取绝对路径,加上绝对路径也可以
<a
href="${pageContext.request.contextPath}/FindUserByPageServlet" style="text-decoration:none;font-size:33px">查询所有用户信息
</a>
4 servlet转发或重定向的路径写法
4.1 关于重定向后和转发后的问题
重定向后的页面中,仍然可以使用相对路径,但是在转发后的页面中,相对路径就会失效。关于重定向后和转发后的理解,可自行查看其他文章,下面小节内说明的只是重定向时和转发时的路径怎么写。
4.2servlet重定向到html页面的路径写法
需要写成绝对路径的形式,会正确指到http://localhost/travel/login.html;不在同一文件夹下,就使用getContextPath来查找路径,getContextPath获取的是webapp路径,再需要什么文件,在后面加就行了
response.sendRedirect(request.getContextPath()+"/login.html");
如果写成相对路径,会错误指到http://localhost/travel/user/login.html
response.sendRedirect("login.html");
4.3servlet转发到html页面的路径写法
因为是服务器做转发动作,所以要在文件名前面加"/"符号
request.getRequestDispatcher("/list.jsp").forward(request,response);
5 关于"/"符号的一些认识
转发是在服务端完成的事情,是对客户端的同一个request请求进行传递,浏览器并不知道(不产生新的请求)。(相当于拨打110,然后110内部给你分配到所属辖区)
重定向是浏览器来做的事情,重定向时,服务器返回一个状态是302的的response,里面包含了跳转的地址,由浏览器获得后,自动发送一个新的请求(产生新的请求)。(相当于拨打114查号台,然后根据返回的号码再次拨打)
————————————————
版权声明:本文为****博主「搁浅浅浅丶」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.****.net/zhl19920118/article/details/88654078
所以只要是在同一个文件夹下的一些跳转,路径前面都不要加"/"符号,或者说重定向和普通的超链接索引是在服务器内部的文件间跑来跑去,但如果是转发,则是站在服务器全局的角度来看待自己的这些文件,所以要在路径前面加"/"符号