首页 技术 正文
技术 2022年11月6日
0 收藏 577 点赞 402 浏览 3199 个字

一: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

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,036
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,522
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,370
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,151
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,784
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,866