struts2——输入校验
输入校验是是数据进入数据库的最后一道屏障,这就需要程序员对用户的输入进行必要的判断。虽说javascript也可以对输入的数据进行校验,可是只要用户屏蔽了javascript,客户端的输入校验就失去了功能,所以服务器的输入校检就成了最后的屏障。
1、struts2本身自带了输入校验,可以执行一下上次的程序,将年龄输入为abc,结果如下
(要在struts.xml文件中配置<result name="input">/input.jsp</result>)
可见,struts2可以对与类型不符合的数据情景自动校验。
2、(全局输入校验)通过国际化资源文件修改错误提示信息
虽说struts2可以对类型进行自动校验,可是它的提示不是很友好,比方说,
Invalid field value for field "startDate".所以我们应当自定义错误提示信息。
(1)、要在struts.xml文件中增加
<constant name="struts.custom.i18n.resources" value="message"></constant>
这个标签的用处是将struts2内置的内容修改为自定义的内容,name属性是所要替换的内容,value属性是替换的内容
(2)、message文件的配置即为
message.properties
文件路径:该配置文件在src的根目录下,即为在WEB-INF的classes下面
文件名称:message.properties
文件格式:
xwork.default.invalid.fieldvalue={0}自定义的内容(
{0}表示发生类型转换错误的属性,但是它取得的是属性的名字,一般还是不太友好,比如说startDate,并不能表示出开始日期。
自定义的内容为显示的错误内容)
例: xwork.default.invalid.fieldvalue={0}input error
可以看出,错误提示已经变成我们所定义的。不过这是全局的输入校验。
3、局部的输入校验针对于某一个特定的action类,该文件的位置应当同校验的action类位于同一目录下
文件名:针对于特定的action类名.properties
例:我要针对于年龄和坐标做局部类型转化,
PointAction.properties
文件内容:
invalid.fieldvalue.age = age error1
invalid.fieldvalue.point = point error1
局部校验优先于全局校验。
4、写一个程序来运用输入校验
(1)、写一个register.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>注册</title>
</head>
<body>
<center>
<s:form action="register">
<s:textfield name="username" label="用户名"></s:textfield>
<s:password name="password" label="密码"></s:password>
<s:password name="repassword" label="重复密码"></s:password>
<s:textfield name="age" label="年龄"></s:textfield>
<s:textfield name="birthday" label="出生日期"></s:textfield>
<s:textfield name="graduation" label="毕业时间"></s:textfield>
<s:submit value="注册"></s:submit>
</s:form>
</center>
</body>
</html>
(2)、写一个RegisterAction
package com.song.action;
import java.util.Date;
import com.opensymphony.xwork2.ActionSupport;
public class RegisterAction extends ActionSupport {
private String username;
private String password;
private String repassword;
private int age;
private Date birthday;
private Date graduation;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getRepassword() {
return repassword;
}
public void setRepassword(String repassword) {
this.repassword = repassword;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public Date getGraduation() {
return graduation;
}
public void setGraduation(Date graduation) {
this.graduation = graduation;
}
@Override
public String execute() throws Exception {
return SUCCESS;
}
@Override
public void validate() {
if(null==username||username.length()<=6||username.length()>=10)
{
this.addFieldError("username","用户名长度不符合");
}
if(null==password||password.length()<=6||password.length()>=10)
{
this.addFieldError("password","密码长度不符合");
}
if(!password.equals(repassword))
{
this.addFieldError("password","两次输入的密码不一致");
}
if(age<=0||age>=150)
{
this.addFieldError("age","年龄不合逻辑");
}
if(graduation.before(birthday))
{
this.addFieldError("birthday","请检查你的输入!");
}
}
}
validate()方法是用于校验的。不要忘记配置struts.xml文件的input返回值
遇到类型转换错误的时候(也就是说不能进行类型转换),struts2框架自动生成一条错误信息,并且将该错误信息放到addFieldError里面
类型转换与输入校验的流程
1. 首先Struts2对客户端传来的数据进行类型转换
2. 类型转换完毕后再进行输入校验
3. 如果类型转换和输入校验都没有错误发生,那么进入execute方法(调用商业逻辑)
注意:如果类型转换不成功,也同样要进行输入校验
分享到:
相关推荐
- **Validation Framework for Struts**:提供了验证机制,可以对用户输入进行校验,确保数据的正确性,防止非法数据进入系统。 通过这个教程,读者将了解Struts框架的基本概念、工作原理以及如何配置和使用Struts...
本学习笔记中包含的两个文档——"04校验框架.doc"和"03输入校验.doc",分别详细介绍了这两个主题。"04校验框架.doc"可能涵盖了Struts2校验框架的基本用法,包括XML配置、自定义校验规则、错误处理等方面的内容。而...
对于安全性,Struts2 提供了内置的拦截器来实现输入校验和防止常见的Web攻击,例如XSS(跨站脚本攻击)和CSRF(跨站请求伪造)。拦截器可以在请求到达Action之前进行校验,如果校验未通过,则可以终止请求的进一步...
- **Struts2** 支持更加强大和灵活的表达式语言——OGNL(Object Graph Navigation Language)。OGNL不仅支持基础的对象图遍历,还支持对集合和索引属性的深入操作,使得页面逻辑更加丰富和直观。 #### 六、类型转换...
- **Struts2**同样支持JSTL标签库,同时提供了更为强大的表达式语言——Object Graph Notation Language (OGNL),这使得开发者在处理复杂数据结构时更加方便。 #### 页面导航机制 - **Struts1**依赖于标准的JSP页面...
总结来说,"struts2+hibernate整合例子——新闻管理系统"是一个典型的Java Web应用示例,展示了如何利用Struts2的MVC模式和Hibernate的ORM能力,实现对新闻数据的CRUD操作及高级查询。这个系统可能包含了Action类、...
开发者可以创建ActionForm类来收集、校验和传递用户输入的数据。 5. **Tiles框架集成**:Struts框架常与Tiles插件结合使用,提供更复杂的视图布局。Tiles允许你定义可重用的页面片段,然后组合成完整的页面,提高了...
输入校验 ————复习前面的 10.Struts2_04_validate_method ????????????? validateXXX方法校验得到的错误信息先显示出来,然后才是validate方法校验的字段错误信息 validate方法在...
输入校验 ————复习前面的 10.Struts2_04_validate_method ????????????? validateXXX方法校验得到的错误信息先显示出来,然后才是validate方法校验的字段错误信息 validate方法在...
- **第6章Struts2的输入校验**:介绍如何利用Struts2内置的验证机制确保用户输入的有效性和安全性。 - **第7章上传和下载文件**:讨论文件上传和下载功能的实现方法,包括如何处理大文件、分片上传等。 - **第8章...
- **Struts2**:Struts2提供了更强大的校验框架——XWork,支持属性级和链式校验,使得校验逻辑更加灵活和强大。 #### Action执行控制 - **Struts1**:Struts1支持每个模块拥有单独的Request Processors,但同一...
输入校验 ————复习前面的 10.Struts2_04_validate_method ????????????? validateXXX方法校验得到的错误信息先显示出来,然后才是validate方法校验的字段错误信息 validate方法在...
输入校验 ————复习前面的 10.Struts2_04_validate_method ????????????? validateXXX方法校验得到的错误信息先显示出来,然后才是validate方法校验的字段错误信息 validate方法在...
Struts2是一个强大的MVC(Model-View-Controller)框架,广泛应用于Java Web开发中,为开发者提供...同时,这也为你提供了实践Struts2拦截器、参数校验、页面交互等技术的机会,对于提升你的Java Web开发技能大有裨益。
在Struts2框架中,我们首先需要了解的是其核心概念——Action类。Action类是业务逻辑的载体,负责处理用户的请求。在“Struts2实例4”中,可能涉及创建一个自定义的Action类,该类通常继承自`...
- **输入校验**:提供了一套强大的验证机制,可以在表单提交后验证用户输入,确保数据的正确性。 - **上传下载**:支持文件上传和下载功能,简化了处理文件上传的复杂性。 - **拦截器**:通过拦截器链,可以添加...
描述中提到的“Struts2技术内幕——深入解析Struts2架构设计与实现原理及Java编程思想”,表明了文档内容会涉及对Struts2框架架构层面的深入探讨,包括它的核心组件、工作流程、请求处理机制以及与其他Java技术的...
#### 五、输入校验配置 为了实现更细致的输入验证,可以使用Struts2提供的验证机制。通过定义验证文件 `.xml` 来实现。 **Logon-validation.xml** ```xml <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//...