www.sqnote.cn

urlwritefilter

download: http://tuckey.org/urlrewrite/#download

Manual: http://tuckey.org/urlrewrite/manual/2.6/

按照manual步骤就可以实现url重写

下面即是一条简单的重写规则,所有访问

/sqnote/olddir/example.html 都会跳转到 /other/newdir/example.html
from 内容:  ^/sqnote/olddir/(.*)$
to 内容: /very/newdir/$1

备注:
type: forward(default)、redirect

forward 等同于

RequestDispatcher rq = request.getRequestDispatcher([to value]);
rq.forward(request, response);

redirect 等同于

HttpServletResponse.sendRedirect([to value]))

使用Java 中的 Pattern来测试你的规则写的是否正确:
boolean b = Pattern.matches("^(SQ)(note)?$", "SQnote");

附录

正则表达式

1: .
句点符号匹配所有字符,包括空格、Tab字符甚至换行符
表达式:s.q
匹配 :shq、s#q、s q

2: []
方括号里面指定的字符才参与匹配
表达式:s[abcq]note
匹配 :sanote、sbnote、scnote、sqnote

3: |
"或"运算
表达式:s(a|q)note
匹配 :sanote、sqnote

\d [0-9] 数字
\D [^0-9] 非数字
\s [ \t\n\x0B\f ] 空白字元
\S [^ \t\n\x0B\f ] 非空白字元
\w [a-zA-Z_0-9] 数字或是英文字
\W [^a-zA-Z_0-9] 非数字与英文字

^ 表示每行的开头
$ 表示每行的结尾

X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次

举例:
目标 0571-12345678
表达式0571\\-[0-9]{8}

(如果-不是必须的那么表达式可以如下)
0571\\-?[0-9]{8}

也可以写成
0571\\-?\\d{8}

详细可查看

JavaAPI

典型调用
Pattern p = Pattern.compile("s*q");
Matcher m = p.matcher("ssssq");
boolean b = m.matches();


String str="sq SQ note";
String regEx="s|q";
Pattern p=Pattern.compile(regEx);
Matcher m=p.matcher(str);
boolean rs=m.find();

如果str中有regEx,那么rs为true,否则为flase。

如果想在查找时忽略大小写,则可以写成Pattern p=Pattern.compile(regEx,Pattern.CASE_INSENSITIVE);

替换的方法:


Pattern p=Pattern.compile(regEx,Pattern.CASE_INSENSITIVE);
Matcher m=p.matcher("SQsqSQsQSqnote");
String s=m.replaceAll("SQ");

结果为"SQnote"

如果写成空串,既可达到删除的功能,比如:

String s=m.replaceAll("");

结果为"note"

关于正则表达式你可能还会用到:Jakarta-ORO and 在线测试你的表达式

Relate Posts:

Tags: java regex urlrewrite oro

By SQ post on 2009-1-4 23:34 PM Java |

添加评论

5+7