刚开始学拦截器照着课本打,刚开始
1、Map<String,Object>……这里一直报错我怀疑是使用最新struts(struts2 5.3),标准已经改变,如果是其他原因我真是不知道了,这一句话在同学(struts2 3.*)的电脑上跑的很好。
2、课本行不通,我看了《java web 技术整合应用于项目实践》关于自定义拦截器这一章,也是照着写的,以下是自定义拦截器的代码:
public String intercept(ActionInvocation ai) throws Exception {
//获取Action实例
Object object=ai.getAction();
if(object!=null){
if(object instanceof PublicAction){
PublicAction ac=(PublicAction)object;
//获取用户提交的评论内容
String content=ac.getContent();
String title=ac.getTitle();
System.out.println(content);
if(content.contains("草")||title.contains("草")){
//代替
content=content.replaceAll("草", "*");
title=title.replaceAll("草", "*");
//把替代后的评论内容设置为Action的评论内容
ac.setContent(content);
ac.setTitle(title);
}
//对象不空,继续执行
return ai.invoke();
}
else{
//返回Action中的LOGIN逻辑视图字符串
return Action.LOGIN;
}
}
return Action.LOGIN;
}
看起来比课本上的简单多了不是吗,但是运行出现HTTP 500的报错。
String content=ac.getContent(); 这一句取到的是null
3、找到问题了
<interceptors>
<!-- replace是拦截器的名字 -->
<interceptor name="replace" class="interceptor.MyInterceptor"></interceptor>
</interceptors>
这个 要在struts.xml里(我是把这句放在了struts-***里,然后在struts.xml里include了一下)