我是jsp的新手,我需要将url映射到新模式,这是我在php中所做的就是从.htaccess文件中更改url模式

RewriteEngine on
RewriteRule ^([A-Z]+)$ go.php?code=$1


因此网址的结果将是www.site.com/{XXXX}

之后,我可以通过GET请求获得XXXX的值。

我如何在jsp中做同样的事情?
我通过修改web.xml文件中的模式尝试了一些情况

<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>servlet3</servlet-name>
<servlet-class>thServlet</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>servlet3</servlet-name>
<url-pattern>/s/*</url-pattern>
</servlet-mapping>


但是要获取“ *”的值,我需要解析请求的网址。

request.getRequestURI().substring(request.getRequestURI().lastIndexOf("/")


所以我的问题是如何像在php中那样直接获取请求的值

最佳答案

我一直在使用URLRewriteFilter http://tuckey.org/urlrewrite/来满足此要求。如果您使用Maven作为依赖管理,请首先添加一个Maven依赖:

<dependency>
    <groupId>org.tuckey</groupId>
    <artifactId>urlrewritefilter</artifactId>
    <version>4.0.3</version>
</dependency>


或者,将urlrewritefilter-4.0.3.jar添加到您的WEB-INF / lib文件夹中。

然后修改您的web.xml文件:

<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
然后,您可以根据需要向该文件添加规则(示例取自http://tuckey.org/urlrewrite/)。可以在here中找到更多示例。

<rule>
    <from>^/tidy/page$</from>
    <to>/old/url/scheme/page.jsp</to>
</rule>
<outbound-rule>
    <from>^/old/url/scheme/page.jsp$</from>
    <to>/tidy/page</to>
</outbound-rule>


任何对/tidy/page的传入请求都将透明地转发到/old/url/scheme/page.jsp

因此,在您的情况下,规则将如下所示:

<rule>
    <from>^([A-Z]+)$</from>
    <to>go.php?code=$1</to>
</rule>

09-25 19:51