参考了这篇博客https://blog.csdn.net/u012124564/article/details/47355409
再加看的视频得出一些经验。
先说说关于客户端路径和服务器端路径问题
客户端路径:就是跳转过后能显示目标资源的url的就是客户端路径
服务器端路径:跳转后不显示目标资源的url就是服务器端路径。
举个例子来说明一下
客户端路径像是你给10086打电话咨询套餐问题,10086人工服务小姐姐表示她不管理
这方面,给你个号码让你再给这个号码打一下。这样你就按着这个号码打过去,这就是客户
端路径,地址被改变了。
服务器端路径就像是你给10086打电话询问套餐问题,她虽然不懂,当时让你稍等一下,
她帮你问问怎么解决,解决后把答案给你。但是你的地址没有发生改变,你还是打的10086
这个号码。
如果是客户端路径:
1、链接跳转:<a href=””></a>
2、表单提交
3、Response.sendRedirect(“3.jsp”);
4、<mata http-equiv=”refresh”, content=”3;2.jsp”/>
5、response.setHeader(“refresh”,” 3;2.jsp”);
6、客户端跳转“/”代表服务器跟路径webapps
以上这些最好使用绝对路径:
举个例子
在项目下 有path.jsp
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <!DOCTYPE html> 4 <html> 5 <head> 6 <meta charset="UTF-8"> 7 <title>Insert title here</title> 8 <link rel="stylesheet" href="style/style.css" type="text/css"> 9 </head> 10 <body> 11 <h1>halo咯</h1> 12 </body> 13 </html>
这其中的href链接是相对路径,style.css是将h1设置为红色
1 @charset "UTF-8"; 2 h1{ 3 color:red; 4 }
运行结果为
显示为红色,很正常
如果通过list.jsp访问path.jsp
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <!DOCTYPE html> 4 <html> 5 <head> 6 <meta charset="UTF-8"> 7 <title>Insert title here</title> 8 </head> 9 <body> 10 <% 11 12 request.getRequestDispatcher("../path.jsp").forward(request, response); 13 14 %> 15 </body> 16 </html>
结果为
结果显示为黑色,并没有变为红色。
因为使用request.getRequestDispatcher从list.jsp跳入path.jsp相当于在list.jsp下寻找style.css
当然找不到。 所以就需要使用绝对路径
像这样
<link rel="stylesheet" href="<%=request.getContextPath() %>/style/style.css" type="text/css">
就可以了,因为request.getContextPath()是从当前目录寻找,所以就能找到
而服务器端路径可以使用绝对路径。
1、<jsp:forward page=””/>
2、pageContext.forward();
3、 request.getRequestDispatcher("1.jsp").forward(request,response);