轻松搞定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的 ...
随机推荐
- 测试merge效率
测试说明: MERGE是oracle提供的一种特殊的sql语法,非常适用于数据同步场景,即: (把A表数据插到B表,如果B表存在相同主键的记录则使用A表数据对B表进行更新) 数据同步的常规做法是先尝试 ...
- [CentOS7] iconv编程转换
声明:本文主要总结自:鸟哥的Linux私房菜-第九章.vim 程式編輯器,如有侵权,请通知博主 (-- 源自鸟哥的私房菜) 首先用Notepad++新建个文件来做这个实验,在Windows平台下新建个 ...
- js原生实现轮播图效果(面向对象编程)
面向对象编程js原生实现轮播图效果 1.先看效果图 2.需要实现的功能: 自动轮播 点击左右箭头按钮无缝轮播 点击数字按钮切换图片 分析:如何实现无缝轮播? 在一个固定大小的相框里有一个ul标签,其长 ...
- spring boot jpa 使用<S extends T> List<S> findAll(Example<S> example)查询数据
直接上代码 //查询条件对象 TinventivePrinciple time = new TinventivePrinciple(); //设置需要查询的条件(赋值) time.setIsTime( ...
- luogu 3806 【模板】点分治
luogu 3806 [模板]点分治 给定一棵有n个点的树,有m个询问,每个询问树上距离为k的点对是否存在.树的权值最多不超过c.n<=10000,m<=100,c<=1000,K& ...
- 洛谷P1314 聪明的质监员
P1314 聪明的质监员 题目描述 小T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有 n 个矿石,从 1到n 逐一编号,每个矿石都有自己的重量 wi 以及价值vi .检验矿产的流程是: ...
- 洛谷P1373 小a和uim之大逃离
P1373 小a和uim之大逃离 题目背景 小a和uim来到雨林中探险.突然一阵北风吹来,一片乌云从北部天边急涌过来,还伴着一道道闪电,一阵阵雷声.刹那间,狂风大作,乌云布满了天空,紧接着豆大的雨点从 ...
- layui的tree和form并没有冲突!无限级tree下拉列表和select下拉列表同一页使用!
在昨天写的随笔中: layui的tree和form同时引用出现冲突的粗略解决办法 https://www.cnblogs.com/xwma/p/10900975.html 提出有冲突,今天在开发中发现 ...
- 当构造方法参数过多时使用builder模式
静态工厂和构造方法都有一个限制:它们不能很好地扩展到很多可选参数的情景.请考虑一个代表包装食品上的营养成分标签的例子.这些标签有几个必需的属性——每次建议的摄入量,每罐的份量和每份卡路里 ,以及超过 ...
- iOS拼图
#import "ViewController.h" @interface ViewController () @end @implementation ViewContro ...