请问jFinal支持UrlRewriteFilter吗?要怎么配置才能使用?

VikingZ 发布于 2013/04/02 17:34
阅读 1K+
收藏 1

@JFinal 你好,想跟你请教个问题: 我和其它项目一样,添加了urlrewrite-3.2.0.jar包,在web.xml里也加上了UrlRewriteFilter的配置

<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>
</filter-mapping>

然后加了一条规则

<rule>
<from>/category/category3_2</from>
<to type="forward">/category/category3?page=2</to>
</rule>

还没用正则,只是测试,但会报404错误,调试发现根本没进UrlRewriteFilter

要怎么做才能用呢?谢谢

加载中
2
VikingZ
VikingZ

在网上翻箱倒柜之后,这篇文章出现了http://ocaicai.iteye.com/blog/1312189

我按照这个第一点说的加了代码真的好了!

  1. <dispatcher>REQUEST</dispatcher>  
  2. <dispatcher>FORWARD</dispatcher>


现在的web.xml是这样的:

1
iSea
iSea
/category/category3_2  这个可能进到category这个controller找category3_2这个action处理了,估计是走的@jfinal 的默认url拦截
iSea
iSea
像你效果这个直接用@jfinal 的Restful风格路径了,没必要再用urlrewriter
0
JFinal
JFinal

    JFinal Handler 可以更轻量级地支持 url rewrite,实现方式可以参考:http://www.oschina.net/question/162347_61349

    UrlRewrite组件也是支持的,可以将 UrlRewrite的Filter配置在JFinalFilter之前

0
VikingZ
VikingZ

引用来自“JFinal”的答案

    JFinal Handler 可以更轻量级地支持 url rewrite,实现方式可以参考:http://www.oschina.net/question/162347_61349

    UrlRewrite组件也是支持的,可以将 UrlRewrite的Filter配置在JFinalFilter之前

我现在就是把UrlRewrite的Filter配置在JFinalFilter之前的,但运行发现没起作用
web.xml里内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">

<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>
</filter-mapping>

<filter>
<filter-name>jfinal</filter-name>
<filter-class>com.jfinal.core.JFinalFilter</filter-class>
<init-param>
<param-name>configClass</param-name>
<param-value>com.demo.common.DemoConfig</param-value>
</init-param>
</filter>

<filter-mapping>
<filter-name>jfinal</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

</web-app>

只有这两个过滤器

然后我用UrlRewrite是想把分页做进url里,不用?挂参数,类似wordpress

0
VikingZ
VikingZ

引用来自“青春陪葬了无知的年华”的答案

/category/category3_2  这个可能进到category这个controller找category3_2这个action处理了,估计是走的@jfinal 的默认url拦截
/category/category3_2   这个url是  Controller->category,方法是默认index(),category3 其实是第一个参数,2表示第二页,我是想用 UrlRewrite 把 /category/category3_2 变成 /category/category3?page=2 ,不想用?带分页的页数
iSea
iSea
回复 @VikingZ : 或者直接把参数都取来,然后你的参数不就是两个吗?最后一个“-”后面的就是页码,前面的就是name。
VikingZ
VikingZ
回复 @青春陪葬了无知的年华 : 嗯,现在也只能这样了,到时再规范下name。3Q ^_^
iSea
iSea
回复 @VikingZ : 你的name总有一些符号是不能有的吧?找个那样的符号做成分隔符
VikingZ
VikingZ
回复 @青春陪葬了无知的年华 : category3 是一个 name(参数),jFinal的参数分隔符导致我在第一个参数里不能包含“-”。当然可以修改参数分隔符,但不确定第一个参数里会包含什么符号。或者说第一个参数就是“xxx-yyy”的话,再加上"-页码"成 "xxx-yyy-page"的话,就不好解析参数了
iSea
iSea
/category/category-3-2 ,这样写不行吗?@jfinal 默认就支持这样的url写法,你看看文档。category-3-2这个都是参数。“-”是jfinal默认的参数分隔符。
0
VikingZ
VikingZ

刚才测试时发现

<urlrewrite>
<rule>
<from>/category/category32</from>
<to type="redirect">/category/category3?page=2</to>
</rule>
</urlrewrite>

如果rewrite的type是redirect,就可以正常访问;
如果rewrite的type是forward,就报404

这个type的不同,对后面进jFinal拦截器的有影响吗? @JFinal 

附上错误截图

0
iSea
iSea
<rule match-type="regex">
      <from>^/category/category3_([0-9]+)$</from>
      <to>/category/category3?page=$1</to>
</rule>
像这样直接省掉type="redirect"呢?结果怎么样
首席科学家
首席科学家
遇到了同样的问题,前面自动加了一个/
返回顶部
顶部