最近公司以前的一个项目需要升级改版,其中的一个模块是使用Struts2做的不需要改动,但是需要将其从之前的项目里面剥离出来,看了看官网,发现所有的链接访问的静态地址,以为是FreeMarker实现的,仔细研究了会发现不是那么回事,原来是伪静态,程序使用了urlrewriter。其实urlrewriter的使用很简单,看看下面你就明白了。

urlrewriter简介:url rewrite将我们的动态网页地址转化为静态的地址,如html、shtml,还可以隐藏网页的真正路径,比如:有时候需要将xxx.com/news/ type1/001.jsp 转化成显示路径为xxx.com/news_type1_001.jsp。

【第一步】下载jar包

http://tuckey.org/urlrewrite/#download下载最新的jar文件,当前最新的是Beat3.2我下载的是urlrewritefilter-2.6.zip。解压得到urlrewrite-2.6.0.jar 和 urlrewrite.xml

【第二步】新建Web项目TestUrlRewrite,

在WebRoot下新建index.jsp,修改其代码如下所示:

  1. <%@ page contentType="text/html; charset=UTF-8"%>
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  3. <html>
  4. <head>
  5. <title>测试TestUrlRewrite</title>
  6. </head>
  7. <body>
  8. <%
  9. String id = (String) request.getParameter("id");
  10. out.println("<h3> the value is  : " + id +" </h3> ");
  11. %>
  12. </body>
  13. </html>

【第四步】发布程序

将程序发布到Tomcat中,然后在浏览器输入如下地址:

http://localhost:8080/TestUrlRewrite/index.jsp?username=niejingyu,页面展示效果如图1所示:

【第五步】添加urlrewrite文件

将urlrewrite-2.6.0.jar复制到WebRoot\WEB-INF\lib下。

将urlrewrite.xml复制到WebRoot\WEB-INF下,其中urlrewrite.xml代码如下所示:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 3.1//EN"
  3. "http://tuckey.org/res/dtds/urlrewrite3.1.dtd">
  4. <urlrewrite>
  5. <rule>
  6. <from>/(.*).html</from>
  7. <to>index.jsp?id=$1</to>
  8. </rule>
  9. </urlrewrite>

*.html 是一个正则表达式的串。如果你对这个不理解可以学习一下java中正则表达式的应用。

$1 也是一个正则表达式的语言匹配正则中的组捕获。

【第六步】修改web.xml文件

在web.xml 增加如下内容:

  1. <filter>
  2. <filter-name>UrlRewriteFilter</filter-name>
  3. <filter-class>
  4. org.tuckey.web.filters.urlrewrite.UrlRewriteFilter
  5. </filter-class>
  6. <init-param>
  7. <param-name>logLevel</param-name>
  8. <param-value>DEBUG</param-value>
  9. </init-param>
  10. </filter>
  11. <filter-mapping>
  12. <filter-name>UrlRewriteFilter</filter-name>
  13. <url-pattern>/*</url-pattern>
  14. </filter-mapping>

【第七步】重启tomcat

访问http://localhost:8080/TestUrlRewrite/2.html,页面效果如图所示:

在这里是匹配/(.*).html,将请求转发到index.jsp?id=$1。你还可以根据需要转到xxx.action?id=$1

转:http://xiaopihai.iteye.com/blog/384386

地址重写--Java中urlrewriter的使用的更多相关文章

  1. 如何重写Java中的equals方法

    Java中,只有8种基本类型不是对象,例如:4种整形类型(byte, short, int,long),2种浮点类型(flout, double),boolean, char不是对象,其他的所有类型, ...

  2. 重写Java中包装类的方法

    知识点一.Object类Object是所有类的父类.Object中的方法有:toString() 描述对象的信息,需要重写.System.out.println在打印对象的时候会默认调用对象的toSt ...

  3. 浅析 Java 中的继承和重写

    浅析 Java 中的继承和重写 Java 中的构造方法不能被继承. Java 中 static 修饰的方法可以被继承,但不能被子类重写. Java 中 final 修饰方法不允许被子类重写,但是可以被 ...

  4. Java中的native方法

    博客引用地址:Java中的native方法 今天花了两个小时把一份关于什么是Native Method的英文文章好好了读了一遍,以下是我依据原文的理解. 一. 什么是Native Method 简单地 ...

  5. java中equal方法总结

    场景:本周在完成一个公司业务功能时,在判断是否为代叫单时调用了equal方法: PublishOrderType.HELP_ORDER.equals(valetOrderExtraInfoDO.get ...

  6. 转:Java中子类是否可以继承父类的static变量和方法而呈现多态特性

    原文地址:Java中子类是否可以继承父类的static变量和方法而呈现多态特性 静态方法 通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法,关于static方法,声明 ...

  7. JAVA中==与equals的区别

    equals如果没有被重写的话,和==的作用是一样的,都是判断两个对象引用是否指向同一个地址.一般重写了equals()方法就表示比较它们“实际意义上相等”,比较的是内容,而不是引用地址.Java中S ...

  8. Java中会有内存泄露吗?

    一.Java内存回收机制 不论哪种语言的内存分配方式,都需要返回所分配内存的真实地址,也就是返回一个指针到内存块的首地址.Java中对象是采用new或者反射的方法创建的, 这些对象的创建都是在堆(He ...

  9. java中equals和==的区别详解

    java中的数据类型,可分为两类: 1.基本数据类型. byte,short,char,int,long,float,double,boolean这八大原始数据类型他们之间的比较,使用“==”,比较的 ...

随机推荐

  1. apache 启动不了

    netstat -ano|findstr "443" 发现443端口被占 记录下443端口对应的PID 进入任务管理器,查看进程,发现为一个叫做vmware-hostd.exe的进 ...

  2. 【转】将Vim改造为强大的IDE—Vim集成Ctags/Taglist/Cscope/Winmanager/NERDTree/OmniCppComplete(有图有真相)

    原文网址:http://blog.csdn.net/bokee/article/details/6633193 工欲善其事,必先利其器.一个强大的开发环境可以大大提高工作效率.好吧,我知道这是废话.. ...

  3. 关于Java集合的总结

    (一)List: ArrayList 以数组实现.节约空间,但数组有容量限制.超出限制时会增加50%容量,用System.arraycopy()复制到新的数组,因此最好能给出数组大小的预估值.默认第一 ...

  4. java 内存区域中的栈

    有人说栈区存放引用,这种说法并不准确. public void Method1() { int i = 4; int y = 2; class1 cls1 = new class1(); } java ...

  5. Team Queue(多队列技巧处理)

    Team Queue Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...

  6. Unity怎样在Editor下运行协程(coroutine)

    在处理Unity5新的AssetBundle的时候,我有一个需求,须要在Editor下(比方一个menuitem的处理函数中,游戏没有执行.也没有MonoBehaviour)载入AssetBundle ...

  7. oracle的启动和关闭

    一.sql*plus方式:      用sql*plus来连接到Oracle Sqlplus /nolog 是以不连接数据库的方式启动sql*plus Connect /as sysdba 是以DBA ...

  8. js_day8

  9. ASP.NET优化性能方法之一禁用调试模式(转)

    若要设置 ASP.NET 应用程序的调试模式,必须编辑应用程序的 Web.config 配置文件. 通常,ASP.NET 应用程序的 Web.config 文件与应用程序位于相同的 URL 位置上. ...

  10. Asp.net实现在线人数统计功能代码实例

    application最经典的一个方法:统计在线人数,这需要借助于我们的全局应用程序类来对登录的用户信息进行统计: 以下是代码片段:    void application_start(object ...