Java里直接用正则表达式要这样定义
String pattern = "\\w";
因为java里面 \ 本身就是转义字符。
而把表达式放到配置文件里时就要用"\w"了。就因为这个疏忽,多用了两个小时才结束这个Filter。
写个记录,让自己以后少犯这样的错误。
web.xml里的filter配置
<filter> <filter-name>evaluationContextFilter</filter-name> <filter-class> com.gxoa.util.EvaluationContextFilter </filter-class> <init-param> <!-- “on”时为开,其他关闭 --> <param-name>switch</param-name> <param-value>on</param-value> </init-param> <init-param> <!-- 不检查的url,url为正则表达式,范围从小到大排序 --> <param-name>exceptUrls</param-name> <param-value> project!toCreateProject.do$;(function|role)!\w*.do$ </param-value> </init-param> </filter> <filter-mapping> <filter-name>evaluationContextFilter</filter-name> <url-pattern>*.do</url-pattern> </filter-mapping>
com.gxoa.util.EvaluationContextFilter
public class EvaluationContextFilter implements Filter{
Logger logger = Logger.getLogger(this.getClass());
private boolean isSwitchOn = false;
private Pattern[] exceptUrlArr;
public void init(FilterConfig config) throws ServletException{
isSwitchOn = "on".equalsIgnoreCase(config.getInitParameter("switch"));
String regs = config.getInitParameter("exceptUrls");
String [] urls = regs.replace("\n", "").replace("\t","").split(";");
exceptUrlArr = new Pattern[urls.length];
for(int i=0;i<urls.length;i++){
exceptUrlArr[i] = Pattern.compile(urls[i].toString());
}
}
}
本文详细介绍了在Java中如何正确地使用正则表达式,并特别强调了在代码和配置文件中正则表达式的区别。通过一个具体的web.xml配置示例,展示了如何避免常见的转义字符错误。
440

被折叠的 条评论
为什么被折叠?



