在开发网站时候我们会遇到下面问题?
- - 在引用网页中引用js和css或者动态的Servlet的时候我们是写绝对路径还是相对路径?
- - 如果写相对路径吧,上线偶尔会报404,还要手动去拼接绝对路径
- - 如果写绝对路径吧,你在本地写的时候肯定的是localhost:8080/xxx/xxx,项目上线的时候你又要把网页中的这个替换为你的上线域名,体验很糟糕
我们怎么解决这样的问题呢?
我们可以在网页中使用Request对象来获取网页中的各种地址信息。
- request.getServletPath(); 获取当前网页的地址 - request.getScheme(); 获取协议 - request.getServerName(); 获取域名 - request.getServerPort(); 获取端口号 - request.getContextPath(); 获取项目名称
下面我们来拼接成一个通用的获取项目地址的变量,让在jsp网页中随处都可以使用它啦
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
获取到的就是下面这样的地址
basePath:http://localhost:8080/WebDemo/
我们可以在jsp页面写入下面代码
<% String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath() + "/"; %>
在引用Js和css或者需要拼接路径的时候我们可以直接使用basePath这个变量,例如
<link rel="stylesheet" href="<%=basePath %>resources/assets/css/font-xxx.min.css" /> <link rel="stylesheet" href="<%=basePath %>resources/assets/css/xxx.min.css" /> <link rel="stylesheet" href="<%=basePath %>resources/assets/css/xxx.min.css" />
当然我们每一次都需要在jsp文件编写下面的代码吗?那可真的是太复杂了,我们可以直接在web.xml中稍微配置一下,就可以啦,下面看看怎么来操作。
- 创建一个commons.jsp文件,文件写入下面代码
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <% String path = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; %>
- 在web.xml进行配置,使所有的jsp网页都能自动的引用commons.jsp这个网页(ps:引入这个网页当然就能使用basePath这个变量喽~~直接就能使用啦)
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<include-prelude>/commons.jsp</include-prelude>
</jsp-property-group>
</jsp-config>
注意:<include-prelude>/commons.jsp</include-prelude>标签中的jsp文件改成你的commons.jsp文件的存放地址
不适用这种方案的情况
- 前后端分离的项目 - Html网页中 - 。。。