今天用urlrewrite对URL做重写,用的jar包版本是3.2.0,按照要求配置了urlrewrite.xml,总是没起作用呀!不知道怎么回事,帮忙看下。
urlrewerite.xml代码如下:<rule>
<note></note>
<from>/page/news/news_details_([0-9]+)</from>
<to>/news.do?method=newsinfo&nid=$1</to>
</rule>
<outbound-rule>
<from>/news.do?method=newsinfo&nid=([0-9]+)$</from>
<to>/page/news/news_details_$1</to>
</outbound-rule>
页面代码:<c:url var="news_url" value="/news.do?method=newsinfo&nid=${n.newId }" />
<a href="${news_url }" title="点击查看新闻 ${n.newTitle }">${n.newTitle }</a>
urlrewerite.xml代码如下:<rule>
<note></note>
<from>/page/news/news_details_([0-9]+)</from>
<to>/news.do?method=newsinfo&nid=$1</to>
</rule>
<outbound-rule>
<from>/news.do?method=newsinfo&nid=([0-9]+)$</from>
<to>/page/news/news_details_$1</to>
</outbound-rule>
页面代码:<c:url var="news_url" value="/news.do?method=newsinfo&nid=${n.newId }" />
<a href="${news_url }" title="点击查看新闻 ${n.newTitle }">${n.newTitle }</a>
解决方案 »
- 求助hibernateTemplate中怎么用Group By查询?
- EJB 中的一对多。多对一的例子谁有。
- Hibernate 查询问题
- 一条SQL语句的困惑???.....
- ■■国产类似tomcat的"袋鼠蛋"web服务器正式发布,免费且开源
- spring+hibernate+struts2.0中的hibernateTemplate的问题
- 关于开发WEB应用程序的2点疑问?(高手一定要进)
- Struts表单提交
- jdk1.3.1跟jdk1.4.1有什么区别?
- jsp 提交表单以什么编码格式提交,都设置utf-8了为什么提交到后来是乱码?
- 问大家一个解析字符串的问题
- hibernate中建立多对多关联,如果要建中间表那个类,是不是只能建立单向关联?
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
这两行代码是什么意思呢?
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>3</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>3</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-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>
<filter>
<filter-name>loginFilter</filter-name>
<filter-class>com.joye.filter.LoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>loginFilter</filter-name>
<url-pattern>/admin/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>com.joye.filter.CharacterSetEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
<welcome-file>page/index.jsp</welcome-file>
<welcome-file>admin/login.jsp</welcome-file>
</welcome-file-list><error-page>
<error-code>404</error-code>
<location>/notFontPage.jsp</location>
</error-page>
<!-- <error-page>
<error-code>500</error-code>
<location>/error.jsp</location>
</error-page>-->
</web-app>
<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.xml中配置的URLRewrite
再此你url没办法重写原因在于你<outbound-rule>
<from>/news.do?method=newsinfo&nid=([0-9]+)$</from>
<to>/page/news/news_details_$1</to>
</outbound-rule问题就出在/news.do?这里,“?”得给它转义,也就是/new.do\?method=.....
<c:url var="news_url" value="/news.do?method=newsinfo&nid=${n.newId }" />
<a href="${news_url }" title="点击查看新闻 ${n.newTitle }">${n.newTitle}</a>这样,是鼠标放上面连接就了还是点了之后呢?
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
这两行是放在Struts的过滤器里面,如果放在urlrewrite的过滤器会报404错误<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<!-- encoding filter-mapping-->
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- struts2 filter-mapping-->
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping> <filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>我没有用JSTL技术,在JSP是用response.encodeURL()
<a href="<%=response.encodeURL("news.do?id=1111") %>">view</a>
鼠标放上去已经是显示重写后的链接了
<rule>
<note></note>
<from>/page/news/news_details_([0-9]+)</from>
<to>/news.do?method=newsinfo&nid=$1</to>
</rule>
<outbound-rule>
<from>/news.do\?method=newsinfo&nid=([0-9]+)$</from>
<to>/page/news/news_details_$1</to>
</outbound-rule>看看红色的地方与你之前的地方那个不同。你改一下,再试试
也就是"?" 问号前面加了个”\“符号而已。转义<rule>
<note></note>
<from>/page/news/news_details_([0-9]+)</from>
<to>/news.do?method=newsinfo&nid=$1</to>
</rule>
<outbound-rule>
<from>/news.do\?method=newsinfo&nid=([0-9]+)$</from>
<to>/page/news/news_details_$1</to>
</outbound-rule>