一、为什么需要URL重写?
例如:在京东商城,查询某个商品明细
- 原访问路径:http://item.jd.com?id=2019062801
- 重写后的路径:http://item.jd.com/2019062801.html
二、URL重写的优点:
- 缩短URL,隐藏实际路径提高安全性
- 易于用户记忆和键入
- 易于被搜索引擎收录
三、URL重写的不足:
- 大多数的URL重写技术,使用的是过滤器原理来实现的,这就意味着我们在请求的时候,需要多一道访问,多多少少对我们的访问速度会有所影响。
四、UrlRewriteFilter技术:
UrlRewriteFilter是URL重写的一种技术实现方式,官方路径为:http://tuckey.org/urlrewrite/
五、UrlRewriteFilter技术的具体实现方式:
(1)、通过MAVEN导入所需的jar包:
<dependency>
<groupId>org.tuckey</groupId>
<artifactId>urlrewritefilter</artifactId>
<version>4.0.4</version>
</dependency>
也可以通过官网http://tuckey.org/urlrewrite/下载jar包,并导入WEB-INF/lib目录下
(2)、在WEB-INF/web.xml文件种增加UrlRewriteFilter配置:
<filter>
<filter-name>UrlRewriteFilter</filter-name>
<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
<!-- 自定义配置文件的路径,是相对context的路径,(默认位置 /WEB-INF/urlrewrite.xml) -->
<init-param>
<param-name>confPath</param-name>
<param-value>/WEB-INF/urlrewrite.xml</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>UrlRewriteFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
配置文件的路径一般默认为:/WEB-INF/urlrewrite.xml,也可以通过如下方式重写URL配置文件路径:
package com.elsteel.cloud.wms.selfservice.controllers;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.Resource;
import org.tuckey.web.filters.urlrewrite.Conf;
import org.tuckey.web.filters.urlrewrite.UrlRewriteFilter;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import java.io.IOException;
@Configuration
public class URLRewriteFilterController extends UrlRewriteFilter{
//配置具体的路径
private static final String CONFIG_LOCATION = "classpath:/urlrewrite.xml";
@Value(CONFIG_LOCATION)
private Resource resource;
protected void loadUrlRewriter(FilterConfig filterConfig) throws ServletException {
try {
//Create a UrlRewrite Conf object with the injected resource
Conf conf = new Conf(filterConfig.getServletContext(), resource.getInputStream(), resource.getFilename(), "");
checkConf(conf);
} catch (IOException ex) {
throw new ServletException("Unable to load URL rewrite configuration file from " + CONFIG_LOCATION, ex);
}
}
}
(3)、新建文件:urlrewrite.xml,定义URL重写规则
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE urlrewrite
PUBLIC "-//tuckey.org//DTD UrlRewrite 4.0//EN"
"http://www.tuckey.org/res/dtds/urlrewrite4.0.dtd">
<urlrewrite>
<rule match-type="regex">
<note>
入库单详情
</note>
<from>^/stockIn/viewStockIn/([0-9]+)$</from>
<to type="forward">/stockIn/viewStockIn?stockInId=$1</to>
</rule>
</urlrewrite>
URL重写规则常用标签:
- rule:配置具体的规则
- match-type:
- regex:通过正则表达式匹配路径
- wildcard:通过通配符匹配路径
- note:此处可写文字说明
- from:前端请求的路径
- to:后台具体的控制器执行路径
- type:跳转方式(redirect、forward)
配置完成,启动项目,运行程序:
浏览器输入:http://localhost:9881/stockIn/viewStockIn/166
实际执行的是:http://localhost:9881/stockIn/viewStockIn?stockInId=166
至此,我们的URL重写技术已得到实现。如有问题,欢迎评论、留言交流……