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}
详细可查看
典型调用
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 在线测试你的表达式