请求地址重写好处不在赘述。现在有开源框架支持,非常方便: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重写”这一主题时,我们深入解析了达内郑州中心老师分享的关于URL重写的实现方式,这不仅展示了JSP技术在动态网页开发中的灵活性,也揭示了URL重写在提高用户体验、优化SEO以及简化URL结构方面...
**JSP项目的URL重写**是一种优化Web应用的技术,它允许我们将复杂的动态URL转换为更加友好、可读性更强的静态URL。这不仅有助于提升用户体验,也有利于搜索引擎优化(SEO)。在本项目中,我们使用了`...
伪静态URL重写是通过微软公司封装好了的一个URL重写组件(UrlReswriter.jar)来实现的,导入JAR包,在WEB服务中加载伪静态地址拦截器,客户端以静态地址向服务器发起请求,服务器端的拦截器拦截客户端请求,查找XML...
本篇文章将详细探讨“jsp动态转静态URL重写”的概念、重要性以及实现方法。 一、动态URL与静态URL的区别 1. 动态URL:动态URL通常包含“?”、“=”、"&"等特殊字符,用于传递参数给服务器执行相应的动态脚本,例如...
- **使用Filter:** 创建一个Filter拦截所有请求,解析重写后的URL,然后转发到对应的Servlet或JSP。 3. **URL重写的实现步骤:** - **定义规则:** 设计URL重写规则,如将`/article/123`映射到实际的动态URL如`/...
在Servlet类中,我们重写了doGet方法,用以处理GET请求。在这个方法中,我们通过`HttpServletRequest`对象获取GET请求中传递的参数值,比如用户名。根据用户名的值,我们进行简单验证,并将验证结果返回给前端。在这...
当我们使用GET方法提交数据时,请求参数会显示在URL地址栏中,形如`/a.jsp?id=x`,这种形式在某些情况下可能不希望被用户看到,例如处理敏感信息或美化URL。 标题"jsp get提交 如何隐藏地址栏中的问号"关注的问题是...
### JSP和Servlet请求与响应详解 #### 一、JSP内置对象概述 JSP(Java Server Pages)是一种用于创建动态网页的技术。它基于Java Servlet规范,并提供了许多内置对象,以便开发者可以更方便地处理HTTP请求和响应。...
在Java Web应用程序中,Servlet和JSP是两个关键组件,它们协同工作来处理客户端的请求并展示响应。本文将深入探讨如何在JSP页面中获取Servlet请求中的参数,并将其传递到另一个JSP页面。 首先,我们需要配置`web....
在JSP中,实现URL重写可以借助如Apache的mod_rewrite模块或者使用Java的Filter接口。Filter可以在请求被实际处理之前拦截并修改它。例如,我们可以创建一个Filter,将请求中的参数转换为路径的一部分,然后再将请求...
以下是一个简单的配置示例,将动态的JSP请求重写为静态形式: ```xml ^/article/(\d+)$ <to type="forward">/article.jsp?id=$1 ``` 这个配置会将`/article/123`这样的请求转发到`/article.jsp?id=123`,...
`urlrewritefilter`遵循特定的配置文件(通常命名为`urlrewrite.xml`),该文件包含了重写规则,例如将动态请求映射到实际的Servlet或者JSP页面。 在描述中提到的博客链接,可能详细介绍了如何使用`urlrewrite`进行...
param=111 这种请求重写为 /param/111。 在使用 UrlRewrite Filter 时,需要注意以下几点: 1.UrlRewrite Filter 需要在 web.xml 中声明,并指定其类名为 org.tuckey.web.filters.urlrewrite.UrlRewriteFilter。 2...
在Spring Boot的配置类中,我们需要创建一个`WebMvcConfigurer`的实现类,并重写`addViewControllers`方法来处理请求转发,同时设置`viewResolver`为JSP视图解析器。例如: ```java import org.springframework....
" 这意味着通过某种方式,如使用Apache的 mod_rewrite 模块或者Tomcat的Context配置,或者在JSP应用中使用Filter进行URL重写,将请求参数隐藏在URL路径段中,使得URL更加美观且不易被直接解析。 "标签"中的"jsp 伪...
**URLRewrite地址重写**是Web开发中一个重要的技术,它主要用于优化和管理网站的URL,使得URL更友好、更具可读性,同时也能够实现动态URL到静态URL的转换,提升SEO效果。URLRewrite通常与Apache的mod_rewrite或者在...
在JSP中,你可以通过Servlet或者控制器来处理这些请求。例如,一个简单的Servlet可以是这样的: ```java import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; ...
此示例中,我们创建了一个简单的标签类`HelloWorldTag`,它继承自`SimpleTagSupport`类,并重写了`doTag`方法来实现标签的具体功能。 #### 五、总结 通过上述步骤,我们不仅了解了如何创建JSP自定义标签,还学习了...
1. 创建Servlet:编写一个Servlet,配置在web.xml中,设定URL映射规则,使得特定的JSP请求会被这个Servlet处理。 2. 捕获请求:在Servlet的doGet或doPost方法中,获取请求的URL和参数。 3. 解析JSP:使用JSP的`...
总结起来,Java Web实现URL重写是通过拦截请求、修改请求URI、利用框架特性或者使用第三方库等方式,将复杂的请求URL转换为更加简洁、易读的形式。这不仅提高了用户体验,也有助于提升网站的SEO效果。在实际项目中,...