配置urlrewrite不生效

16 篇文章 0 订阅
2 篇文章 0 订阅

背景: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);
	}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值