一:
在eclipse中jar包不能在lib下分类存放,如果分类存放,则会发生找不到类的异常
二:
在struts中使用validate和prepare的时候后面跟的是方法名(第一个字母大写),也可以加Do方法名
三: session关注
在struts的action中可以实现SessionAware接口,在经过session拦截器的时候会自动的创建
注入struts封装的session(是一个map集合)
四:自定义登录拦截器:
将自定义的拦截器放在所有的拦截器之前,从自定义拦截器中可以获取到当前访问的action
在这里可以做一些业务逻辑的判断
还可以在这里将一些值注入到访问的action中,必须实现接口化的编程,类似于sessionAware接口
注入的值最好是公共的。
如果单独为这个action设计一个接口,注入属性的值或者什么的也是可以的
五:自定义UserAware,用户关注对象(接口,参考sessionAware),哪个action需要user对象就在该action中实现这个UserAware,在登录拦截器中获取访问的action,是否instance of User关注,如果实现了用户关注了的话,就可以在登录拦截器中将session中的user对象注入到需要的action中
public String intercept(ActionInvocation invocation) throws Exception {
Action action=(Action) invocation.getAction();
//如果进入的action是注册或者登录的action就放行
if(action instanceof RegAction ||action instanceof LoginAction){
return invocation.invoke();
}
else{
//获取登录的用户session
User user= (User) ServletActionContext.getRequest().getSession().getAttribute("loginUser");
if(user==null){
return "login";
}
//如果用户登录了,判断该访问的action是否实现了UserAwre
if(action instanceof UserAware){
//将user对象注入实现该接口的action中
((UserAware)action).setUser(user);
}
//放行
return invocation.invoke();
}
}
六:压栈是把对象的引用放入栈顶
压栈只是在进入action的之前压栈,执行action以后再改变action中的模型值,就相当于将model指向了新的对象,返回出去的时候不会再把model压入栈顶,所以栈中还是保存原来对象的引用
* 只要在action中给model赋值,就必须在preparexx或者prepareDoxxx中赋值
七: 解决懒加载的问题
1,一劳永逸:在web.xml中 必须
缺点: 占用数据库资源,特别是在高并发的项目中,db是项目优化的瓶颈
2,在业务层中强行初始化,在高并发的系统中,效果要好的多
在事务关闭之前将值取出来就可以,类似于
public Survey getSurveyWithChildren(Integer sid){
Survey s = surveyDao.getEntity(sid);
for(Page p : s.getPages()){
p.getQuestions().size();
}
return s;
}
3,关闭所有的懒加载
会造成大量的数据的冗余
解决懒加载优缺点对比:
使用配置web.xml的方法