Struts2简介
2016-03-28 09:26
363 查看
1、什么是Struts?
ØApache软件基金会赞助的一个开源项目
ØMVC经典设计模式中的一个经典产品
Ø充当控制器的作用
2、Struts1与Struts2的对比
3、web.xml配置Struts2核心过滤器
Struts2核心过滤器不会拦截jsp/html页面请求
<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请求匹配规则 -->
<url-pattern>/*</url-pattern>
</filter-mapping>
过滤器版本:
struts2.0.x到2.1.2版本的核心过滤器是FilterDispatcher
struts2.1.3开始核心过滤器是StrutsPrepareAndExecuteFilter
如果自定义过滤器的话,是要放在strtus2的过滤器之前的,如果放在struts2过滤器之后,自定义过滤器对action的过滤作用就废了,不会有效!除非是访问jsp/html!
StrutsPrepareAndExecuteFilter可以把他拆分成StrutsPrepareFilter和StrutsExecuteFilter,可以在这两个过滤器之间加上我们自己的过滤器
过滤器配置:
url-pattern:过滤action请求
全匹配:/*或者*
前缀匹配: /struts/*
后缀匹配:*.action
绝对匹配:/struts/login
4、struts2配置文件
<struts>
<package name="firstStruts" extends="struts-default" namespace="/struts">
<action name="action1" class="com.hikvision.finance.business.login.action.LoginAction"></action>
<action name="action2" method="method2" class="com.hikvision.finance.business.login.action.LoginAction">
</action>
<!-- 动态方法调用 -->
<action name="action3!*" method="{1}" class="com.hikvision.finance.business.login.action.LoginAction">
</action>
<action name="action4" method="method4" class="com.hikvision.finance.business.login.action.LoginAction">
<result name="login" type="dispatcher">/views/login.jsp</result>
</action>
</package>
</struts>
5、Struts2拦截器
拦截器概念
拦截器 Interceptor,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前进行拦截,然后在访问之前或之后加入某些操作。
拦截器栈就是将拦截器按一定的顺序联结成一条链。在访问被拦截的方法或字段时,拦截器栈中的拦截器就会按其定义的顺序被依次调用。
Struts2的默认拦截器是struts-default,其他拦截器继承struts-default
6、过滤器Filter和拦截器Interceptor
<package name="json" extends="struts-default" namespace="/" >
<interceptors>
<!-- 定义一个包含权限控制的拦截器 -->
<interceptor name="authority" class="com.hikvision.common.interceptor.AuthorizationInterceptor"/>
<!-- 定义一个包含权限控制的拦截器栈 -->
<interceptor-stack name="IMVSDefault">
<interceptor-ref name="defaultStack" />
<interceptor-ref name="authority" />
</interceptor-stack>
</interceptors>
<!-- 定义默认拦截器 -->
<default-interceptor-ref name="IMVSDefault" />
<!-- 定义全局处理结果 -->
<global-results>
<result name="login" type="redirect">/login.jsp</result>
<result name="noauth">/common/timeout.jsp</result>
</global-results>
</package>
7、过滤器Filter和拦截器Interceptor
8、值栈(ValueStack)
每个Action类的对象实例会拥有一个ValueStack对象, ValueStack和请求是一一对应的。
当 Struts 2接收到一个.action的请求后,会先建立Action类的对象实例,但并不会调用Action方法,而是先将Action类的相应属性放到 ValueStack对象的顶层节点(ValueStack对象相当于一个栈)。只是所有的属性值都是默认的值,如String类型的属性值为 null,int类型的属性值为0等。
在处理完上述工作后,Struts2就会调用拦截器链中的拦截器,当调用完所有的拦截器后,会将 ValueStack对象顶层节点中的属性值赋给Action类中相应的属性,最后会调用Action类的Action方法。
在Struts 2调用拦截器的过程中,可以改变ValueStack对象中属性的值,当改变某个属性值后,Action类的相应属性值就会变成在拦截器中最后改变该属性的这个值。
获得请求参数的拦截器是params,获得Action的配置参数的拦 截器是staticParams。
ValueStack实际上就是对OGNL的封装,OGNL主要的功能就是赋值与取值,Struts2正是通过ValueStack来进行赋值与取值的!
ValueStack是一个接口,而OgnlValueStack是strtus2中的缺省实现。ValueStack中的数据,分两个部分存放:root和context(这与OGNL中的概念一致),同时ValueStack暴露相关的接口:
void setValue(String expr, Object value);
Object findValue(String expr);
用来通过OGNL表达式对ValueStack中的数据进行操作!
ValueStack中的root对象是CompoundRoot,CompoundRoot继承了ArraryList,提供了额外的方法:push()和pop()方法,用来对root对象中所包含的数据进行存取!
ØApache软件基金会赞助的一个开源项目
ØMVC经典设计模式中的一个经典产品
Ø充当控制器的作用
2、Struts1与Struts2的对比
3、web.xml配置Struts2核心过滤器
Struts2核心过滤器不会拦截jsp/html页面请求
<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请求匹配规则 -->
<url-pattern>/*</url-pattern>
</filter-mapping>
过滤器版本:
struts2.0.x到2.1.2版本的核心过滤器是FilterDispatcher
struts2.1.3开始核心过滤器是StrutsPrepareAndExecuteFilter
如果自定义过滤器的话,是要放在strtus2的过滤器之前的,如果放在struts2过滤器之后,自定义过滤器对action的过滤作用就废了,不会有效!除非是访问jsp/html!
StrutsPrepareAndExecuteFilter可以把他拆分成StrutsPrepareFilter和StrutsExecuteFilter,可以在这两个过滤器之间加上我们自己的过滤器
过滤器配置:
url-pattern:过滤action请求
全匹配:/*或者*
前缀匹配: /struts/*
后缀匹配:*.action
绝对匹配:/struts/login
4、struts2配置文件
<struts>
<package name="firstStruts" extends="struts-default" namespace="/struts">
<action name="action1" class="com.hikvision.finance.business.login.action.LoginAction"></action>
<action name="action2" method="method2" class="com.hikvision.finance.business.login.action.LoginAction">
</action>
<!-- 动态方法调用 -->
<action name="action3!*" method="{1}" class="com.hikvision.finance.business.login.action.LoginAction">
</action>
<action name="action4" method="method4" class="com.hikvision.finance.business.login.action.LoginAction">
<result name="login" type="dispatcher">/views/login.jsp</result>
</action>
</package>
</struts>
5、Struts2拦截器
拦截器概念
拦截器 Interceptor,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前进行拦截,然后在访问之前或之后加入某些操作。
拦截器栈就是将拦截器按一定的顺序联结成一条链。在访问被拦截的方法或字段时,拦截器栈中的拦截器就会按其定义的顺序被依次调用。
Struts2的默认拦截器是struts-default,其他拦截器继承struts-default
6、过滤器Filter和拦截器Interceptor
<package name="json" extends="struts-default" namespace="/" >
<interceptors>
<!-- 定义一个包含权限控制的拦截器 -->
<interceptor name="authority" class="com.hikvision.common.interceptor.AuthorizationInterceptor"/>
<!-- 定义一个包含权限控制的拦截器栈 -->
<interceptor-stack name="IMVSDefault">
<interceptor-ref name="defaultStack" />
<interceptor-ref name="authority" />
</interceptor-stack>
</interceptors>
<!-- 定义默认拦截器 -->
<default-interceptor-ref name="IMVSDefault" />
<!-- 定义全局处理结果 -->
<global-results>
<result name="login" type="redirect">/login.jsp</result>
<result name="noauth">/common/timeout.jsp</result>
</global-results>
</package>
7、过滤器Filter和拦截器Interceptor
8、值栈(ValueStack)
每个Action类的对象实例会拥有一个ValueStack对象, ValueStack和请求是一一对应的。
当 Struts 2接收到一个.action的请求后,会先建立Action类的对象实例,但并不会调用Action方法,而是先将Action类的相应属性放到 ValueStack对象的顶层节点(ValueStack对象相当于一个栈)。只是所有的属性值都是默认的值,如String类型的属性值为 null,int类型的属性值为0等。
在处理完上述工作后,Struts2就会调用拦截器链中的拦截器,当调用完所有的拦截器后,会将 ValueStack对象顶层节点中的属性值赋给Action类中相应的属性,最后会调用Action类的Action方法。
在Struts 2调用拦截器的过程中,可以改变ValueStack对象中属性的值,当改变某个属性值后,Action类的相应属性值就会变成在拦截器中最后改变该属性的这个值。
获得请求参数的拦截器是params,获得Action的配置参数的拦 截器是staticParams。
ValueStack实际上就是对OGNL的封装,OGNL主要的功能就是赋值与取值,Struts2正是通过ValueStack来进行赋值与取值的!
ValueStack是一个接口,而OgnlValueStack是strtus2中的缺省实现。ValueStack中的数据,分两个部分存放:root和context(这与OGNL中的概念一致),同时ValueStack暴露相关的接口:
void setValue(String expr, Object value);
Object findValue(String expr);
用来通过OGNL表达式对ValueStack中的数据进行操作!
ValueStack中的root对象是CompoundRoot,CompoundRoot继承了ArraryList,提供了额外的方法:push()和pop()方法,用来对root对象中所包含的数据进行存取!
相关文章推荐
- spring Mvc 执行原理 及 xml注解配置说明
- Java反射
- myeclipse中配置maven
- mybatis做like模糊查询
- Struts1和Struts2
- java.作业4 看电视2
- 排序算法--归并排序法
- Myeclipse导入项目异常
- [Java Performance] 数据库性能最佳实践 - JPA和读写优化
- 深入Java集合HashMap实现原理
- springboot-Developer tools开发者福利
- Java核心技术点之多线程
- 用面向对象的思维去解决数三退一。关键字,双向环形链表。
- StoreType.java 存储方式
- StoreType.java 存储方式
- MiseringThread.java 解析页面线程
- MiseringThread.java 解析页面线程
- 关于Eclipse安装FATJAR插件的问题
- struts2中#,%的用法区别?
- Java并发与多线程(1) 死锁是什么