struts2 基础学习
Struts 2是在WebWork2基础发展而来的。
注意:struts 2和struts 1在代码风格上几乎不一样。
Struts 2 相比Struts 1的优点:
1、在软件设计上Struts 2 没有像Struts 1那样跟Servlet API 和 struts API 有着紧密的耦合。
Struts 2的应用可以不依赖于Servlet API和Struts API 。
2、Struts 2 提供了拦截器,利用拦截器可以进行AOP编程。
3、Struts 2 提供了类型转换器。
4、Struts 2 提供支持多种表现层技术,如:JSP 、 freeMarker等。
5、Struts 2 的输入校验可以指定方法进行校验。
6、Struts 2 提供了全局范围、包范围和Action范围的国际化资源文件管理实现。
Struts 2 体系结构 :
1、Web浏览器请求一个资源。
2、过滤器Dispatcher查找方法,确定适当的Action。
3、拦截器自动对请求应用通用功能,如验证和文件上传操作。
4、Action的execute方法通常用来存储和重新获得信息。
5、结果被返回到浏览器。
搭建Struts 2 开发环境
1、找到开发Struts 2的应用需要用到的jar包。
2、编写Struts 2的配置文件。
3、在web.xml中加入Struts 2 MVC启动框架配置。
开发Struts 2 至少用到的jar文件:
Struts-core-2.x.x.jar : Struts 2 框架的核心类库
xwork-2.x.x.jar : XWork类库,Struts 2 在其上构建
ognl-2.6.x.jar : Object Graph Navigation Language , Struts 2 框架通过其读写对象的属性。
freemarker-2.3.x.jar : Struts 2 的UI标签的模版使用 Freemarker编写。
commons-logging-1.1.x.jar : ASF出品的日志包。
commons-fileupload-1.2.1.jar : 文件上传组件。
Struts 2 各种中文件详解:
1、struts.xml文件
struts.xml需要存放在WEB-INF/classes下,模板如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation// DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
</struts>Struts.xml是 Struts 2 的核心配置文件,主要用于配置开发人员编写的action。
2、web.xml文件
在Struts 2中,Struts框架是通过Filter启动的,他在web.xml中的配置如下:
<!--
配置Struts2 核心 Filter
-->
<
filter
>
<
filter-name
>struts2
</
filter-name
>
<
filter-class
>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</
filter-class
>
</
filter
>
<
filter-mapping
>
<
filter-name
>struts2
</
filter-name
>
<
url-pattern
>/*
</
url-pattern
>
</
filter-mapping
>
在StrutsPrepareAndExecuteFilter的init()方法中将会读取类路径下默认的配置文件struts.xml完成初始化操作。
注意:struts 2 读取到 struts.xml的内容后,以javabean形式存放在内存中,以后Struts 2对用户
的每一次请求处理将使用内存中的数据。
Filter 过滤器是用户请求和处理程序之间的一层处理程序。它可以对用户请求和处理程序响应的类容进行处理,通常用于权限、编码转换等场合。
3、ActionSupport 类
ActionSupport 类为 Action 提供了一些默认实现,主要包括预定义常量、从资源文件中取文本资源、接收验证错误信息和验证的默认实现。
Struts 2 数据验证及验证框架的应用:
1、数据校验
Action 继承了 ActionSupport 类 ,而该类实现了 Action 、Validateable 、 ValidationAware 、TextProvider、LocaleProviderSerializable 接口。
在Validateable 接口定义了一个 validate() 方法 , 在用户自定义 Action 类中重写该方法就可以实现 验证功能。
class LoginAction
extends
ActionSupport
{
private
String username ;
public
String getUsername() {
return
username;
}
public
void
setUsername(String username) {
this.username =
username;
}
@Override
public String execute()
throws
Exception {
//
TODO Auto-generated method stub
if ( ! username.equals("HelloWorld"
))
{
Map request = (Map) ActionContext.getContext().get("request"
) ;
request.put("name"
, getUsername()) ;
return
SUCCESS;
}
else
return
ERROR ;
}
public
void
validate()
{
//
如果名字为空,则把错误信息天骄的Action类的fileError
if (
this.getUsername() ==
null ||
this.getUsername().trim().equals(""
))
{
addFieldError("username" , "名字不能为空"
) ;
}
}
}
在类中定义了校验方法后,该方法会执行系统的 execute() 方法之前执行。如果执行该方法后,Action类的fieldError中已经包含了数据校验错误信息,将把请求转发到input逻辑视图处,所以在 Action配置中也要配置一下。
<action name = "LoginAction" class = "com.cnblogs.jbelial.login.LoginAction" >
<!-- 定义3个逻辑视图和物理资源之间的映射 -->
<result name = "input">/login.jsp</result>
<result name = "error">/error.jsp</result>
<result name = "success">/main.jsp</result>
</action>注意:
result中的name属性有下:
1、success : 表示请求处理成功,该值也是默认值。
2、error :表示请求处理失败。
3、none :表示请求处理完成后不跳转到任何页面。
4、input :表示输入时如果验证失败应该跳转到什么地方。
5、login :表示登录失败后跳转的目标。
2、Struts 2 验证框架的应用
Struts 2 提供了大量的数据校验器,包括表单域校验器和非表单域校验器。
(1)必填字符串校验器
该校验器的名字是 requiredstring 其校验规则定义文件如下:
xml version="1.0" encoding="UTF-8"
?>
<!
DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
"http://struts.apache.org/dtds/struts-2.1.dtd"
>
<
validators
>
<
field
name
= "username"
>
<!--
需要验证的字段的字段名
-->
<
field-validators
type
= "requiredstring"
>
<!--
去空格
-->
<
param
name
= "trim"
>true
</
param
>
<!--
错误提示信息
-->
<
message
>请输入用户名
</
message
>
</
field-validators
>
</
field
>
</
validators
>
文件命名:ActionName-validation.xml:其中ActionName 就是需要校验的用户自定义的Action 类的名字。而且该文件应该与Action 类文件放置在同一路径下。
(2)必填校验器
该校验器的名字就是 required 。该校验器与requiredstring 的差别就是 可以有空字符串。配置如下:
xml version="1.0" encoding="UTF-8"
?>
<!
DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
"http://struts.apache.org/dtds/struts-2.1.dtd"
>
validators
>
需要验证的字段的字段名
-->
<
field
name
= "username"
>
field-validators
type
= "required"
>
错误提示信息
-->
message
>请输入用户名
</
message
>
field-validators
>
field
>
validators
>
(3)整数校验器
该校验器的名字为 int ,该校验器要求字段的整数值必须在一定范围内。配置如下:
xml version="1.0" encoding="UTF-8"
?>
<!
DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
"http://struts.apache.org/dtds/struts-2.1.dtd"
>
<
validators
>
<!--
需要验证的字段的字段名
-->
<
field
name
= "number"
>
<
field-validators
type
= "int"
>
<!--
数值的最小值
-->
<
param
name
= "min"
>50
</
param
>
<!--
数值的最大值
-->
<
param
name
= "max"
>100
</
param
>
<!--
错误提示信息
-->
<
message
>大小必须在50至100之间
</
message
>
</
field-validators
>
</
field
>
</
validators
>
(4) 日期校验器
该校验器的名字是 date , 该校验器要求字段的日期值必须在指定范围类,所以也有 min 和 max 参数。配置格式:
xml version="1.0" encoding="UTF-8"
?>
<!
DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
"http://struts.apache.org/dtds/struts-2.1.dtd"
>
<
validators
>
<!--
需要验证的字段的字段名
-->
<
field
name
= "date"
>
<
field-validators
type
= "date"
>
<!--
时间的最小值
-->
<
param
name
= "min"
>1900-01-01
</
param
>
<!--
时间的最大值
-->
<
param
name
= "max"
>9999-01-01
</
param
>
<!--
错误提示信息
-->
<
message
>时间必须在1900-01-01至9999-01-01之间
</
message
>
</
field-validators
>
</
field
>
</
validators
>
(5) 邮件地址校验器
该校验器的名称是 email ,该校验器要求字段的字符如果非空,就必须是合法的邮件地址。格式如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<validators>
<!-- 需要验证的字段的字段名 -->
<field name = "email">
<field-validators type = "email">
<!-- 错误提示信息 -->
<message>邮箱地址无效</message>
</field-validators>
</field>
</validators>(6) 网址校验器
该校验器的名称是 url , 该校验器要求字段的字符如果非空,就必须是合法的URL地址 。 格式 和 (5)邮箱校验器类似。
(7) 字符穿长度校验器
该校验器的名称是 stringlength ,该校验器要求字段的字符长度必须在指定的范围之间 ,所以它有 minLength 和 maxLength 两个参数。它的个数如 (3)整数校验器 类似。
(8) 正则表达式校验器
该校验器的名称是 regex ,它检查被校验字段是否匹配一个正则表达式。
3、Struts 2 拦截器:
Struts 2 框架的绝大部分功能是通过拦截器来完成的,当FilterDispatcher拦截到用户请求后,大量拦截器将会对用户请求进行处理,然后调用用户自定义的Action 类中的方法来处理请求。
拦截器的配置:
在struts.xml文件中来定义的,使用<interceptor.../>元素,格式如下:
<interceptor name = "拦截器名" class = "拦截器实现的类">
<param name = "参数名">参数值</param>
</interceptor>
其中<param.../>可以省略,但在有的时候就需要为其传入拦截器参数。
有时候一个Action要配置不只一个拦截器,往往多个拦截器一起使用来进行过滤。这时候就要配置几个拦截器组成的拦截器栈。定义拦截器栈用
<interceptor-stack.../>,格式如下:
<interceptor-stack name = "拦截器栈名">
<interceptor-ref name = "拦截器一"></interceptor-ref>
<interceptor-ref name = "拦截器二"></interceptor-ref>
<interceptor-ref name = "拦截器三"></interceptor-ref>
</interceptor-stack>
注意:在配置拦截器栈时,用到的拦截器必须是已经存在的拦截器。拦截器栈也可以引用拦截器栈。
拦截器实现类:
Struts 2 提供了一些接口或类供程序员自定义拦截器。如:com.opensymphony.xwork2.interceptor.Interceptor 接口。
该接口中有三个方法:
void init () :用于初始化资源。
String intercept (ActionInvocation invocation) :用于实现拦截的动作。
destroy () :用于销毁在init()方法中打开的资源。
http://www.cnblogs.com/jbelial/archive/2012/05/10/2486886.html
struts2 基础学习的更多相关文章
- Struts2基础学习2
Struts2基础学习2 项目结构,测试页面与实体类 <%@ page language="java" contentType="text/html; charse ...
- Struts2基础学习总结
引用自:http://www.cnblogs.com/jbelial/archive/2012/05/10/2486886.html Struts 2是在WebWork2基础发展而来的. 注意:str ...
- struts2基础学习--环境配置(*原创)
1) -->下载开发包,网址:http://struts.apache.org/download.cgi 本文使用的是struts-2.5.2-all开发包 2) -->导入jar包,具体 ...
- Struts2基础学习(八)—Struts2防止表单重复提交
一.原因 用户重复提交表单在某些场合将会造成非常严重的后果.例如,在使用信用卡进行在线支付的时候,如果服务器的响应速度太 慢,用户有可能会多次点击提交按钮,而这可能导致那张信用卡上的金额被消 ...
- Struts2基础学习(七)—值栈和OGNL
目录: 一.值栈 二.OGNL表达式 一.值栈(ValueStack) 1.定义 ValueStack贯穿整个Acton的生命周期,每个Action类的对象实例都拥有一个ValueStack ...
- Struts2基础学习(六)—文件的上传和下载
一.文件的上传 1.单个文件上传 Struts2使用拦截器完成了文件的上传,而且底层使用的也是FileUpload开源组件. 客户端注意事项: (1)method="post&qu ...
- Struts2基础学习(五)—拦截器
一.概述 1.初识拦截器 Interceptor 拦截器类似前面学过的过滤器,是可以在action执行前后执行的代码,是我们做Web开发经常用到的技术.比如:权限控制.日志等.我们也可以将多 ...
- Struts2基础学习(四)—类型转换器和数据校验
一.自定义类型转换器 1.概述 Struts2提供了常规类型转换器,可以用于常用数据类型的转换,但如果目标类型是一个特殊类型,则需要自定义转换器.Struts2 类型转换器实际上都是基于OG ...
- Struts2基础学习(三)—Result和数据封装
一.Result Action处理完用户请求后,将返回一个普通的字符串,整个普通字符串就是一个逻辑视图名,Struts2根据逻辑视图名,决定响应哪个结果,处理结果使用<result&g ...
随机推荐
- VMware Workstation安装CentOs7固定ip地址
今天发现之前hypervisor配置的CentOs7连接不了了,该死的加密系统和杀毒软件又搞事情了,于是决定试下VMware虚拟机,下载安装后,发现可以连上CentOS7界面,很开心,于是决定把之前的 ...
- nbench
http://www.math.utah.edu/~mayer/linux/bmark.html nbench-byte-2.2.3 --> http://www.math.utah.edu/ ...
- alert(1) to win
一. function escape(s) { return '<script>console.log("'+s+'");</script>'; } 两种思 ...
- Wannafly挑战赛27 D绿魔法师
链接Wannafly挑战赛27 D绿魔法师 一个空的可重集合\(S\),\(n\)次操作,每次操作给出\(x,k,p\),要求支持下列操作: 1.在\(S\)中加入\(x\). 2.求\[\sum_{ ...
- Zabbix通过邮件发送Screen图形报表实现
在使用Zabbix的过程中,我们通常会建立一些需要的Screen图形报表来汇总需要监控的Graph. 而下面的两个脚本,则是通过从Zabbix数据库中获取所有的Screen图形参数,提供Zabbix的 ...
- Jenkins 使用python进行调度,并下载apphost上的安装包
在持续集成的过程中,Jenkins工具是我们必须要会用的工具,那么今天分享一个使用python对Jenkins进行调度的案例 使用的是python-jenkins 库,借用selenium登陆jenk ...
- 对webpack的初步研究4
Mode string module.exports = { mode: 'production' }; webpack --mode=production The following string ...
- Eclipse 4.9 创建springboot项目步骤
上一篇文章写了eclipse安装STS. 现在创建Spring Starter Project 具体步骤如下: 1.等你安装好STS后,就在Eclipse > File >New 选择 ...
- [CF959C]Mahmoud and Ehab and the wrong algorithm
解法 很简单对于n<=5举不出反例 如果n>5的话2,3,4好点连1,其他点连2 对于正面例子 直接所有点连1号点 其实就是结论题 代码: #include <cstdio> ...
- spring+hibernate单元测试案例
1,maven创建web工程 2,导入相关依赖 pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmln ...