Struts2数据的校验

通常,数据校验在客户端使用javascript来进行的,在这里做的是怎么在服务端使用XML配置文件来校验数据。

1,配置web.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<display-name></display-name>
<welcome-file-list>
<welcome-file>basicInput.jsp</welcome-file>
</welcome-file-list>

<!-- 配置filter -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<!-- 拦截所有的URL用户请求 -->
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

</web-app>

2,配置struts.xm文件

<?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">
<!-- 配置struts2 -->
<struts>
<!-- 配置包,名称为firstStruts -->
<package name="checkdata" namespace="/" extends="struts-default">
<!-- 配置action -->
<action name="questionAction" class="com.xywei.action.QuestionAction">
<!-- 配置返回结果 -->
<result name="success">success.jsp</result>
<result name="input">basicInput.jsp</result>
<result name="error">error.jsp</result>
</action>
</package>
</struts>

3,编写jsp页面

basicInput.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>数据校验基础</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>

<body>
<b>问题:您最喜欢的颜色是什么?请回答:</b>
<s:form method="post" theme="xhtml" action="questionAction.action" namespace="/"
validate="true">
<s:textfield name="name" label="姓名"></s:textfield>
<s:textfield name="age" label="年龄"></s:textfield>
<s:textfield name="answer" label="回答"></s:textfield>
<s:submit value="提交"></s:submit>

</s:form>

</body>
</html>

success.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>My JSP ‘success.jsp‘ starting page</title>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->

</head>

<body>
恭喜你,验证成功!!<br>
name:<%=request.getParameter("name")%>
<br> age:<%out.println(request.getParameter("age"));%>
<br> answer:<%out.println(request.getParameter("answer"));%>

<br>
</body>
</html>

error.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>My JSP ‘error.jsp‘ starting page</title>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->

</head>

<body>
信息错误!
</body>
</html>

4,把struts2用到的相关包都放到lib下面

5,配置使用校验数据的XML文件,命名该文件的规则是:Action类-validation.xml,并且要把该文件放入和action同一目录下,如下面处理的action类为QuestionAction,所以就命名处理数据校验的类为QuestionAction-validation.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator 1.0.2//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
<validators>
<field name="name">
<field-validator type="requiredstring">
<message>必须输入姓名</message>
</field-validator>
</field>
<field name="age">
<field-validator type="int">
<param name="min">18</param>
<param name="max">30</param>
<message>年龄只能是18-30岁之间</message>
</field-validator>
</field>

<field name="answer">
<field-validator type="requiredstring">
<message>不能为空!!</message>
</field-validator>
</field>

</validators>

6,编写Action类

QuestionAction.java

package com.xywei.action;

import com.opensymphony.xwork2.ActionSupport;

@SuppressWarnings("serial")
public class QuestionAction extends ActionSupport {
private int age;
private String answer;
private String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

public String getAnswer() {
return answer;
}

public void setAnswer(String answer) {
this.answer = answer;
}

public String execute() {
if (name.equals("xywei") && age == 23 && answer.equals("wei")) {
return "success";
} else if ((!name.equals("xywei") && !name.equals("")) || (age != 23)
|| (!answer.equals("wei")) && !answer.equals("")) {
return "error";
} else {
return "input";
}
}

}

一共就7个文件,部署到服务器,运行就可以了

注意,比较容易出错的地方是配置XML数据校验文件,旧的版本的头部是这样写的:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">

因为struts2被apache收购了,所以这样写的话,会提示找不到问dtd文件,因此,有两种方法解决

第一种:

在自己电脑的磁盘下面存放xwork-validator-1.0.2.dtd文件,然后把http://www.opensymphony.com/xwork/用你xwork-validator-1.0.2.dtd所在目录替换即可,但是,这种做法不利于程序的移植。

第二种:

这方法我百度了N就才找到,参考这里面的文章http://www.cnblogs.com/javawebsoa/archive/2013/07/18/3199148.html

头部文件这样写就对了:

<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator 1.0.2//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">

时间: 2024-07-30 23:54:51

Struts2数据的校验的相关文章

struts2 之 struts2数据校验

1. 数据校验一般分为2类:前端的校验(js校验),后端的校验(java代码):实际开发中大部分情况下都是采用js校验.在对数据安全要求较高的情况下可能会采用后端验证. 2.  Struts2提供了后端验证机制.有两种方式来实现,一种是通过硬编码来实现,一种是通过校验框架来实现.在struts2如果使用struts2提供校验机制,那么必须继承ActionSuport类.该类中有一个vaildete方法,在处理的action类中重写该方法,那么在执行所有方法的时候,会执行validate方法.va

Struts2数据校验方法

方法: 1.在Action类中execute()方法中进行校验. 优点:Action类无需继承框架中的类. 缺点:(1)当有多个校验时,代码重复,违反高内聚,低耦合. 2.重写框架ActionSupport类中的validate()方法. 优点:包含this.addFieldError()方法,一旦调用,Action结束. 缺点:(1)需要继承框架中的ActionSupport类(侵入性). (2)方法1的(1)缺点. 3.使用多个validateXxx()方法,Xxx为方法名,首字母大写. 优

9.struts2数据校验

手动编码方式: 1.数据校验包含两种方式,第一种是手动编码完成数据校验方式,第二种是通过配置文件完成数据校验方式(重点掌握这种方式). 2.手动编码校验方式 * 开发的步骤 > 步骤一: 封装数据 > 步骤二: 实现校验Action ,必须继承ActionSupport 类 > 步骤三: 覆盖validate方法,完成对Action的业务方法 数据校验 this.addFieldError (ActionSupport提供) > 步骤四: 在jsp中 通过 <s:fieldE

Struts2请求参数校验

校验的分类 客户端数据校验 和 服务器端数据校验 客户端数据校验 ,通过JavaScript 完成校验 (改善用户体验,使用户减少出错 ) 服务器数据校验 ,通过Java代码 完成校验 struts2 支持校验方式 代码校验(用的很少) :在服务器端通过编写java代码,完成数据校验 配置校验(主流):XML配置校验(主流) 和 注解配置校验 代码校验请求参数 步骤一: 封装数据 步骤二: 实现校验Action ,必须继承ActionSupport 类 步骤三: 覆盖validate方法(val

JAVAWEB开发之Struts2详解(二)——Action接受请求参数、类型转换器、使用Struts2的输入校验、以及遵守约定规则实现Struts2的零配置

Action接受请求参数 作为MVC框架,必须要负责解析HTTP请求参数,并将其封装到Model对象中 Struts2提供了非常强大的类型转换机制用于请求数据 到 model对象的封装 Struts2和MVC定义关系 StrutsPrepareAndExecuteFilter:控制器 在Struts2中action是什么?(Struts2是一个MVC框架) V:jsp M:action C:action StrutsPrepareAndExecuteFilter Struts2提供了三种数据封装

Struts2的输入校验(1)——校验规则文件的编写

Struts2的输入校验(1) --校验规则文件的编写 Struts2提供了基于验证框架的输入校验,所有的输入校验只要编写配置文件,Struts2的验证框架将会负责进行服务器校验和客户端校验. 注: 客户端校验:过滤正常用户的误操作,使用JavaScript代码完成: 服务器端校验:组织非法数据的输入,是整个应用的最后防线,在应用中通过编程的方式实现. 使用Struts2的校验框架进行校验时,无须对程序的代码进行改变,只需要编写校验规则文件即可,校验规则文件制定每个表单域应该满足怎样的输入规则.

Struts2框架(8)---Struts2的输入校验

Struts2的输入校验 在我们项目实际开发中在数据校验时,分为两种,一种是前端校验,一种是服务器校验: 客户端校验:主要是通过jsp写js脚本,它的优点很明显,就是输入错误的话提醒比较及时,能够减轻服务器的负担,但是客户端校验并不是安全的,简单来讲就是防君子防不了小人. 服务器端校验:最大特点就是数据安全,但是如果只有服务器端校验,会大大增加服务器端的负担. 所以一般在我们开发中,是客户端和服务器端校验相结合作用的. 那这篇文章,我只讲服务器端校验,在Struts2支持两种校验方式: 代码校验

微信企业号回调模式配置讲解 Java Servlet+Struts2版本 echostr校验失败解决

微信企业号回调模式配置讲解 Java Servlet+Struts2版本 echostr校验失败解决 echostr校验失败,请您检查是否正确解密并输出明文echostr 异常java.security.InvalidKeyException:illegal Key Size 也就是echostr校验失败,请您检查是否正确解密并输出明文echostr这个错误 企业微信登陆地址http://qy.weixin.qq.com/ 配置成功以后 Servlet public void doGet(Htt

用特性来实现数据的校验

在网站开发中,往往需要对用户输入的数据进行校验.而为了保持数据的完整性,我们需要进行客户端和服务端的双重校验.客户端的校验一般由js来完成,本文主要介绍利用特性完成服务器端的数据校验. 什么是特性? 超市中有各种各样的商品,商品上贴有标签.标签上可能有商品的名称,价格,种类等信息.我们要购买一样东西前,一般先会看标签,了解更多的信息.当然主要是价格,万一钱没带够呢?:) 如果把类当做商品,那么特性就是贴在商品上的标签.特性给我们提供了更多类相关的信息.[Serializable] 就是在C#中常