轻松搞定Struts 2:三步走上手小入门
零、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>标签来访问国际化资源
轻松搞定Struts 2:三步走上手小入门的更多相关文章
- 搞定 mybatis generator 三步走
基于idea 编辑器下maven项目使用mybatis generator快速生成持久层 添加插件:插件网址:http://www.mybatis.org/generator/running/runn ...
- 轻松搞定RabbitMQ(三)——消息应答与消息持久化
转自 http://blog.csdn.net/xiaoxian8023/article/details/48710653 这个官网的第二个例子中的消息应答和消息持久化部分.我把它摘出来作为单独的一块 ...
- PDF怎么旋转页面,只需几步轻松搞定!
有时候我们下载一个PDF文件里面有页面是旋转的情况,用手机看的时候可以把手机旋转过来看,那么用电脑的时候总不可能也转过来看吧,笔记本是可以的台式的是不行的,这个时候我们就需要把PDF文件中旋转的页面转 ...
- Python高级特性: 12步轻松搞定Python装饰器
12步轻松搞定Python装饰器 通过 Python 装饰器实现DRY(不重复代码)原则: http://python.jobbole.com/84151/ 基本上一开始很难搞定python的装 ...
- 春节过后就是金三银四求职季,分享几个Java面试妙招,轻松搞定HR!
春节过后就是金三银四,分享几个Java面试妙招,轻松搞定HR! 2020年了,先祝大家新年快乐! 今年IT职位依然相当热门,特别是Java开发岗位.软件开发人才在今年将有大量的就业机会.春节过后,金三 ...
- 【转】轻松搞定FTP之FlashFxp全攻略
转载网址:http://www.newhua.com/2008/0603/39163.shtml 轻松搞定FTP之FlashFxp全攻略 导读: FlashFXP是一款功能强大的FXP/FTP软件,融 ...
- 使用BleLib的轻松搞定Android低功耗蓝牙Ble 4.0开发具体解释
转载请注明来源: http://blog.csdn.net/kjunchen/article/details/50909410 使用BleLib的轻松搞定Android低功耗蓝牙Ble 4.0开发具体 ...
- 盘它!基于CANN的辅助驾驶AI实战案例,轻松搞定车辆检测和车距计算!
摘要:基于昇腾AI异构计算架构CANN(Compute Architecture for Neural Networks)的简易版辅助驾驶AI应用,具备车辆检测.车距计算等基本功能,作为辅助驾驶入门级 ...
- Webcast / 技术小视频制作方法——自己动手录制video轻松搞定
Webcast / 技术小视频制作方法——自己动手录制video轻松搞定 http://blog.sina.com.cn/s/blog_67d387490100wdnh.html 最近申请加入MSP的 ...
随机推荐
- CodeForces 125D【鸽巢原理】
哇塞?开始的三个数其中两个数一定能确定一个序列.(鸽巢原理) #include <bits/stdc++.h> using namespace std; typedef long long ...
- 机房重构——泛型和“DataTable”
前言 我们都知道在机房重构的时候,大多数都在用七层进行重构,每一层都依赖实体.所以不管怎么调用,返回的应该是实体参数,这样才符合大多数的逻辑,这样我们试想一下,如果我们要求在U层返回多个实体值,怎么办 ...
- Android OpenGLES2.0(十七)——球形天空盒VR效果实现
在3D游戏中通常都会用到天空盒,在3D引擎中也一般会存在天空盒组件,让开发者可以直接使用.那么天空盒是什么?天空盒又是如何实现的呢?本篇博客主要介绍如何在Android中利用OpenGLES绘制一个天 ...
- springMVC容器加载源码分析
springmvc是一个基于servlet容器的轻量灵活的mvc框架,在它整个请求过程中,为了能够灵活定制各种需求,所以提供了一系列的组件完成整个请求的映射,响应等等处理.这里我们来分析下spring ...
- css 权重值(层叠性)详解
目录 css权重值(重叠性)实例 权重值的计算 !important 提升权重值实例 什么情况下可以使用!important ? 总结: css权重值(重叠性)实例 css中有很多选择器,那在多个选择 ...
- 监听Listener的简介及分类
一.监听器简介 > Listener是JavaWeb中三大组件之一.Servlet.Filter.Listener > 三大组件都有的共同特点,都需要实现一个接口,并在web.xml文件配 ...
- Codeforces Round #129 (Div. 2) A
Description The Little Elephant loves Ukraine very much. Most of all he loves town Rozdol (ukr. &quo ...
- 软件测试的生命周期&测试流程
一.软件的生命周期 二.软件生命周期的阶段 三.软件模型 四.软件测试的基本流程 五.软件开发流程.测试流程梳理 六.C/S与B/S架构 七.对软件测试行业的理解 八.常见笔试面试题 一.软件的生命周 ...
- 注意sqlite3和java的整数数据类型的区别
作为新手的我,没有考虑数据库和java的数据类型的对应上的区别: sqlite3的数据类型和java数据类型对应上要小心,特别是整数类型. java 中int类型4位存储,范围 -2^31到2^31- ...
- CheatEngine-内存修改
0.备注+待完成 //备注 a). 如果有方括号,就是说CE认为找 到了数值的指针了 //待完成 a). 自动导出外挂 b). 菜单栏中"表单"下的lua是做什么用的 c). CE ...