er-mapping>
<filter-mapping>
<filter-name>LoginFilter</filter-name>
<url-pattern>/servlet/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>LoginFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
有了这个filter我们就不用在我们的web工程中每一个action、每 个jsp里进行“用户是否登录”的判断了,它会自动根据配置除去“exclude”中的相关web resource,全部走这个“是否登录”的判断。
注意此处这个exclude是笔者自己写的,为什么要exclude?
如果你不exclude,试想一个用户在login.jsp中填入相关的登录信息后点一下login按钮跳转到了login.do,而这两个web resource由于没有被“排除”出“需要登录校验”,因此每次你一调用login.jsp, login.do这个filter就都会强制要求你再跳转到login.jsp,那么我们一个用户从login.jsp登录完后再跳回login.jsp再跳回,再跳回,如此重复,进入死循环。
4.2 增加了一个自动记录异常的日志功能
在我们的applicationContext.xml文件中
<bean
id="methodLoggerAdvisor"
class="org.sky.ssi.util.LoggerAdvice" >
</bean>
<aop:config>
<aop:aspect
id="originalBeanAspect"
ref="methodLoggerAdvisor" >
<aop:pointcut
id="loggerPointCut"
expression="execution(* org.sky.ssi.service.impl.*.*(..))" />
<aop:around
method="aroundAdvice"
pointcut-ref="loggerPointCut" />
</aop:aspect>
</aop:config>
这样,我们的dao层、service层、有错就只管往外throw,框架一方面在接到相关的exception会进行数据库事务的自动回滚外,还会自动把service层抛出的exception记录在log文件中。
五、测试我们的工程
确认我们的StudentServiceImpl中删除学生的delStudent方法内容如下:
public void delStudent(String[] stdNo) throws Exception {
for (String s : stdNo) {
Map<String, Object> paraMap = new HashMap<String, Object>();
paraMap.put("stdNo", s);
studentDAO.delStudent(paraMap);
throw new Exception("force system to throw a exception");
}
}
我们把beta工程添加入我们在eclipse中配好的j2eeserver中去并启动起来。
我们输入相关的用户名写密码。
我们选中“13号学生高乐高”与“9号学生”,点“deletestudent”按钮。
后台抛错了,查看数据库内的数据
数据还在,说明我们的iBatis的事务已经在spring中启作用了.
再次更改StudentServiceImpl.java类中的delStudent方法,把“throw new Exception(“force system to throw a exception”);”注释掉,再来运行
我们再次选 中9号和13号学生,点deletestudent按钮,删除成功,这个够13的人终于被删了,呵呵。