背景:spring3+hibernate
web.xml配置内容如下:
<!-- 登录过滤器配置 -->
<filter>
<filter-name>loginSessionFilter</filter-name>
<filter-class>com.zhiyuan.axb2c.base.filter.LoginSessionFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>loginSessionFilter</filter-name>
<url-pattern>*.htm</url-pattern>
</filter-mapping>
<!--URL伪静态 -->
<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>*.htm</url-pattern>
</filter-mapping>
<!-- 定义Spring MVC过滤器 -->
<servlet>
<servlet-name>axb2c</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>axb2c</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
一、配置目的
当前系统为了实现伪静态页面,而加大被百度等搜索引擎检索到的概率,而将页面的请求由一般常用的.do/.action转为.htm,故引入urlrewrite来实现将页面发送.htm请求而后端以.action的方式接收
二、配置方式
(1)下载2.6或3.X版jar包导至项目。下载地址:http://www.tuckey.org/urlrewrite/ (以3.2为示例)。
(2)解压下载文件,将urlrewritefilter-3.2.0\WEB-INF\lib\ urlrewrite-3.2.0.jar,导入工程。
(3)将urlrewritefilter-3.2.0\WEB-INF\ urlrewrite.xml,加入至工程WEB-INF目录下。
(4)web.xml添加如下代码(在urlrewrite.xml中可找到),拦截请求,对匹配的请求进行rewrite。
<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>
(5)urlrewrite.xml中配制需实现静态化的请求。
<rule>
<from>^/company/([0-9]+).html$</from>
<to>/goods/company.jsp?companyId=$1</to>
</rule>
三、配置时出现的问题
前端发出的.htm请求被截住了,并没有转为.action,如果将请求手动转为.action就可以正常接收请求了
四、解决问题
问题原因:在配置文件中配置了loginFilter过滤器来进行登录校验的判断,但这个项目的框架是由之前的老框架拿过来的,而此时还没有计划做登录校验的事情,就放了个架子在哪里,也就是说进入了loginFilter但没有返回信息,即不返回成功与否,所以就被此截住了,系统不会再继续接下来的将.htm转.action的流程了
解决方式:在空的loginFilter内不做具体的校验,一律成功的返回
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response,
FilterChain filterChain) throws ServletException, IOException
{
// 非过滤页面直接跳转
filterChain.doFilter(request, response);
}