01.创建登录界面
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.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>
<s:form action="user/login" method="post">
<s:textfield name="user.name" label="姓名"/>
<s:textfield name="user.password" label="密码"/>
<s:submit value="登录"/>
<%-- 全局的validate()会拦截我们所有的请求 --%>
<a href="user/change">切换验证码</a>
</s:form>
</body>
</html>
02.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 name="user" namespace="/user" extends="default">
<!-- 登录验证 -->
<action name="login" class="cn.bdqn.action.UserAction" method="login">
<result name="input">/login.jsp</result>
<result>/success.jsp</result>
</action>
<!-- 切换验证码 -->
<action name="change" class="cn.bdqn.action.UserAction" method="change">
<result>/success.jsp</result>
</action>
</package>
</struts>
03.Action
/**
* 验证框架:
* 01.局部验证
* 02.全局验证 使用 validate
* 03.全局验证 使用xml 推荐***
*
*
*/
public class UserAction extends ActionSupport{
private User user; //验证的对象
//默认
public String execute(){
System.out.println("默认执行的execute");
return SUCCESS;
}
//登录的方法
public String login(){
System.out.println("进入了login()");
//如果有错误!
if (hasErrors()) {
return INPUT; //返回登录界面
}
return SUCCESS;
}
//切换验证码
public String change(){
System.out.println("进入了change()");
return SUCCESS;
}
/**
* 全局的验证 只要进入了我们的Action 这个方法就必须先执行!
* 重写了ActionSupport类中的validate()
@Override
public void validate() {
System.out.println("进入了validate()");
if (StringUtils.isBlank(user.getName())) {//用户名为空返回true!
addFieldError("user.name", "用户名不能为空");
}
if (StringUtils.isBlank(user.getPassword())) {//密码为空返回true!
addFieldError("user.password", "密码不能为空");
}
}*/
/**
* 验证指定的方法
* 需要验证的方法名 首字母大写 !前面加上validate
* 如果和全局验证同时存在 ,优先执行指定方法名称的验证!
*/
public void validateLogin() {
System.out.println("进入了validateLogin()");
if (StringUtils.isBlank(user.getName())) {//用户名为空返回true!
addFieldError("user.name", "用户名不能为空");
}
if (StringUtils.isBlank(user.getPassword())) {//密码为空返回true!
addFieldError("user.password", "密码不能为空");
}
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
04.创建成功界面! 省略!
validate拦截器的底层搜索!
01.找到struts-default.xml文件中的validation对应的类
02.进入其对应的父类
03.继续观察
04.得到了 方法名变大写
使用xml验证框架! 首先保证xml文件和Action在同一个包中!
package cn.bdqn.action;
import java.sql.SQLException;
import org.apache.commons.lang3.StringUtils;
import cn.bdqn.bean.User;
import com.opensymphony.xwork2.ActionSupport;
/**
* 验证框架:
* 01.局部验证
* 02.全局验证 使用 validate
* 03.全局验证 使用xml 推荐*** 前提验证文件 必须和 action在一个包中!
* 001.验证全局 : ActionClassName-validation.xml
* 002.验证指定的: ActionClassName-ActionName-validation.xml
*
* ActionClassName:就是我们Action的类名! 在本类中就是对应UserAction!
* ActionName:指的的struts.xml文件中action节点中 name的属性值!
*
*/
public class UserAction extends ActionSupport{
private User user; //验证的对象
//默认
public String execute(){
System.out.println("默认执行的execute");
return SUCCESS;
}
//登录的方法
public String login(){
System.out.println("进入了login()");
//如果有错误!
if (hasErrors()) {
return INPUT; //返回登录界面
}
return SUCCESS;
}
//切换验证码
public String change(){
System.out.println("进入了change()");
return SUCCESS;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator 1.0.3//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<!-- 验证文件 必须和 action在一个包中! -->
<validators>
<field name="user.name">
<field-validator type="requiredstring"><!--用户名不能为空 -->
<param name="trim">true</param>
<message><![CDATA[用户名不能为空!!!XML]]></message>
</field-validator>
<field-validator type="stringlength"><!--用户名的长度-->
<param name="minLength">5</param>
<param name="maxLength">10</param>
<message><![CDATA[用户名必须在5--10之间!!!XML]]></message>
</field-validator>
</field>
<field name="user.password">
<field-validator type="requiredstring"><!--密码不能为空 -->
<param name="trim">true</param>
<message><![CDATA[密码不能为空!!!XML]]></message>
</field-validator>
<field-validator type="regex"><!--密码的长度-->
<param name="trim">true</param>
<param name="regex"><![CDATA[^[0-9a-zA-Z]{5,10}$]]></param>
<message><![CDATA[密码必须在5--10之间!!!XML]]></message>
</field-validator>
</field>
</validators>
下面的
下面的
作者:Rick__想太多先森