2012年5月

Spring MVC的@SessionAttribute注解小记

最近做spring mvc开发的时候要用到session,于是就想试试通过@SessionAttribute这个注解来实现保存用户登录信息的session,发现在两个control之间没法获取保存的session,纠结的GOOGLE许久后偶然在stackoverflow上发现了下面一段回答:

The  @SessionAttribute annotation 

Session attributes as indicated using this annotation correspond to a specific handler's model attributes, getting transparently stored in a conversational session. Those attributes will be removed once the handler indicates completion of its conversational session. Therefore, use this facility for such conversational attributes which are supposed to bestored in the sessiontemporarily during the course of a specific handler's conversation.

For permanent session attributes, e.g. a user authentication object,use the traditional session.setAttribute method instead. Alternatively, consider using the attribute management capabilities of the generic WebRequest interface.

 

In other words,  @SessionAttribute  is for storing conversation MVC-model objects in the session (as opposed to storing them as request attributes). It's not intended for using with arbitrary session attributes. As you discovered, it only works if the session attribute is always there.

I'm not aware of any other alternative, I think you're stuck with HttpSession.getAttribute()

大概的基本意思就是:  @SessionAttribute这个注解只有当你想在某个特定的事件处理中临时保存session会话(红色标注)的时候才适用,而当需要永久保存session的话,还是采用常规的方法,比如说:session.setAttribute

 

===========常规java操作session的方法===========

- 阅读剩余部分 -

常见开源协议整理

MIT 协议

MIT许可证之名源自麻省理工学院(Massachusetts Institute of Technology, MIT),又称「X条款」(X License)或「X11条款」(X11 License)

MIT内容与三条款BSD许可证(3-clause BSD license)内容颇为近似,但是赋予软体被授权人更大的权利与更少的限制。

被授权人有权利使用、复制、修改、合并、出版发行、散布、再授权及贩售软体及软体的副本。

被授权人可根据程式的需要修改授权条款为适当的内容。

在软件和软件的所有副本中都必须包含版权声明和许可声明。

此授权条款并非属copyleft的自由软体授权条款,允许在自由/开放源码软体或非自由软体(proprietary software)所使用。

此亦为MIT与BSD(The BSD license, 3-clause BSD license)本质上不同处。

MIT条款可与其他授权条款并存。另外,MIT条款也是自由软体基金会(FSF)所认可的自由软体授权条款,与GPL相容。

协议英文原文:http://www.opensource.org/licenses/mit-license.php

GPL 协议

在自由软件所使用的各种许可证之中,最为人们注意的也许是通用性公开许可证(General Public License,简称GPL)。
GPL同其它的自由软件许可证一样,许可社会公众享有:运行、复制软件的自由,发行传播软件的自由,获得软件源码的自由,改进软件并将自己作出的改进版本向社会发行传播的自由。 
GPL还规定:只要这种修改文本在整体上或者其某个部分来源于遵循GPL的程序,该修改文本的 整体就必须按照GPL流通,不仅该修改文本的源码必须向社会公开,而且对于这种修改文本的流通不准许附加修改者自己作出的限制。因此,一项遵循GPL流通 的程序不能同非自由的软件合并。GPL所表达的这种流通规则称为copyleft,表示与copyright(版权)的概念“相左”。

GPL协议最主要的几个原则:

1、确保软件自始至终都以开放源代码形式发布,保护开发成果不被窃取用作商业发售。任何一套软 件,只要其中使用了受 GPL 协议保护的第三方软件的源程序,并向非开发人员发布时,软件本身也就自动成为受 GPL 保护并且约束的实体。也就是说,此时它必须开放源代码。

2、GPL 大致就是一个左侧版权(Copyleft,或译为“反版权”、“版权属左”、“版权所无”、“版责”等)的体现。你可以去掉所有原作的版权 信息,只要你保持开源,并且随源代码、二进制版附上 GPL 的许可证就行,让后人可以很明确地得知此软件的授权信息。GPL 精髓就是,只要使软件在完整开源 的情况下,尽可能使使用者得到自由发挥的空间,使软件得到更快更好的发展。

3、无论软件以何种形式发布,都必须同时附上源代码。例如在 Web 上提供下载,就必须在二进制版本(如果有的话)下载的同一个页面,清楚地提供源代码下载的链接。如果以光盘形式发布,就必须同时附上源文件的光盘。

4、开发或维护遵循 GPL 协议开发的软件的公司或个人,可以对使用者收取一定的服务费用。但还是一句老话——必须无偿提供软件的完整源代码,不得将源代码与服务做捆绑或任何变相捆绑销售。

Apache Licence 协议

Apache Licence是著名的非盈利开源组织Apache采用的协议。该协议和BSD类似,同样鼓励代码共享和尊重原作者的著作权,同样允许代码修改,再发布(作为开源或商业软件)。需要满足的条件也和BSD类似:

 

  1. 需要给代码的用户一份Apache Licence
  2. 如果你修改了代码,需要在被修改的文件中说明。
  3. 在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议,商标,专利声明和其他原来作者规定需要包含的说明。
  4. 如果再发布的产品中包含一个Notice文件,则在Notice文件中需要带有Apache Licence。你可以在Notice中增加自己的许可,但不可以表现为对Apache Licence构成更改。

 

Apache Licence也是对商业应用友好的许可。使用者也可以在需要的时候修改代码来满足需要并作为开源或商业产品发布/销售。

英文原文:http://www.apache.org/licenses/LICENSE-2.0.html

- 阅读剩余部分 -

Question2Answer(q2a)主题--“坚果盒”

前段时间心血来潮想建个问答站,找找开源程序找到了Q2A,无奈界面实在不喜欢,于是自己DIY了一个模板,好吧,其实我是抄的人人小站的风格~~。

这个风格做的不咋滴,部分细节地方没考虑的多细致,比较粗糙,因为做了一大半后突然没兴致了,而且有的功能跟我需要的不大一样,就搁置了~~~想要的下载了凑活着用吧,或者自己改改用也行

##点这个下载→:Jianguo.zip 

解压后文件夹放到qa-theme下面,再在后台启用下就OK

界面截图:

- 阅读剩余部分 -

spring mvc 小笔记

常用注解

    @Controller
    在类上面定义,表明该类为控制器,返回字符串与redirect:xxx
    @RequestMapping
    类或方法上面使用此注解,设置URL访问地址。它有两个属性,value指定访问路径,method指定指定请求方式,请求方式在RequestMethod这个类中,全部以常量形式定义,它默认使用GET请求。
    @RequestParam
    指定Request请求参数,在方法参数中定义,相当于传统的request.getParameter()
    @PathVariable
    获取URL访问路径变量,这是Spring MVC 3.0框架才加入的特性,基于RESTful风格的URL访问路径。
    @ModelAttribute
全局式的方法,在一组URL访问路径中,每次都会执行,方法返回结果保存在module会话中。
    @Service
    在类上面定义,指定被注解的类是业务逻辑组件,如果不指定具体的Bean ID,则采用默认命名方式,即类名的首字母小写。

    @Autowired
    IoC自动注入功能,替换以前的set写法,在SSH2中就已经开始使用了。

    @Qualifier
    对同一接口类有不同实现指定具体的实现类。
    @ResponseBody
    同样定义在方法上,Ajax调用声明,指定方法返回结果为Ajax回调函数结果。这是Spring MVC 3.0框架中增加的一个新特性。
    @InitBinder
    初始化数据绑定与类型转换,将传入的参数转换为自定义类型,或者对参数进行自定义处理。

@Controller 声明Action组件
@Service    声明Service组件    @Service("myMovieLister") 
@Repository 声明Dao组件
@Component   泛指组件, 当不好归类时. 
@RequestMapping("/menu")  请求映射
@Resource  用于注入,( j2ee提供的 ) 默认按名称装配,@Resource(name="beanName") 
@Autowired 用于注入,(srping提供的) 默认按类型装配 
@Transactional( rollbackFor={Exception.class}) 事务管理
@ResponseBody
@Scope("prototype")   设定bean的作用域

 

Servlet拦截匹配规则事例

当映射为@RequestMapping(“/user/add”)时:
1、拦截*.do,例如:/user/add.do,弊端:所有的url都要以.do结尾。不会影响访问静态文件。
2、拦截/app/*,例如:/app/user/add,弊端:请求的url都要包含/app,@RequestMapping(“/user/add”)中不须要包含/app。
3、拦截/,例如:/user/add,弊端:对jpg,js,css静态文件的访问也被拦截不能正常显示。
4、拦截/*,可以走到Action中,但转发到jsp时再次被拦截,不能访问到jsp。

转发与重定向

可以通过redirect/forward:url方式转到另一个Action进行连续的处理。

可以通过redirect:url 防止表单重复提交 。

写法如下:

return “forward:/order/add”;

return “redirect:/index.jsp”;

热评文章

最新文章

最近回复

归档

其它