1. web项目中的路径问题
路径WebContent/path/ 下面
俩个页面:
pathA.html
A页面中有超链接,链接到B页面
<a href="pathB.html">pathB.html</a>
pathB.html
一个servlet的映射路径:
/PathServletTest
这个servlet里面服务器内部直接跳转到A页面
注意: 相对路径,指的是相对于当前路径,当前路径指的是当前地址栏里面的路径.
正常情况:
直接访问A页面:
…web_test/path/pathA.html
点击超链接:href=“pathB.html”
…web_test/path/pathB.html
404的情况:
先访问servlet,再跳转到A页面:
…web_test/PathServletTest
这时候页面显示的是A页面,因为servlet跳转了.
点击超链接:href=“pathB.html”
…web_test/pathB.html
因为要访问到pathB.html需要这样的路径:...web_test_servlet/path/pathB.html
所以上面的这种情况就报错了 404
2. 路径中最左边的/
例如 :一个servlet的映射路径
/servlet/test/myfristservet
这里的第一个/就是我们要讨论的.
路径中其他/都是表示路径的分割。
注意: 如果路径最左没有/,那么路径就是要按照当前路径算,如果最左边有/,那么这个路就要按照这个/所代表的含义来算。
这个/一般会有俩种含义:
http://ip:port/
1.代表地址栏中端口号后的那个/
例如:在这种情况下
/test.html
相当于:
http://ip:port/test.html
http://ip:port/项目名字/
2.代表地址栏中项目名字后的那个/
例如:在这种情况下
/test.html
相当于:
http://ip:port/项目名字/test.html
注意:这里指的都是路径最左面的/
特点: 和客户端相关的路径中的/
http://ip:port/
a. html页面中的/代表地址栏中端口号后的那个/
b. 客户端重定向中的/代表地址栏中端口号后的那个/
特点:和服务器端相关的路径中的/
http://ip:port/项目名字/
c. web.xml文件中的/代表地址栏中项目名字后的那个/
d. 服务器内部跳转中的/代表地址栏中项目名字后的那个/
package com.briup.web.Servelt;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class PathServlet
*/
@WebServlet("/Ps")
public class PathServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
//内部跳转前加斜杠不加斜杠都行
//重定向加斜杠会拼接到端口后面
//response.sendRedirect("/pathA.html");
request.getRequestDispatcher("path/pathA.html").forward(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>PathA</title>
</head>
<body>
<a href="pathB.html">点击</a>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>PathB</title>
</head>
<body>
PathB
</body>
</html>
访问的地址栏路径
http://127.0.0.1:8888/jd1812_web/path/pathA.html
http://127.0.0.1:8888/jd1812_web/Pr
http://127.0.0.1:8888/jd1812_web/pathB.html(地址错误)
方法一:(更改后台代码)
Servlet中更该访问注解:"path/Ps"
方法二:(更该前台代码)
1."path/pathB.html"
2.绝对路径:"jd1812_web/path/pathB.html"
3.全访问路径:"http://127.0.0.1:8888/jd1812_web/path/pathB.html"
注意:重定向和from表单、超链接中的相对地址前加斜杠都表示连接到端口号后面。