电商网站建设 猪八戒网,企业宣传画册制作,互联网公司排名对比,wordpress 文库上一篇#xff1a;开发者导航#xff1a;Struts2学习笔记第2天-CSDN博客
1 多个struts配置文件
多个struts配置文件的用途是为了模块开发和减少开发中的冲突
减少开发中的冲突 模块开发
只有一个struts.xml的配置 多个struts的文件开发
struts.xml struts-order.xml: 2 …上一篇开发者导航Struts2学习笔记第2天-CSDN博客
1 多个struts配置文件
多个struts配置文件的用途是为了模块开发和减少开发中的冲突
减少开发中的冲突 模块开发
只有一个struts.xml的配置 多个struts的文件开发
struts.xml struts-order.xml: 2 Action接收请求参数的方式
我们以一个简单的登录案例来讲解
2.1 通过以前的Servlet来获取
login.jsp UserAction Struts.xml 2.2 通过Action的属性的set方法注入
struts会通过表单字段的名称调用set方法比如username字段会调用setUsername
UserAction 2.3 通过Action的属性的set模型的形式注入
User.java模型:提供属性的get/set方法 UserAction.java
把参数封装到一个User模型中然后Action提供模型的get/set方法 Index.jsp 补充讲解下面set/get方法打印顺序的原因
先获取user对象如果没有创建一User对象注入进去 2.4通Action模型驱动封装参数
index.jsp UserAction.java 2.5 参数注入的原理
参数会自动注入是因为有两个拦截器在工作查看struts-default.xml源码可以看到下面两个拦截器interceptor nameparams classcom.opensymphony.xwork2.interceptor.ParametersInterceptor/interceptor namemodelDriven classcom.opensymphony.xwork2.interceptor.ModelDrivenInterceptor/
修改包下的拦截器 ModelDrivenInterceptor源码 2.6 静态参数注入【少用】
struts学可以通过在action中静态注入参数然后在Action提交属性注入这种是静态流入参数写死 3 用户注册案例
表现层web
第一步在mysql中添加一个struts2_day3数据库把db.sql的表创建下
注数据库需要utf-8编码的才可以存储中文
第二步将资料中db文件夹的jar导入到项目工程中
这里的数据源使用DBCPDataBase Connection Pool 是apache公司实现的一个开源的数据源。
第三步将资料中db文件夹的dbcpconfig.properties导入src项目下
第四步将DBCPUtil.java写好的导入在项目中
第五步写webcontent中写个注册页面 第六步写个UserAction使用模型驱动来接收参数
User.java UserAction.java 第七步配置struts.xml 持久层dao和Service层
UserDao实现类 UserService实现类 UserAction 的register方法修改
struts自定义参数类型转换
前面的多个爱好请求参数struts框架会自动进行字符串的拼接如拼接成【泡妞, 写代码, 买房子】是以逗号空格类型来拼接的 提交生日时是以2017-08-09的格式提交的struts也会把字符串转成Date类型这些都是struts做的类型转换
但是如果提交的08/09/2017,struts就会报错【错误的日期表达】 struts有很多类型转换器 struts的字符串类型转换是由com.opensymphony.xwork2.conversion.impl.StringConverter类来完成的
日期类型转换是由com.opensymphony.xwork2.conversion.impl.DateConverter来完成
源码分析得出如果要自己写一个类型转换
可以实现DefaultTypeConverter抽象类我们一般也可以用它的子类StrutsTypeConverter来实现
自定义日期类型转换步骤
第一步写一个类继承StrutsTypeConverter,并实现抽象方法
第二步实现两个抽象方法的逻辑 第三步配置局部类型转换器
在模型pojo的包下配置【模型名字-conversion.properties】的一个文件内容如下 第四步测试自定义日期是否生效 第五步配置全部类型转换器
在类的根路径配置一个xwork-conversion.properties文件key为数据类型全类名value为类型转换器的全类名
struts的错误回显
前提将前面用户注册案例的时间转化时抛出运行时异常 注册时将日期写错格式会得到下面的一个结果result input表示需要一个回显页面也就是发生异常时的显示页面 在struts.xmp中配置回显页面 在register.jsp中添加struts的标签 回显效果 struts的form表单标签
struts的from标签提供了和原始html表单几乎一至的属性
属性
Action 请求地址。直接写动作名称不用写contextPathmethod 请求方式默认的是post请求可以不用写enctype 静音编码的MIME类型
案例将前面的用户注册案例改成struts的表单标签来显示
register2.jsp代码 strtus的错误处理和中文显示
struts标签如果有字段错误会回显信息
设置回显信息为红色
添加个s:head标签即可 效果 设置回显信息中文化
在模型的包中添加一个模型properties配置key value
key格式为下面的invalid.fieldvalue.字段名 效果 struts的表单数据验证方式
1 服务端Action验证
有两种方法如果图 效果 2 xml声明式验证
全局声明方式
在action包中声明UserAction-validation.xml文件这种方式配置是全局配置所有action的方法都会拦截验证如果其它方法不想验证可配置SkipValidation注解dtd约束可以在xwork-core的jar包中找 struts默认有很多种验证器类型声明在default.xml中
注意default.xml的位置 演示密码不能大于6的配置 局部声明方式
在action包中声明UserAction-register-validation.xml文件 声明方式 【Action类名-方法名-validation.xml】xml内容与上面的一样
3 验证器案例综合
Add.Jsp页面 student模型
public class Student {private String username;//不能为空去空字符串private int age;//18~100private String email;//正确邮箱格式private String password;//3~8private String repassword;//与密码一至private int score;//必须是自然数private String url;//必须是一个路径private String gender;//性别只有男和女
Action Struts.xml StudentAction-add-validation.xml
validators!--1. private String username;//不能为空去空字符串requiredstring 比 required 好一点会自动去除空格--validator typerequiredstringparam namefieldNameusername/parammessage用户名不能为空/message/validator!--2.private int age;//18~100 1.表单的类型会根据模型的属性类型去校验--validator typeintparam namefieldNameage/paramparam namemin18/paramparam namemax100/parammessage年龄必须在18~100/message/validator!-- 3.private String email;//正确邮箱格式--validator typerequiredstringparam namefieldNameemail/parammessage邮箱不能为空/message/validatorvalidator typeemailparam namefieldNameemail/parammessage邮箱格式不正确/message/validator!--4. private String password;//3~8 --validator typerequiredstringparam namefieldNamepassword/parammessage密码不能为空/message/validatorvalidator typestringlengthparam namefieldNamepassword/paramparam nameminLength3/paramparam namemaxLength8/parammessage密码长度为3~8/message/validator!-- 5.private String repassword;//与密码一至 --validator typeexpressionparam nameexpression![CDATA[ password repassword]]/parammessage密码不一至/message/validator!-- 6.private int score;//必须是自然数regex :正则--!-- validator typeregexparam namefieldNamescore/paramparam nameregexExpression\d/parammessage分数必须要数字/message/validator --!-- private String url;//必须是一个路径 http:// --validator typeurlparam namefieldNameurl/parammessageURL格式不合法以 http://开头/message/validator!-- private String gender;//性别必填只有男和女 --validator typerequiredparam namefieldNamegender/parammessage性别必选/message/validator
/validators