一:struts2简介

(1)struts1和struts2

webwork

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的更多相关文章

  1. LA 3231 - Fair Share

    You are given N processors and M jobs to be processed. Two processors are specified to each job. To ...

  2. 重新想象 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 ...

  3. 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 ...

  4. sendEmail报错:at /usr/share/perl5/vendor_perl/IO/Socket/SSL.pm

    sendEmail发送邮件是出现以下报错: *******************************************************************  Using the ...

  5. iOS - Share 分享/第三方登录

    1.系统方式创建分享 按照下图在 Info.plist 文件中将 Localization native development region 的值改为 China.如果不设置此项弹出的分享页面中显示 ...

  6. share登录Samba可读可写(适合虚拟机下学习使用)

    直接配置 smb.conf ( path = /etc/samba/smb.conf ). 首先,进入到 samba 文件夹: cd /etc/samba/ 备份 smb.conf: mv smb.c ...

  7. Select for update/lock in share mode 对事务并发性影响

    select for update/lock in share mode 对事务并发性影响 事务并发性理解 事务并发性,粗略的理解就是单位时间内能够执行的事务数量,常见的单位是 TPS( transa ...

  8. 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. ...

  9. Filestream/Windows Share导致Alwayson Failover失败

    最近做了一个case, 客户在ALWAYSON环境下进行failover操作, 之后所有replica上的alwayson group状态变成了resolving. 并且在执行failover的rep ...

  10. 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 ...

随机推荐

  1. android键盘输入读取

    android键盘输入读取  监控android键盘输入方式有两种,一种在java层实现,重写onKeyDown和onKeyUp方法.另一种是在jni层实现,监控/dev/input/event0键盘 ...

  2. 得到 window.open 新页面中的数据

    1.htm 页面 单击按  '钮后'  调用window.open方法,开启新窗口  2.htm 想实现---------------------- 在2.htm页面单击按钮 将相应的数据返回到 1. ...

  3. KRPano资源分析工具使用说明(KRPano XML/JS解密 切片图批量下载 球面图还原 加密混淆JS还原美化)

    软件交流群:571171251(软件免费版本在群内提供) krpano技术交流群:551278936(软件免费版本在群内提供) 最新博客地址:blog.turenlong.com 限时下载地址:htt ...

  4. 第18讲——ActiveX控件

    1,容器应用程序是可以嵌入或链接对象的应用程序.服务器应用程序是创建对象并且当对象被双击时,可以被启动的应用程序. 2,可以安装一个TstCon32来测试ActiveX控件 3,可以用 Invalid ...

  5. Mac系统下开启和关闭隐藏文件的方法

    在Mac下找到终端,输入以下命令(注意区分大小写): 显示Mac隐藏文件的命令: defaults write com.apple.finder AppleShowAllFiles -bool tru ...

  6. 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这些浏览器不兼容 ...

  7. Yii2 时间控件之把layDate做成widget

    实现效果如下 1.把layDate封装成Yii2的widget,存在 "\common\widgets"目录下,命名为DycLayDate,具体引用查看代码. 2.对应的model ...

  8. 如何生成git的公钥和私钥

    转载地址:http://blog.csdn.net/wqjsir/article/details/17386087 一. Git windows 客服端(MsysGit)下载 下载地址:http:// ...

  9. kettle系列-我的开源kettle管理平台[kettle-manager]介绍

    kettle管理工具 专门为kettle这款优秀的ETL工具开发的web端管理工具. 项目简介 kettle作为非常优秀的开源ETL工具得到了非常广泛的使用,一般的使用的都是使用客户端操作管理,但问题 ...

  10. opencv计算运行时间

    double Time = (double)cvGetTickCount();//  算法过程Time = (double)cvGetTickCount() - Time ; printf( &quo ...