一、struts2 概念
轻量级MVC框架,主要解决请求分布问题,重心在控制层和表现层。轻量级就是:低侵入性,与业务代码的耦合度很低。struts2实现了MVC,并提供了一些API,采用模式化方式简化业务开发过程。
MVC:M(model)模型层,包含两层:业务数据和业务处理逻辑,例如:dao、service都属于model层。
V(view)视图层,负责显示界面和页面交互。
C(controller)控制层,模型M层与视图V层的桥梁,用于控制流程。
二、struts2与servlet对比
优点:1、业务代码解耦,适合团队开发:将请求分发给不同的处理类,降低业务代码耦合度;
2、提升开发效率:提供了一系列的API,可以大大提升项目开发的效率。
缺点:1、执行效率偏低:需要使用反射,解析XMl等手段,会降低执行效率;
2、结构复杂,需要学习成本:需要花费一定的成本学习struts2的API以及使用步骤。
三、struts2自身优势
健壮性:struts2是一个成熟稳定的框架;
易用性:易学好用;
扩展性:struts2运用AOP的思想,使用拦截器来扩展业务控制器Action;
侵入性:对业务代码依赖性很低,基本不需要导入其他包;
四、struts2/web.xml配置文件
<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的配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!--DTD配置-->
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!-- struts2中的配置一定要放在package中 -->
<package name="default" namespace="/" extends="struts-default"><!-- 配置当前Action的请求和相应属性
name表示请求的路径名称 class表示处理请求的Action类 -->
<action name="myUpload" class="com.hp.action.UploadAction"><!-- result 用来指定相应的处理 name表示相应的字符串
在开始和结束标签之间配置相应的具体路径 -->
<result name="success">uploadOk.jsp</result>
</action>
</package>
</struts>
六、struts2部分标签列举
<!-- 引入标签 -->
<%@ taglib prefix="s" uri="/struts-tags" %>
1、逻辑控制标签
..条件标签:条件标签主要有<s:if><s:elseif><s:esle>3个子标签,用于执行基本的条件流转
..迭代标签:<s:iterator>标签用于遍历集合(java.util.Collection)或者枚举值(java.util.Iterator)类型的对象。
2、数据输出标签
..action标签:<s:action>标签用于在jsp页面中直接调用Action
..date标签:<s:date>标签用以格式化日期并显示
..bean标签:bean标签用于创建javaBean实例,需要java类提供相应的getter、setter方法
..parma标签:param标签用于为其他标签添加参数
..property标签:property标签用于输出一个属性值
..<s:url>标签和<s:a>标签:<s:url>标签通常与<s:a>标签一起使用,<s:url>标签主要用于赋值給href属性,用于指定链接的地址和传递的参数。
..<s:debug>标签:<s:debug>标签用于在页面上生成一个连接,当点击链接时,可以看到ValueStack 和 Stack Context中的内容
七、struts2拦截器配置
1:拦截器原理:
当请求struts2的action原理时,struts2会查找配置文件,并根据其配置实例化相对的拦截器对象,然后穿成一个列表,最后一个一个的调用列表中的拦截器。
注:struts2拦截器是在访问action或action的某个方法,字段之前或之后实施拦截,并且struts2拦截器是可插拔的,拦截器是AOP的一种实现;
2:拦截器配置:
<!-- 通过指定拦截器名和拦截器实现类来定义拦截器 -->
<interceptors>
<!-- 定义一个名为myInterceptor的拦截器 -->
<interceptor name="myInterceptor" class="com.hp.action.myInterCeptor"></interceptor>
</interceptors>
<!--应用拦截器配置-->
<!-- 定义一个名为myBook的action -->
<action name="myBook" class="com.hp.action.BookAction">
<!-- 返回视图,转入success.jsp页面 -->
<result>/success.jsp</result><!-- 使用默认拦截器 -->
<interceptor-ref name="defaultStack"></interceptor-ref>
<!-- 使用自定义拦截器 -->
<interceptor-ref name="myInterceptor"></interceptor-ref>
</action>
<!-- 定义一个全局的result -->
<global-results>
<result name="no_login">/login.jsp</result>
</global-results><!-- 拦截器与过滤器的区别 -->
1:拦截器是基于java的反射机制,过滤器是基于函数回调;
2:拦截器不依赖于servlet容器,过滤器依赖于servlet容器;
3:拦截器只能对action起作用,过滤器可以对几乎所有的请求起作用;
4:拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问;
5:在action生命周期中,拦截器可以多次被调用,而过滤器只有在容器初始化时被调用一次;