前言
在网上商城的项目中,使用了SSH框架,在里面学习了Struts2框架,为什么我们要用这个Struts2呢?它有什么意义呢?这篇博文,咱们一起来讨论Struts2!
核心
概念:
Struts2是一个开源框架,方便开发者深入研究了解其机制,越来越广泛的接受和应用。而且它提供一个好的控制器和一套定制的标签库Taglib,着力在控制器和视图上的应用,完美的体现了MVC设计思想。提供集中统一的权限控制、国际化提示和消息、输入校验和日志记录等技术支持。另外,它对其他技术和框架具有良好的融合性。如能与EJB、JDBC和Hibernate等数据库访问技术相结合,利用集成技术减少数据库的工作量。
理解:
struts2其实就是为我们封装了servlet,简化了jsp跳转的复杂操作,并且提供了易于编写的标签,可以快速开发view层的代码。
为什么要用:
使用了MVC模式,减少了直接运用MVC模式来开发Web应用的周期。
架构:
实现步骤:
1 jsp出发action
2 struts2拦截请求,调用后台action
3 action返回结果,由不同的jsp展现数据
核心实现:
Struts2主要是用来控制整个系统流程。它由三个部分组成,核心控制器FilterDispatcher、业务控制器和用户实现的业务逻辑组件。本系统采用的核心控制器为2.3.15.3版本,该控制器作为一个Filter运行在Web应用中,它负责拦截所有的用户请求,当用户请求到达时,该Filter会过滤用户请求。如果用户请求以action结尾,该请求将被转入Struts 2框架处理。Struts 2框架获得了*.action请求后,将根据*.action请求的前面部分决定调用哪个业务逻辑组件,例如,对于login.action请求,Struts 2调用名为login的Action来处理该请求。
<!-- Struts2的核心过滤器 --> <filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter </filter-class> </filter>
<filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
拦截器也是本系统中使用的一个Struts2重要组件功能,该组件功能提供一个事件拦截的方法,让你可以对某些动作进行拦截。例如本系统对所有后台操作都有一个检查是否登录的功能,如果没有登录则对其操作进行拦截。
public class PrivilegeInterceptor extends MethodFilterInterceptor{ @Override protected String doIntercept(ActionInvocation actionInvocation) throws Exception { // 获得Session中存的后台的用户: AdminUser adminExistUser = (AdminUser) ServletActionContext .getRequest().getSession().getAttribute("adminExistUser"); if(adminExistUser == null){ // 没有登录: ActionSupport support = (ActionSupport) actionInvocation.getAction(); support.addActionError("您还没有登录!请先去登录!"); return support.LOGIN; }else{ // 已经登录 return actionInvocation.invoke(); } } }
总结
不断进步中,项目中经常遇到spring与structs 2相结合,后面的博客会持续更新,欢迎各位伙伴们!