一: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. iOS-最全的App上架教程

    App上架教程 心情有没有好一点 在上架App之前想要 真机测试的同学 请查看iOS- 最全的真机测试教程 里面包含怎么让多台电脑同时 上架App和同时真机调试.P12文件的使用详解 因为最近更新了X ...

  2. 最小生成树(prim&kruskal)

    最近都是图,为了防止几次记不住,先把自己理解的写下来,有问题继续改.先把算法过程记下来: prime算法:                  原始的加权连通图——————D被选作起点,选与之相连的权值 ...

  3. tushare

    tushare TuShare是一个免费.开源的python财经数据接口包.主要实现对股票等金融数据从数据采集.清洗加工 到 数据存储的过程,能够为金融分析人员提供快速.整洁.和多样的便于分析的数据, ...

  4. hadoop2.6.4 搭建单机模式

    注(要先安装jdk,最好jdk版本>=1.7) 安装jdk  http://www.cnblogs.com/zhangXingSheng/p/6228432.html     给普通用户添加su ...

  5. 百度地图api的覆盖物样式与bootstrap样式冲突解决办法

    使用百度地图api 和 bootstrap ,发现标注样式出现了问题 label左侧 宽度变得非常窄 正常情况下应该是下面这样的: 原因是boostrap样式和百度地图样式冲突了. 解决办法: .ba ...

  6. css中“~”和“>”是什么意思?

    css中"~"是: 为所有相同的父元素中位于 p 元素之后的所有 ul 元素设置背景: p~ul{ background:#ff0000; }    <p>快乐生活&l ...

  7. Toad for Oracle

    # 设置schema browser 多标签

  8. teamviewer "TeamViewer Daemon is not running

    执行下面的命令问题解决: # teamviewer --daemon enable enable Sat Jan :: CST Action: Installing daemon () for 'up ...

  9. glassfish配置

    最近刚接触glassfish,在此记录一些glassfish的使用. 1.下载完glassfish之后(在配置玩JAVA路径后),解压缩.找到glassfish目录下的bin文件夹,运行asadmin ...

  10. ppmoney 总结一

    1.JQ $.get() <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...