零、Struts 2是啥?
SSH、SSM、SSI如雷贯耳,Struts 2 —— 是的,就这样了。。。
一、Hello Struts2
1、核心包
2、struts.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核心
1、Struts2可以通过get/set自动获取/设置数据
这个很简单了,只需要通过IDE自动生成get-set属性就可以了。然后就可以在Jsp页面设置或者是获取属性。
2、继承ActionSupport类
确切的说,用户的自定义action可以不继承ActionSupport类(实现Action接口),不继承时只需要有一个方法,返回String即可。
但是,继承ActionSupport类有诸多好处:能够使用struts预设的返回值/字符串,比如SUCCESS、ERROR、INPUT等;还可以重写execute方法等;最重要的就是可以与Struts更有效的无缝结合在一起(安全上和稳定性上做了很好的预处理),方便开发。
当然需要牢记:在继承ActionSupport的情况下,必须有无参构造函数。
3、Action设置数据、接收参数
主要有属性驱动(FieldDriven) 和模型驱动(ModelDriven)两种方式。其中FD又分为基本数据类型属性和JavaBean类型属性。
4、struts.xml配置
①pageckage 配置
name 包名
extends 继承
namespace 包命名空间
abstract 抽象包
②action 配置
name action 名
class 处理类
method 方法
③分模块配置方法
<include file="" ></include>
④使用通配符*
<action name="*_*" class="com.ipragmatic.struts2.action.{1}Action" method="{2}">
<result>/{1}_{2}_success.jsp</result>
</action>
5、result配置
主要是配置返回结果类型type这个属性
①默认是dispatcher:内部转发;
②redirect:重定向;
③chain:链条;
④redirectAction:重定向到action;
上面4个常用,一定要掌握并分清楚区别!
其他几个可以了解:
freemarker:freemarker模版
httpheader:返回一个已配置好的HTTP 头信息响应
stream:将原始数据作为流传递回浏览器端,
velocity:呈现Velocity 模板
xslt 该XML:可以通过XSL 模板进行转换
plaintext:返回普通文本类容
6、动态方法调用(DMI)
使用动态方法调用需要开启:<constant name="struts.enable.DynamicMethodInvocation" value="true" />
三、值栈&OGNL
OGNL是对象图导航语言Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言。
1、OGNL访问ValueStack 数据
<s:property value="account" />
2、OGNL访问ActionContext 数据
访问某个范围下的数据要用#
#parameters 请求参数request.getParameter(...);
#request 请求作用域中的数据request.getAttribute(...);
#session 会话作用域中的数据session.getAttribute(...);
#application 应用程序作用域中的数据application.getAttribute(...);
#attr 按照page request session application 顺序查找值
3、OGNL访问静态方法和属性
访问静态方法或者静态属性的语法分别为:@类的路径@方法名,@类的路径@属性名,语法中类的路径,即包名+类名。
需要注意的是,访问静态方法需要开启:<constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>
4、OGNL还可以访问复杂对象如:javaBean对象、访问集合对象、Map对象等。
四、其他(国际化、标签、拦截器)
标签
Struts2封装了一套标签,相比JSTL更强大。其核心标签根据功能可划分为:数据标签,控制标签,界面标签,其他标签。
数据标签
Property 标签:输出OGNL 表达式的值;
Set 标签:设置变量;
Bean 标签:定义javaBean 对象;
Date 标签:日期标签;
Debug 标签:调试标签;
Url&a 标签:超链接标签;
Include 标签:动态包含标签;
控制标签
Ifelse 标签:条件判断标签;
Iterator 标签:遍历标签;
Append 标签:叠加标签;
Generator 标签:分隔标签;
Merge 标签:组合标签;
Sort 标签:排序标签;
Subset 标签:截取标签;
界面标签
Form 标签:表单提交标签;
Text 标签:文本标签;
Radios 标签:单选标签;
Checkboxlist 标签:复选框标签;
Select 标签:下拉框标签;
其他标签
Updownselect 标签;
Optiontransferselect 标签;
国际化
国际化(Internationlization)是使软件实现对多语言的支持,Struts2的国际化设置方法很简单:
<constant name="struts.custom.i18n.resources" value="iPragmatic"></constant>
可以通过注入<s:text name=""></s:text>标签来访问国际化资源