首先,要了解Struts2框架中参数传递的大体流程:

服务器端的Web容器收到用户的请求(URL)——Struts2的核心控制器FilterDispatcher接受用户发起的请求,然后判断这个请求是交给action还是交给web组件来处理;如果请求的action或web组件不存在,就会报错404。在整个处理过程中,需要一个辅助对象: ActionMapper ,它会确定调用哪个Action——相应的action会根据struts.xml的配置信息(首先执行拦截此action的所有拦截器,然后再执行请求的action对象;在这个处理过程中需要辅助对象:Action代理类ActionProxy)配置管理器(ConfigurationManager)——Action执行完毕之后,返回一个结果(此结果用字符串来表示),这个结果经过拦截Action的所有拦截器之后,返回给主控制器。主控制器根据此结果从配置文件中找到真正的路径,然后将请求转发给相应的视图。视图根据持久层作出相应的反应。整个参数传递的流程就结束了。

其次,导入Struts所需的jar文件。

Struts2要使用一些jar包文件,开发业务需求不一样,所需的包配置也不一样,以下这些包是最基本的,(一般情况下这些包也够用了),所需包的放置位置是\WebRoot\WEB-INF\lib:

其中

struts-core-2.jar 是Struts 2 框架的核心类库
  xwork-core.jar 是XWork类库,Struts 2 在其上构建
  ognl.jar 是 Object Graph Navigation Language , Struts 2 框架通过其读写对象的属性。
  freemarker.jar 是Struts 2 的UI标签的模版使用 Freemarker编写。
  commons-logging.jar 是ASF出品的日志包。
  commons-fileupload.jar 是文件上传组件。

导包完成后要创建Struts.xml,这是Struts 2 的核心配置文件,主要用于配置开发人员编写的action。

该配置文件通常放在src下,下面通过一个Struts.xml文件,详细分析一下这个核心配置文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""http://struts.apache.org/dtds/struts-2.3.dtd"><struts><!-- package:包.structs2使用package来组织 name 属性:用于其他的包应用当前的包(必填属性) extends:当前包继承哪个包,继承的,即可用继承其中的所有的配置,通常情况下继承struts-default struts-default这个包在struts-default.xml文件中定义 namespace 属性是可选的,如果它没给出,则以“/”为默认值.若namespace有一个默认值,则要想调用这个包里的Action 就必须把这个属性所定义的命名空间添加到有关的UR字符串中 --><package name="helloworld" extends="struts-default"><!-- 配置一个action:一个struts2的请求就是一个action name:对应一个struts2的请求的名字,不包含扩展名 class:com.opensymphony.xwork2.ActionSupport method 默认值:execute --><action name="product-input" class="com.opensymphony.xwork2.ActionSupport"method="execute"><!-- result:结果.表示action方法执行后可能返回一个结果,所以一个action节点可能会有多个result子节点. 多个result子节点使用name属性区分 name:表示一个result 和action方法的返回值对应 默认值为success type:表示结果类型,默认值为dispatcher(转发到结果) --><result name="success" type="dispatcher">/WEB-INF/pages/xxx.jsp</result></action><!-- class = "xxxx" 对应请求的包名加类名 --><action name="product-save" class="xxxx" method="save"><result name="detais">/WEB-INF/pages/xxxx.jsp</result></action></package>
</struts>

在Struts 2中,Struts框架是通过Filter启动,在web.xml中必须有相应的配置:

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

struts 2 在读取到 struts.xml的内容后,以javabean形式存放在内存中,以后Struts 2对每一次请求处理将使用内存中的数据。

Struts2提供了大量的数据校验器,有两种方法进行数据的校验:
1, 编码方式校验:
Action继承自ActionSupport,针对某个要进行校验的请求处理方法编写一个 public void validateXxx()方法,在方法内部进行表单数据校验.这种方法不提倡,和主代码容易造成代码混乱而且不易重用,需要为每个需要的地方加校验。
2,XML配置的方法校验:
针对要校验的Action类,在同包下编写一个名为:Action类名-validation.xml校验规则文件,这种是比较常用的,
命名规则:ActionName-validation.xml,其中ActionName是Action类的名字;
输入校验失败后,和类型转换一样,会将错误封装成fieldError,并放入Action Context中,因此在JSP中添加<s:fielderror/>可显示错误,此内容也是我们在数据校验文件中配置的;
例如:必填校验器
对登录用户名进行非空验证:

<validators> <!-- 需要验证的字段的字段名 -->  <field name = "username"><field-validators type = "required"> <!-- 错误提示信息 --><message>请输入用户名</message></field-validators></field>
</validators>

年龄合法性验证:

 <validator type="int">  <param name="fieldName">age</param>  <param name="min">0</param>  <param name="max">150</param>  <message>年龄范围在0-150之间</message>  </validator> 

日期验证(包括输入的是否 是date类型以及输入的日期是否合法)

<validators><!-- 需要验证的字段的字段名 --><field name = "date"><field-validators type = "date"> <!-- 时间的最小值 --><param name = "min">2000-01-01</param><!-- 时间的最大值 --><param name = "max">2017-05-04</param><!-- 错误提示信息 --><message>时间必须在2000-01-01至2017-05-04之间</message></field-validators></field>
</validators>


同时,struts2还提供了很多内置的校验器,可以直接使用:

1. required校验器
此校验器要求字段必须为非空;
 
2 .requiredstring校验器
此校验器要求检验字符串非空并且必须长度大于0,即不能是""
可选参数为:
(1)trim:如果为true,则将前后的空白去掉,类似于String的trim函数;
 
3. int校验器
此校验器要求整数限定在一定范围之内;
可选参数为:
(1)min:最小值;
(2)max:最大值;
 
4. date校验器
要求日期在一定范围之内;
可选参数:
(1)min:最小日期;
(2)max:最大日期;
 
5. fieldexpression校验器
要求此校验器满足指定的逻辑表达式;
可选参数:
(1)expression:逻辑表达式;格式为:<![CDATA[(逻辑表达式)]]>
 
6. email校验器
要求字段一定要满足电子邮箱格式;
 
7. url校验器
要求字段格式满足URL格式;
 
8. stringlength校验器
要求字段是string,并且长度在一定范围之内;
可选参数:
(1)trim:删除前后空白;
(2)minLength:最小长度;
(3)maxLength:最大长度;
 
9. regex校验器
要求满足给定的正则表达式;
可选参数:
(1)expression:给出正则表达式;格式如:<![CDATA[(正则表达式)]]>
(2)caseSensitive:是否区分大小写;

例如,当我们要验证邮箱时,不需要自己做验证,

<validators><!-- 需要验证的字段的字段名 --><field name = "email"><field-validators type = "email">  <!-- 错误提示信息 --><message>邮箱地址无效</message></field-validators></field>
</validators>

Struts2框架基础篇相关推荐

  1. Bootstrap框架(基础篇)之列表,表格,表单

    继续上篇的基础部分延伸,主要说一下列表,表格,表单相关Bootstrap框架变化以及基础知识. 1.列表篇 除了HTML提供的三种基本列表样式: 无序列表 <ul><li>-& ...

  2. RobotFramework功能自动化测试框架基础篇

    目录 概念 特性 RF环境安装 RF的使用 1.新建项目 2.创建测试套件 3.创建测试用例 4.创建资源文件 5.页面操作介绍 RF的常用类库 1.标准库: 2.扩展库: 准备UI自动化测试的环境 ...

  3. pytest自动化测试框架基础篇

    一.单元测试框架 1.什么是单元测试框架 单元测试框架是在自动化测试或者白盒测试中对软件的最小单元(函数,方法)进行测试的框架. 2.单元测试框架分类 python:unittest.pytest 3 ...

  4. Struts框架基础篇

    <script type="text/javascript"> google_ad_client = "pub-8800625213955058"; ...

  5. 超详细的Java面试题汇总(基础篇+框架篇)

    Java面试题汇总-基础篇 1.面向对象是什么? 答:面向对象是一种思想,世间万物都可以看做一个对象,这里只讨论面向对象编程(OOP),Java是一个支持并发.基于类和面向对象的计算机编程语言,面向对 ...

  6. Spring整合Struts2框架的第一种方式(Action由Struts2框架来创建)。在我的上一篇博文中介绍的通过web工厂的方式获取servcie的方法因为太麻烦,所以开发的时候不会使用。...

    1. spring整合struts的基本操作见我的上一篇博文:https://www.cnblogs.com/wyhluckdog/p/10140588.html,这里面将spring与struts2 ...

  7. 修改pom文件_自动化测试基础篇:Selenium 框架设计(POM)

    (给Python开发者加星标,提升Python技能) 来源:  叁藏法师 https://www.cnblogs.com/sanzangTst/p/8376550.html [导语]Selenium是 ...

  8. 2020_12-电路理论框架复习思考-基础篇

    2020_12-电路理论框架复习思考-基础篇 电路理论究竟在学些什么?我认为本质上,是线性拓扑结构,KCL,KVL和V-I关系,于是,在电阻电路部分,有它的拓扑结构带来的各种性质和运算方式,包括结点方 ...

  9. react ui框架_Web开发 React 学习(二十)连载基础篇大结局

    系列文章: 测开技能--Web开发 React 学习(一) 测开技能--Web开发 React 学习(二)环境搭建 测开技能--Web开发 React 学习(三)元素的渲染 测开技能--Web开发 R ...

最新文章

  1. 【BZOJ】3524 [POI2014] Couriers(主席树)
  2. 静电对于机电设备的影响
  3. react中axios的二次封装
  4. Python 06-字典
  5. split函数python 未定义_python split函数基本用法
  6. asp.net html helper,6. ASP.NET MVC 5.0 中的HTML Helper【HTML 帮助类】
  7. java拷贝构造函数
  8. 【easy!】LeetCode 14. Longest Common Prefix
  9. 2017java面试_2017 Java面试大全(一)
  10. SEO HTML语义化
  11. 百度文库免费下载方法
  12. MATLAB调用电脑摄像头前安装图像采集工具箱硬件支持包
  13. Linux T恤设计大赛 “飞企鹅”获奖
  14. ProxySQL 配置详解及读写分离(+GTID)等功能说明 (完整篇)1
  15. 数据可视化--实验4
  16. supervisor+cesi多服务器进程集中管理
  17. 【Love2d从青铜到王者】第十三篇:Love2d之游戏:射击敌人(Game: Shoot the enemy)
  18. 最笨的办法处理wos国家字段
  19. 手机耳塞 录音同时外放_如何将Android手机切换为“单声道”(这样就可以戴一副耳塞)
  20. 关于aop,AOP的应用场景?什么事AOP?

热门文章

  1. 摘得“2019最佳智能手机”大奖的华为P30系列究竟比iPhone XS系列强在哪
  2. 618哪家空调最受欢迎?格力奥克斯互撕 友商却笑到最后
  3. 拳王虚拟项目公社:虚拟资源如何挣钱,小白月入过万的操作思路
  4. 接口测试很难吗?教你用Postman实用代码实现时间戳加密
  5. 初中数学最全几何模型_老师熬夜整理:初中数学最全几何模型大汇总,学生大呼“过瘾”...
  6. opencv图像-拼接线的处理
  7. 使用StarUML生成live555类图
  8. Linux su和sudo命令的区别,并获得root权限
  9. java中 static变量和方法到底是存在内存什么区域?
  10. python判断linux中文件是否存在_linux shell 中判断文件、目录是否存在的方法