在JavaWeb项目中处理静态文件或动态链接拼接网站地址的最优处理方案

时间:2021-05-03 15:06:13

在开发网站时候我们会遇到下面问题?

  • - 在引用网页中引用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中稍微配置一下,就可以啦,下面看看怎么来操作。

  1. 创建一个commons.jsp文件,文件写入下面代码
 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
<% String path = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; %>
  1. 在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网页中
- 。。。