一: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. Angular2 依赖注入

    1. 使用DI 依赖注入是一个很重要的程序设计模式. Angular 有自己的依赖注入框架,离开了它,我们几乎没法构建 Angular 应用.它使用得非常广泛,以至于几乎每个人都会把它简称为 DI. ...

  2. mysqldump和xtrabackup备份原理实现说明

    背景: MySQL数据库备份分为逻辑备份和物理备份两大类,犹豫到底用那种备份方式的时候先了解下它们的差异: 逻辑备份的特点是:直接生成SQL语句,在恢复的时候执行备份的SQL语句实现数据库数据的重现. ...

  3. 为WIN8 APP创建置顶desktop应用

    Windows 8: TopMost window   I am working on my next ambitious project “MouseTouch” which is multi to ...

  4. 应用市场中包名(package name)的唯一性

    一般的应用商店,在开发者上传应用(APP)的时候,都会对应用的包名进行唯一性的校验.如果此时,用户上传的应用的包名与数据库中的已有的APP的包名一样,那么正常情况下,该应用就不能上传,而弹出提示说,该 ...

  5. Python-第三方库requests详解

    Requests 是用Python语言编写,基于 urllib,采用 Apache2 Licensed 开源协议的 HTTP 库.它比 urllib 更加方便,可以节约我们大量的工作,完全满足 HTT ...

  6. 三年回首:C基础

    atoi 实现注意: 要可以表示负数:处理到空格要结束:空串""返回0:NULL直接seg fault:溢出判断(atoi(2147483648)实际得到的是-2147483648 ...

  7. silverlight 流程设计器,流程引擎

    (图一流程设计器包含元素) (图一流程设计器实现功能) (流程引擎工作原理) (流程数据库设计) (流程数据库设计) (流程数据库设计) (工作流程设计器实现效果图) (代码结构图) 无法上传附件,需 ...

  8. 第二天--html

    <!DOCTYPE html><!--设置文档类型为标准的html5模型--><html>    <head>        <meta char ...

  9. JavaScript跨域提交数据

    1.通过jsonp跨域    场景:假设前台有JS方法"crossJS", 1.1发送请求http://www.xxx.com/?callback=crossJS.(创建一个scr ...

  10. Linux中不同主机建立免登陆

    ssh-keygen -t rsa scp /root/.ssh/id_rsa.pub  root@192.168.0.236:/root/.ssh/authorized_keys cat /root ...