urlrewrite 地址重写

最近做地址隐藏,这个虽然办不到,但是也花了点心思用了下,然后看到网上这篇博文还够详细就摘录下来了,大概的配置就那些,如果不是maven工程的话在lib里面加个urlrewrite的包就行了。最重要的是后面的地址逻辑要搞清楚。我放在这里是想以后用的时候再来看看,现在还在整那个什么地址完全不变隐藏后面路径的问题,挺头疼的,这个先贴这里。有问题的话,大家提出来,我用过,可能会给你帮点小忙


pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
  http://maven.apache.org/maven-v4_0_0.xsd">
  
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.fancy</groupId>
  <artifactId>urlrewrite-maven-example</artifactId>
  <packaging>war</packaging>
  <version>1.0</version>
  <name>urlrewrite-maven-example Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <!-- urlrewrite jar -->
    <dependency>
      <groupId>org.tuckey</groupId>
      <artifactId>urlrewrite</artifactId>
      <version>2.5.2</version>
    </dependency>
  </dependencies>
  <build>
    <finalName>urlrewrite-maven-example</finalName>
  </build>
  
</project>


web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 
  <!-- 开启URLREWRITE监听 -->
  <filter>
    <filter-name>UrlRewriteFilter</filter-name>
    <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
    <init-param>
      <param-name>logLevel</param-name>
      <param-value>WARN</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>UrlRewriteFilter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
  </filter-mapping>
  
  <!-- 404错误 -->
  <error-page>
    <error-code>404</error-code>
    <location>/404.jsp</location>
  </error-page>
  
  <!-- 500错误 -->
  <error-page>
    <error-code>500</error-code>
    <location>/500.jsp</location>
  </error-page>
  
  <welcome-file-list>
    <welcome-file>welcome.jsp</welcome-file>
  </welcome-file-list>
  
</web-app>

urlrewrite.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 3.2//EN" "\\urlrewrite3.2.dtd">
  
<urlrewrite>
  
  <rule>
    <note>重写index.jsp成index.html</note>
    <note>example:/index.html</note>
    <from>/index.html</from>
    <to type="forward">/index.jsp</to>
  </rule>
  
  <rule>
    <note>将view根目录下所有jsp资源重写成/xxx.action</note>
    <note>example:/index.action</note>
    <from>/([A-Za-z0-9]+).action</from>
    <to type="forward">/view/$1.jsp</to>
  </rule>
  
  <rule>
    <note>forward(转发模式)传参</note>
    <note>example:/user/param/fancy/8080.do</note>
    <from>/user/([A-Za-z0-9]+)/([A-Za-z0-9]+)/([A-Za-z0-9]+).do</from>
    <to type="forward">/view/parameter/$1.jsp?username=$2&password=$3</to>
  </rule>
  
  <rule>
    <note>redirect(重定向模式)传参,to中写绝对地址</note>
    <note>example:/admin/param/fancy/8080.do</note>
    <from>/admin/([A-Za-z0-9]+)/([A-Za-z0-9]+)/([A-Za-z0-9]+).do</from>
    <to type="redirect">/urlrewrite-maven-example/view/parameter/$1.jsp?username=$2&password=$3</to>
  </rule>
  
</urlrewrite>
rlrewrite.xml 这个配置文件一定只能放在 WEB-INF 下,放别的地方,无论你在web.xml中怎么配置都是不行的,至少现在是不行的。

所谓重写,就一定会有规则的匹配,这里用到了正则表达式,方便起见,我只用了[A-Za-z0-9]+,简单的解释一下:

A-Z:匹配 A 到 Z 中的任意一个字符,说一句废话,同理可得,

a-z:匹配 a 到 z 中的任意一个字符

0-9:匹配 0 到 9 的任意一个字符

+:至少出现一次,即,一次或一次以上

合起来 [A-Za-z0-9]+ 的意思就是:匹配一个任意的英文字母和数字组合的字符串

<rule>:自定义匹配规则

<note>:注释,解释标签

<from>:定义具体的匹配规则

<to>:匹配成功后的目标地址

<to type="">:type的值有两个,一个是 forward (转发,参数不丢失),一个是 redirect (重定向,地址栏显示的地址就是目标真实地址)

$1:匹配中的第一个正则表达式的字符串的值,$2,$3,$4....也是如此

&amp; :是 & 的实体名,代表的就是 &,这个可以在 w3school 中找到:http://www.w3school.com.cn/tags/html_ref_entities.html

第一个rule:访问 /index.html,实际上是访问了 /index.jsp

第二个rule:访问 /xx.action , 实际上是访问了 view 目录下的 xx.jsp

第三个rule:访问 /user/xx/yy/zz.do , 实际上是访问了 view 目录下的 parameter 目录下的 xx.jsp?username=yy&password=zz

第四个rule:跟第三个其实是一样的,但是由于是重定向模式,所以地址栏就会显示真的是地址

下面是 测试的 JSP :

/welcome.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <title>Urlrewrite Simple Demo</title>
 </head>
 <body>
  <h3>/welcome.jsp</h3>
  <HR/>
  <p>
   <a href="index.html" target="_blank">/index.html</a>
  </p>
  <p>
   <a href="index.action" target="_blank">/index.action</a>
  </p>
  <p>
   <a href="user/param/fancy/8080.do" target="_blank">/user/param/fancy/8080.do</a>(forward[转发模式])
  </p>
  <p>
   <a href="admin/param/fancy/8080.do" target="_blank">/user/param/fancy/8080.do</a>(redirect[重定向模式])
  </p>
 </body>
</html>
/index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
 <head>
  <title>Urlrewrite Simple Demo</title>
 </head>
 <body>
  <h3>/index.jsp</h3>
  <h1>Hello Urlrewrite</h1>
 </body>
</html>

/view/index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
 <head>
  <title>Urlrewrite Simple Demo</title>
 </head>
 <body>
  <h3>/view/index.jsp</h3>
  <h1>Hello Urlrewrite</h1>
 </body>
</html>

/view/parameter/param.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
 <head>
  <title>Urlrewrite Simple Demo</title>
 </head>
 <body>
  <h3>/view/parameter/param.jsp</h3>
  <h1>${param}</h1>
 </body>
</html>


如果你是第一次使用 urlrewrite 可能会抛一个异常:

这个异常信息是说系统找不到 tomcat bin 下的 urlrewrite3.2.dtd 文件,解决办法很简单:

方法一:将 urlrewrite3.2.dtd 放到 urlrewrite.xml 所在的目录下,即 WEB-INFO 的目录下

方法二:将 urlrewrite3.2.dtd 放到 tomcat 的 bin 目录下,这个方法一劳永逸,所以我选的是这个

urlrewrite3.2.dtd 这个文件可以在文章的最下面下载,源码包里我没有放这个文件,没问题之后,

源码:http://files.cnblogs.com/fancyzero/urlrewrite-maven-example.zip

DTD: http://files.cnblogs.com/fancyzero/urlrewrite3.2.dtd.zip


 [ 转自:http://www.blogjava.net/fancydeepin ]



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值