URL重写—UrlRewriteFilter技术

一、为什么需要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重写技术已得到实现。如有问题,欢迎评论、留言交流……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值