`

JSP请求地址重写

阅读更多
请求地址重写好处不在赘述。现在有开源框架支持,非常方便:urlrewrite,http://tuckey.org/urlrewrite/。具体实现也非常简单,首先下载他的jar包,放到lib里,并添加library。首先在web.xml里的最上面,所有filter最上面,添加:
<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>*.aspx</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
</filter-mapping>

*.aspx就是你要拦截的请求地址结尾。
然后再WEN-INF下新建urlrewrite.xml,内容为:
<?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">

<!--

    Configuration file for UrlRewriteFilter
    http://www.tuckey.org/urlrewrite/

-->
<urlrewrite>

    <rule>
        <note>
                注释文本,映射规则说明
        </note>
        <from>^/(\w+)/(\w+)/(\w+)\.aspx$</from>
        <to type="forward">$2Action!$3.aspx</to>
    </rule>
    <outbound-rule>
        <note>
            The outbound-rule specifies that when response.encodeURL is called (if you are using JSTL c:url)
            the url /rewrite-status will be rewritten to /test/status/.

            The above rule and this outbound-rule means that end users should never see the
            url /rewrite-status only /test/status/ both in thier location bar and in hyperlinks
            in your pages.
        </note>
        <from>/rewrite-status</from>
        <to>/test/status/</to>
    </outbound-rule>


    <!--

    INSTALLATION

        in your web.xml add...

        <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>
        </filter-mapping>

     EXAMPLES

     Redirect one url
        <rule>
            <from>/some/old/page.html</from>
            <to type="redirect">/very/new/page.html</to>
        </rule>

    Redirect a directory
        <rule>
            <from>/some/olddir/(.*)</from>
            <to type="redirect">/very/newdir/$1</to>
        </rule>

    Clean a url
        <rule>
            <from>/products/([0-9]+)</from>
            <to>/products/index.jsp?product_id=$1</to>
        </rule>
    eg, /products/1234 will be passed on to /products/index.jsp?product_id=1234 without the user noticing.

    Browser detection
        <rule>
            <condition name="user-agent">Mozilla/[1-4]</condition>
            <from>/some/page.html</from>
            <to>/some/page-for-old-browsers.html</to>
        </rule>
    eg, will pass the request for /some/page.html on to /some/page-for-old-browsers.html only for older
    browsers whose user agent srtings match Mozilla/1, Mozilla/2, Mozilla/3 or Mozilla/4.

    Centralised browser detection
        <rule>
            <condition name="user-agent">Mozilla/[1-4]</condition>
            <set type="request" name="browser">moz</set>
        </rule>
    eg, all requests will be checked against the condition and if matched
    request.setAttribute("browser", "moz") will be called.

    -->

</urlrewrite>

之后改web-inf里struts的拦截器,一定类似底下的:
 <!-- STRUTS2配置 -->
    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>*.aspx</url-pattern>
         <dispatcher>REQUEST</dispatcher>
         <dispatcher>FORWARD</dispatcher>
         <dispatcher>INCLUDE</dispatcher>
    </filter-mapping>

*.aspx可以换成你映射后的真实路径的结尾,struts配置文件中也要有相应的配置:
<constant name="struts.action.extension" value="aspx"></constant>

最关心的应该是映射规则,那里from节点是请求过来的地址,to节点是映射的真实地址,type是表示转发还是重定向,转发,struts拦截后可以获取参数,重定向则获取不到。2个节点可以是真实的地址,也可以用正则表达式匹配,最好是正则表达式,要不然写死人。
分享到:
评论

相关推荐

    jsp的一个url重写

    在探讨“jsp的一个url重写”这一主题时,我们深入解析了达内郑州中心老师分享的关于URL重写的实现方式,这不仅展示了JSP技术在动态网页开发中的灵活性,也揭示了URL重写在提高用户体验、优化SEO以及简化URL结构方面...

    JSP项目的URL重写

    **JSP项目的URL重写**是一种优化Web应用的技术,它允许我们将复杂的动态URL转换为更加友好、可读性更强的静态URL。这不仅有助于提升用户体验,也有利于搜索引擎优化(SEO)。在本项目中,我们使用了`...

    URL地址重写项目

    伪静态URL重写是通过微软公司封装好了的一个URL重写组件(UrlReswriter.jar)来实现的,导入JAR包,在WEB服务中加载伪静态地址拦截器,客户端以静态地址向服务器发起请求,服务器端的拦截器拦截客户端请求,查找XML...

    jsp 动态转静态 URL重写

    本篇文章将详细探讨“jsp动态转静态URL重写”的概念、重要性以及实现方法。 一、动态URL与静态URL的区别 1. 动态URL:动态URL通常包含“?”、“=”、"&"等特殊字符,用于传递参数给服务器执行相应的动态脚本,例如...

    jsp的URL重写(内附说明)

    - **使用Filter:** 创建一个Filter拦截所有请求,解析重写后的URL,然后转发到对应的Servlet或JSP。 3. **URL重写的实现步骤:** - **定义规则:** 设计URL重写规则,如将`/article/123`映射到实际的动态URL如`/...

    jsp+ajax发送GET请求的方法

    在Servlet类中,我们重写了doGet方法,用以处理GET请求。在这个方法中,我们通过`HttpServletRequest`对象获取GET请求中传递的参数值,比如用户名。根据用户名的值,我们进行简单验证,并将验证结果返回给前端。在这...

    jsp get提交 如何隐藏地址栏中的问号.zip

    当我们使用GET方法提交数据时,请求参数会显示在URL地址栏中,形如`/a.jsp?id=x`,这种形式在某些情况下可能不希望被用户看到,例如处理敏感信息或美化URL。 标题"jsp get提交 如何隐藏地址栏中的问号"关注的问题是...

    jsp和servlet请求与响应

    ### JSP和Servlet请求与响应详解 #### 一、JSP内置对象概述 JSP(Java Server Pages)是一种用于创建动态网页的技术。它基于Java Servlet规范,并提供了许多内置对象,以便开发者可以更方便地处理HTTP请求和响应。...

    jsp页面中获取servlet请求中的参数的办法详解

    在Java Web应用程序中,Servlet和JSP是两个关键组件,它们协同工作来处理客户端的请求并展示响应。本文将深入探讨如何在JSP页面中获取Servlet请求中的参数,并将其传递到另一个JSP页面。 首先,我们需要配置`web....

    url重写和禁止某个用户访问(jsp)

    在JSP中,实现URL重写可以借助如Apache的mod_rewrite模块或者使用Java的Filter接口。Filter可以在请求被实际处理之前拦截并修改它。例如,我们可以创建一个Filter,将请求中的参数转换为路径的一部分,然后再将请求...

    jsp URLRewirte地址静态化

    以下是一个简单的配置示例,将动态的JSP请求重写为静态形式: ```xml ^/article/(\d+)$ &lt;to type="forward"&gt;/article.jsp?id=$1 ``` 这个配置会将`/article/123`这样的请求转发到`/article.jsp?id=123`,...

    urlrewrite重写URL伪静态请求路径.

    `urlrewritefilter`遵循特定的配置文件(通常命名为`urlrewrite.xml`),该文件包含了重写规则,例如将动态请求映射到实际的Servlet或者JSP页面。 在描述中提到的博客链接,可能详细介绍了如何使用`urlrewrite`进行...

    java中的url重写

    param=111 这种请求重写为 /param/111。 在使用 UrlRewrite Filter 时,需要注意以下几点: 1.UrlRewrite Filter 需要在 web.xml 中声明,并指定其类名为 org.tuckey.web.filters.urlrewrite.UrlRewriteFilter。 2...

    Springboot请求跳转到jsp的Demo

    在Spring Boot的配置类中,我们需要创建一个`WebMvcConfigurer`的实现类,并重写`addViewControllers`方法来处理请求转发,同时设置`viewResolver`为JSP视图解析器。例如: ```java import org.springframework....

    jsp web 实现伪静态源码

    " 这意味着通过某种方式,如使用Apache的 mod_rewrite 模块或者Tomcat的Context配置,或者在JSP应用中使用Filter进行URL重写,将请求参数隐藏在URL路径段中,使得URL更加美观且不易被直接解析。 "标签"中的"jsp 伪...

    urlrewrite地址重写实例配置说明

    **URLRewrite地址重写**是Web开发中一个重要的技术,它主要用于优化和管理网站的URL,使得URL更友好、更具可读性,同时也能够实现动态URL到静态URL的转换,提升SEO效果。URLRewrite通常与Apache的mod_rewrite或者在...

    jsp自定义标签实例

    此示例中,我们创建了一个简单的标签类`HelloWorldTag`,它继承自`SimpleTagSupport`类,并重写了`doTag`方法来实现标签的具体功能。 #### 五、总结 通过上述步骤,我们不仅了解了如何创建JSP自定义标签,还学习了...

    JSP使用URLRewirte实现url地址伪静态化

    在JSP中,你可以通过Servlet或者控制器来处理这些请求。例如,一个简单的Servlet可以是这样的: ```java import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; ...

    动态Jsp页面转换成静态Html页面

    1. 创建Servlet:编写一个Servlet,配置在web.xml中,设定URL映射规则,使得特定的JSP请求会被这个Servlet处理。 2. 捕获请求:在Servlet的doGet或doPost方法中,获取请求的URL和参数。 3. 解析JSP:使用JSP的`...

    Java WEB实现URL重写

    总结起来,Java Web实现URL重写是通过拦截请求、修改请求URI、利用框架特性或者使用第三方库等方式,将复杂的请求URL转换为更加简洁、易读的形式。这不仅提高了用户体验,也有助于提升网站的SEO效果。在实际项目中,...

Global site tag (gtag.js) - Google Analytics