JavaWeb开发分享:urlrewriter

在Java Web开发中,有时候为了提高安全性(隐藏技术的实现,我们可以通过Url重写可以实现技术的隐藏,可以有效的避免一些参数名、ID等完全暴露在用户面前)或者提高网站的移植性和方便用户使用(用户不用关心你网站的页面的地址变更,后台方法改动的话,可以保证前台的页面地址部分不用改)会采用地址重写功能,将动态地址伪静态。这样还可以优化搜索引擎的抓取。

在Java中实现地址重写是通过过滤器常用的forward()和sendRedirect()来实现url重写。实现细节可以参考官方文档:URLRewrite。现在说说最简单的基本实践:简单的三步走。

第一歩:在web应用中导入需要的jar包,使用Maven就是在Maven配置pom.xml加入urlrewrite包依赖。

        <dependency>
            <groupId>org.tuckey</groupId>
            <artifactId>urlrewritefilter</artifactId>
        </dependency>
        <dependency>
            <groupId>ro.isdc.wro4j</groupId>
            <artifactId>wro4j-core</artifactId>
        </dependency>

第二步,使用过滤器自然要在web.xml中加入filter的配置,filter-mapping的位置要考虑好,通常应该是在比较前面的位置,只在编码和本地化之类的过滤器格式之后。

<filter>
    <filter-name>UrlRewriteFilter</filter-name>
    <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>UrlRewriteFilter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
</filter-mapping>

第三步:在WEB-INF目录下建一个urlrewrite.xml文件,通过正则表达式编写地址重写的规则。urlrewrite.xml简单来说就是配置rule和outbound-rule。当用户访问服务器时的URL会与rule结点比较。rule中form的规则默认使用的是正则表达式来匹配的,如果符合规则就会按照下面to结点中的配置对其进行跳转,其默认是forward跳转。当服务器需要给用户返回数据是url重写是通过outbound-rule来实现的,配置规则和rule大致相同。下面给个简单配置例子。

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 3.0//EN"
        "http://www.tuckey.org/res/dtds/urlrewrite3.0.dtd">

<urlrewrite default-match-type="wildcard">
    <!-- 定义struts无关规则 -->
    <rule>
        <from>/</from>
        <to type="redirect" last="true">home</to>
    </rule>
    <rule>
        <from>/j_security_check</from>
        <to>/j_security_check</to>
    </rule>
    <rule>
        <from>/images/**</from>
        <to>/images/$1</to>
    </rule>
    <rule>
        <from>/scripts/**</from>
        <to>/scripts/$1</to>
    </rule>
    <rule>
        <from>/styles/**</from>
        <to>/styles/$1</to>
    </rule>
    <rule>
        <from>/login*</from>
        <to>/login.jsp</to>
    </rule>
    <rule>
        <from>/logout*</from>
        <to>/logout.jsp</to>
    </rule>

    <!-- Struts 去除,加上actino-->
    <rule match-type="regex">
        <from>^([^?]*)/([^?/\.]+)(\?.*)?$</from>
        <to last="true">$1/$2.action$3</to>
    </rule>
    <outbound-rule match-type="regex">
        <from>^(.*)\.action(\?.*)?$</from>
        <to last="false">$1$2</to>
    </outbound-rule>
</urlrewrite>

大功告成!开发过程中有问题可以把filter的debug level打开,查看更多debug的log分析。

时间: 2024-08-08 12:19:11

JavaWeb开发分享:urlrewriter的相关文章

JavaWeb开发分享:WebJars

换了新工作之后,忙了好多,基本没什么时间上网了,写Blog也变少了,还是以前那种技术驱动的环境好,大家都在积极学新技术,分享新技术.现在技术环境少了好多,学习激情也少了好多.不说了,写写自己学习的WebJars. Java Web前端通常需要使用JS或CSS技术,例如jQuery, Backbone.js,Twitter Bootstrap等等.以前我都是将这些Web资源拷贝到Java Web项目的Webapp相应目录下,这种通过人工方式拷贝可能会产生版本误差,拷贝版本错误,漏拷等现象,前端页面

JavaWeb学习总结(一)——JavaWeb开发入门(转载)

转载自http://www.cnblogs.com/xdp-gacl/p/3729033.html感谢孤傲苍狼的分享. 一.基本概念 1.1.WEB开发的相关知识 WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. Internet上供外界访问的Web资源分为: 静态web资源(如html 页面):指web页面中供人们浏览的数据始终是不变. 动态web资源:指web页面中供人们浏览的数据是由程序产生的,不同时间点访问web页面看到的内容各不相同. 静态we

JavaWeb开发——软件国际化(文本元素国际化)

前几天围绕着JDBC编程进行了系统的学习.现在我们对Java程序数据库操作已经是轻车熟路了.也学会了使用各种框架来帮助我们简化编程. 今天是学习计划的第七天,虽然学习热情没有前几天高涨了.但是,写博客总结的习惯应该要坚持下去.废话不多说了. 今天的学习内容是JavaWeb开发--软件国际化. 软件的国际化:软件开发时,要使它能同时应对世界不同地区和国家的访问,并针对不同地区和国家的访问,提供相应的.符合来访者阅读习惯的页面或数据. 国际化又称为 i18n:internationalization

关于JavaWeb开发的一些感悟

从事JavaWeb的开发已经三年了,从最开始的啥都不会,到慢慢的能够独立做项目,从一开始的一片茫然,到现在的心中有数.对于技术.业务也有了自己的看法. JavaWeb开发所涉及到的知识点非常多,涉及到非常多的底层知识,特别是网络编程.多线程.浏览器等等.但我们可能处于一个比较幸运的时代吧,我们并不需要对这些底层知识有非常精深的了解,就可以写出令人满意的程序. 我个人习惯将JavaWeb的知识分成两大块,一块是前端,一块是后端.这也是现在流行的开发趋势(甚至已经是事实了) 所谓后端,首选就是语言,

JavaWeb学习总结(一)JavaWeb开发入门

静态网页和动态网页 静态网页:在服务器上没有经过服务器解释执行的网页. 动态网页:在服务器上经过服务器解释执行的网页. 无论是静态网页还是动态网页,客户端看到的网页都是由HTML所构成的,所以JavaWeb开发需要懂HTML. Servlet和Servlet容器 Servlet:是一些实现了特定接口的Java类的集合. Servlet容器是JSP/Servlet代码运行的地方,是管理JSP/Servlet的地方. 其实Servlet容器就是一个服务器软件,比如Tomcat. HTTP协议 浏览器

JavaWeb开发中form、ajax提交数据Model转化

JavaWeb开发中form.ajax提交数据Model转化 问题 最近学习MongoDB数据库,作为java开发的我,当然需要做个小的web程序来测试一番了.在html中我采取ajax提交方式,因为我要模拟各种类型的数据,基础数据类型.数组.对象等.然而,最终发现了个不同的地方:Form和ajax提交数据,在HttpServletRequest中尽然参数名有所不同. 数据类型 form ajax 基础数据 para=value para=value 数组 para[]={"aaa",

JavaWeb开发环境配置

JavaWeb开发环境配置(win7_64bit) 目录 1.概述 2.JavaWeb学习路线 3.JavaWeb常用开发环境搭建 4.注意事项 >>看不清的图片可在新标签打开查看大图 1.概述 说起JavaWeb,就想到另一个词:JavaEE.很多时候,这两个词是混用的,两者的概念并不能精确描述,这里,我尝试做一下区分... JavaEE:全称Java平台企业版(Java Platform Enterprise Edition),是Sun公司为企业级应用推出的标准平台.JavaEE是个大杂烩

JavaWeb学习总结(一)——JavaWeb开发入门

一.基本概念 1.1.WEB开发的相关知识 WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. Internet上供外界访问的Web资源分为: 静态web资源(如html 页面):指web页面中供人们浏览的数据始终是不变. 动态web资源:指web页面中供人们浏览的数据是由程序产生的,不同时间点访问web页面看到的内容各不相同. 静态web资源开发技术:Html 常用动态web资源开发技术:JSP/Servlet.ASP.PHP等 在Java中,动态web

JavaWeb开发---MVC案例之查询

现在Javaweb开发第一阶段学习步入实践阶段,在这儿将自己做的项目记下来,也方便积累经验. 下图是处理流程: MySQL数据库表如下所示: 1.在web项目webContent中新建test.jsp <%@ page language="java" contentType="text/html; charset=UTF-8"     pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC &q