在编写jsp页面的时候经常会遇到调用静态资源问题,每当调用静态资源我们都需要填写相应的路径,首先我们来了解一下相对路径和绝对路径的概念:
相对路径:相对于当前页面的路径
下面给出案例
资源文件的目录如下:
测试页面的代码如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>创建超链接解决路径问题</title>
</head>
<body>
<a href="a/login.jsp">aaaaa</a>
</body>
</html>
跳转页面的代码如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>login</title>
</head>
<body>
<a href="../test.jsp">bbbb</a>
</body>
</html>
解释:跳转页面与测试页面不在同一层目录下,跳转页面在a文件夹下,而a文件夹与测试页面在同一层,所以当测试页面到跳转页面,路径写为a/login.jsp,而当测试页面要跳转到测试页面,需要返回上一层目录,需要用到…/来返回上一层目录
缺点:
1、资源的位置不可以随便更改
2、需要使用…/的方式进行文件夹的跳出,如果目录结果比较深,可以操作起来比较麻烦
绝对路径: 在请求路径的前面加/,表示当前服务器的根路径,使用的时候要添加/虚拟项目名称/资源目录
查看当前服务器的根路径
测试页面的代码如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>创建超链接解决路径问题</title>
</head>
<body>
<a href="/test/a/login.jsp">aaaaa</a>
</body>
</html>
跳转页面的代码如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>login</title>
</head>
<body>
<a href="/test/test.jsp">bbbb</a>
</body>
</html>
解释:不是通过当前页面进行跳转,所以不用考虑得十分复杂,直接/加服务器的根目录加上jsp页面的路径就可以了
改进版:
添加如下代码:
<%
String path = request.getContextPath();
System.out.println(path);
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
System.out.println(basePath);
%>
<base href="<%=basePath%>">
添加如下代码后,以后调用资源路径的时候就不需要添加服务器的根路径了,添加资源路径的时候,从当前项目的web目录下添加即可
样例:
测试页面:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
String path = request.getContextPath();
System.out.println(path);
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
System.out.println(basePath);
%>
<html>
<head>
<base href="<%=basePath%>">
<title>创建超链接解决路径问题</title>
</head>
<body>
<a href="a/login.jsp">aaaaa</a>
</body>
</html>
跳转页面:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
String path = request.getContextPath();
System.out.println(path);
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
System.out.println(basePath);
%>
<html>
<head>
<base href="<%=basePath%>">
<title>login</title>
</head>
<body>
<a href="test.jsp">bbbb</a>
</body>
</html>