share
一:struts2简介
(1)struts1和struts2


(在struts2出来之前,有两个特别流行的框架,一个叫struts1一个是web work,那个时候struts1火的程度远强于web work,甚至很多人都不知道web work,但是实际上web work实际上比struts1更优秀。所以后来struts团队在升级的时候,就直接选择了web work进行升级,然后又改了一个名字,叫struts2,然后顺便就火了。)
(2)好处
二.搭建环境

可以直接从lib目录下复制相关的包,也可以解压war压缩文件夹,复制里面的lib目录下的包,当然里面肯定有用不到的包。
写web.xml,也可以在war里面仿照它里面的web.xml文件进行写。配置struts.xml,可以在war包下classes文件夹下找到struts.xml,仿照它进行写。
三.访问web资源(Servlet API)
HttpServletRequest,HttpSession等
访问方式一:解耦方式,只能访问有限的Servlet API对象,且只能房屋其有限的方法
使用ActionContext类:
Map getApplication(),Map getParameters(),Map getSession()等方法。
实现XxxAware接口
访问方式二:和Servlet API耦合的方式,可以访问更多的Servlet API对象,且可以调用其原生的方法
使用ServletActionContext
实现ServletAware接口
四.拦截器
struts执行流程
1.什么是拦截器
拦截器是Struts框架的灵魂,Struts2大多数核心功能是通过拦截器实现的,每个拦截器都完成某项特定的功能,像数据转移,类型转换,数据校验等。
拦截器的作用,就是在Action执行之前或者之后执行一些处理操作。
2.内建拦截器,默认拦截器struts2内建了许多的拦截器,用来完成相应的功能,例如:
params拦截器:负责将请求参数设置为Acton属性
fileupload拦截器:对文件上传提供支持,将文件和元数据设置到对应的Action属性
……
在struts2里面有一个很重要的拦截器,默认拦截器defaultStack
<interceptor-stack name="defaultStack">
<interceptor-ref name="exception"/>
<interceptor-ref name="alias"/>
<interceptor-ref name="servletConfig"/>
<interceptor-ref name="i18n"/>
<interceptor-ref name="prepare"/>
<interceptor-ref name="chain"/>
<interceptor-ref name="scopedModelDriven"/>
<interceptor-ref name="modelDriven"/>
<interceptor-ref name="fileUpload"/>
<interceptor-ref name="checkbox"/>
<interceptor-ref name="datetime"/>
<interceptor-ref name="multiselect"/>
<interceptor-ref name="staticParams"/>
<interceptor-ref name="actionMappingParams"/>
<interceptor-ref name="params"/>
<interceptor-ref name="conversionError"/>
<interceptor-ref name="validation">
<param name="excludeMethods">input,back,cancel,browse</param>
</interceptor-ref>
<interceptor-ref name="workflow">
<param name="excludeMethods">input,back,cancel,browse</param>
</interceptor-ref>
<interceptor-ref name="debugging"/>
<interceptor-ref name="deprecation"/>
</interceptor-stack>
在之前可能会想,我们在继承默认包的时候,并没有去引用这些拦截器,实际上,在struts-default.xml的最后几行中,我们可以看到这一行:
<default-interceptor-ref name="defaultStack"/>,默认引用的拦截器,就是defaultStack。
也就是,当你没有去显性地指定你要使用地拦截器地时候,会引用这么一个拦截器栈。
注意地是,当为包中地某个Action显示指定了某个拦截器,则默认拦截器不会起作用。如果还要使用默认拦截器,我们必须手动引用。
3.自定义拦截器
方法一:实现Interceptor接口
-void init()初始化拦截器所需资源
-void destroy()释放在init中分配地资源
-String interceptor(ActionInvocation args0)
实现拦截器的功能
利用ActionInvocation参数获取Action状态
返回result字符串作为逻辑视图
方法二:继承AbstractInterceptor类
-提供了init()和destroy()方法的空实现,只需是西安Intercept()即可
五。类型转换
对于一个智能的MVC框架而言,不可避免的需要实现类型转换.因为B/S(浏览器/服务器)结构应用的请求参数是通过浏览器发送到服务器的,Http请求参数都是字符串类型,因此必须在服务器端完成数据类型的转换
MVC框架是一个表现层解决方案,理应提供类型转换的支持,Struts2提供了功能非常强大的类型转换支持.
表现层数据的处理
1、对于web应用而言,表现层主要用于与用户交互,包括收集用户输入数据,向用户呈现服务器的状态。因此表现层的数据的流向主要有两个方向:输入数据和输出数据。
2、对于输入数据:则需要完成由字符串数据向多种类型数据的转化。程序通常无法自动完成,需要在代码中手动转化
3、对于输出数据:不管是java或是jsp都支持多种数据类型的直接输出。
4、表现层另外一个数据处理是:数据校验,分为客户校验和服务器端校验.
自定义类型转换器注册类型转换器:
巨擘类型转换器:<propName需要进行类型转换的属性>=<ConverterClass类型转换实现类>
全局类型转换器:提供xwork-conversion.properties文件:<proType进行转换的类型>=<ConvertClass实现类>
六.输入校验
web应用通过输入页面收集的数据是非常复杂的,不仅会包含正常用户的误输入,还可能包含用户的恶意输入。异常的输入,轻则导致系统正常中断,重责导致系统崩溃。
对异常输入的过滤,就是输入校验,也成为数据校验。Struts2的输入校验既包括服务器端校验,也包括客户端校验。
校验文件名:<Action的名字>-validation.xml
校验规则文件的根元素是<validators.../>
内建校验器:xwork-core-2.3.31jar包里,com\opensymphony\xwork2\validator\validators
share的更多相关文章
- LA 3231 - Fair Share
You are given N processors and M jobs to be processed. Two processors are specified to each job. To ...
- 重新想象 Windows 8.1 Store Apps (81) - 控件增强: WebView 之加载本地 html, 智能替换 html 中的 url 引用, 通过 Share Contract 分享 WebView 中的内容, 为 WebView 截图
[源码下载] 重新想象 Windows 8.1 Store Apps (81) - 控件增强: WebView 之加载本地 html, 智能替换 html 中的 url 引用, 通过 Share Co ...
- linux下安装MySQL出错file /usr/share/mysql/charsets/latin2.xml from install of MySQL-......
linux64 red hat 6.3企业版 开始错误装了32位mysql最后怎么也装不上64mysql了,折腾了一番最后全部卸载搞定: file /etc/init.d/mysql from ins ...
- sendEmail报错:at /usr/share/perl5/vendor_perl/IO/Socket/SSL.pm
sendEmail发送邮件是出现以下报错: ******************************************************************* Using the ...
- iOS - Share 分享/第三方登录
1.系统方式创建分享 按照下图在 Info.plist 文件中将 Localization native development region 的值改为 China.如果不设置此项弹出的分享页面中显示 ...
- share登录Samba可读可写(适合虚拟机下学习使用)
直接配置 smb.conf ( path = /etc/samba/smb.conf ). 首先,进入到 samba 文件夹: cd /etc/samba/ 备份 smb.conf: mv smb.c ...
- Select for update/lock in share mode 对事务并发性影响
select for update/lock in share mode 对事务并发性影响 事务并发性理解 事务并发性,粗略的理解就是单位时间内能够执行的事务数量,常见的单位是 TPS( transa ...
- file /usr/share/mysql/... conflicts with file from package mysql-libs-5.1.73-3.el6_5.x86_ 64 MySQL安装
在CentOS 6.5安装MySQL 5.6.17,安装到最后一个rpm文件MySQL-server时 安装命令是:rpm -ivh MySQL-server-5.6.17-1.el6.x86_64. ...
- Filestream/Windows Share导致Alwayson Failover失败
最近做了一个case, 客户在ALWAYSON环境下进行failover操作, 之后所有replica上的alwayson group状态变成了resolving. 并且在执行failover的rep ...
- Can't exec "aclocal": No such file or directory at /usr/share/autoconf/Autom4te/FileUtils.pm line 326.
今天执行:autoreconf -fvi的时候出现如下错误: autoreconf: Entering directory `.' autoreconf: configure.in: not usin ...
随机推荐
- android键盘输入读取
android键盘输入读取 监控android键盘输入方式有两种,一种在java层实现,重写onKeyDown和onKeyUp方法.另一种是在jni层实现,监控/dev/input/event0键盘 ...
- 得到 window.open 新页面中的数据
1.htm 页面 单击按 '钮后' 调用window.open方法,开启新窗口 2.htm 想实现---------------------- 在2.htm页面单击按钮 将相应的数据返回到 1. ...
- KRPano资源分析工具使用说明(KRPano XML/JS解密 切片图批量下载 球面图还原 加密混淆JS还原美化)
软件交流群:571171251(软件免费版本在群内提供) krpano技术交流群:551278936(软件免费版本在群内提供) 最新博客地址:blog.turenlong.com 限时下载地址:htt ...
- 第18讲——ActiveX控件
1,容器应用程序是可以嵌入或链接对象的应用程序.服务器应用程序是创建对象并且当对象被双击时,可以被启动的应用程序. 2,可以安装一个TstCon32来测试ActiveX控件 3,可以用 Invalid ...
- Mac系统下开启和关闭隐藏文件的方法
在Mac下找到终端,输入以下命令(注意区分大小写): 显示Mac隐藏文件的命令: defaults write com.apple.finder AppleShowAllFiles -bool tru ...
- mui项目中如何使用原生JavaScript代替jquery来操作dom 转自【B5教程网】:http://www.bcty365.com/content-146-3661-1.html
最近在用mui写页面,当然了在移动App里引入jq或zepto这些框架,肯定是极不理性的.原生JS挺简单,为何需要jq?jq的成功当时是因为ie6.7.8.9.10.chrome.ff这些浏览器不兼容 ...
- Yii2 时间控件之把layDate做成widget
实现效果如下 1.把layDate封装成Yii2的widget,存在 "\common\widgets"目录下,命名为DycLayDate,具体引用查看代码. 2.对应的model ...
- 如何生成git的公钥和私钥
转载地址:http://blog.csdn.net/wqjsir/article/details/17386087 一. Git windows 客服端(MsysGit)下载 下载地址:http:// ...
- kettle系列-我的开源kettle管理平台[kettle-manager]介绍
kettle管理工具 专门为kettle这款优秀的ETL工具开发的web端管理工具. 项目简介 kettle作为非常优秀的开源ETL工具得到了非常广泛的使用,一般的使用的都是使用客户端操作管理,但问题 ...
- opencv计算运行时间
double Time = (double)cvGetTickCount();// 算法过程Time = (double)cvGetTickCount() - Time ; printf( &quo ...