重大改版
 鱼翔空 2013-06-19 技术总结|   0 836 
文章评分 90 次,平均分 5.0

一:

  在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压入栈顶,所以栈中还是保存原来对象的引用

使用prepare拦截器解决这种问题,

   但是在prepare拦截器之前没有拦截器给属性赋值

使用paramsPrepareParamsStack拦截器栈(可以查看struts-default.xml查看该配置)可以在prepare之前将参数传递过去

  *  只要在action中给model赋值,就必须在preparexx或者prepareDoxxx中赋值

七: 解决懒加载的问题

     1,一劳永逸:在web.xml中  必须

          struts拦截器运行完以后不放行,所以解决懒加载的过滤器OpensessionViewFilter,要在之前使用

          会将session的关闭延迟到页面渲染结束,如果网络不是很通畅的话,会占用数据库的连接资源,

          缺点: 占用数据库资源,特别是在高并发的项目中,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的方法

      优点:网络传输的数据,不是一次性的全部传完,而是用到的时候根据代理对象中的id去数据库中拿,相对来说传输的效率高些,客户的体验度好些

      缺点:延迟session的关闭,极长时间的占用DB的链接资源,特别是在高并发的系统中

     使用强行初始化的方法

       优点:数据库资源的快速释放,

       缺点:一次性传输到客户端的数量大


 

除特别注明外,本站所有文章均为我要编程原创,转载请注明出处来自http://5ycode.com/article/223.html

关于
该用户很懒!
切换注册

登录

忘记密码 ?

切换登录

注册

扫一扫二维码分享