您的位置:首页 > 编程语言 > Java开发

实验_使用Struts框架进行数据验证(登陆校验)

2017-12-14 13:32 423 查看

使用Struts框架进行数据验证

1.实验名称

Struts2校验

2.实验目的

熟练使用Struts框架进行数据验证

3.实验内容

完成一个类似下面的注册页面,并完成数据的校验,数据格式自己约定(要求将约定的格式写在下图右侧),需要符合常识。



(1)使用validate( )方法进行校验

(2)使用validateXxx( )方法进行校验

(3)使用内置校验器进行校验

4.文件描述:

ChrUser.java:类中封装注册页相关属性及其getter(),setter()方法

imageAction.java:随机生成验证码的Action。将生成的随机数放到session中,并由页面提交验证随机数

loginAction.java:接收登陆表单页提交的数据,对其进行校验和登陆业务处理,并将各类错误信息放入session

RegistAction:添加了ChrUser的模型驱动以及验证码的校验方法

RegistAction-validation.xml:注册页校验框架对注册信息进行输入校验

struts.xml:struts配置文件

login.jsp:登录页,包括用户名,密码和登陆按钮以及从session域中获取username和password的方法

register.jsp:注册页,收集用户信息并在提交前进行验证码校验

success.jsp:注册成功显示页,显示注册用户信息

welcome.jsp:登录用户欢迎页,可显示用户类型与用户名

5.实验源代码

ChrUser.java

public class ChrUser {
private String username;
private String password;
private String repassword;
private Date   birth;
private String email;
private String tel;
private String checkCode;
public String getCheckCode() {
return checkCode;
}
public void setCheckCode(String checkCode) {
this.checkCode = checkCode;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
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 Date getBirth() {
return birth;
}
public void setBirth(Date birth) {
this.birth = birth;
}

public String getEmail() {
return email;
}

public void setEmail(String email) {
this.email = email;
}
}


imageAction.java

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpSession;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.util.Random;

public class imageAction extends ActionSupport {
/**
* 获取随机的颜色值,r,g,b的取值在Low到High之间
* @paramL左区间
* @paramR右区间
* @return 返回随机颜色值
*/
private static Color interLine(int Low, int High){
if(Low > 255)
Low = 255;
if(High > 255)
High = 255;
if(Low < 0)
Low = 0;
if(High < 0)
High = 0;
int interval = High - Low;
int r = Low + (int)(Math.random() * interval);
int g = Low + (int)(Math.random() * interval);
int b = Low + (int)(Math.random() * interval);
return new Color(r, g, b);
}
private ByteArrayInputStream inputStream;
public ByteArrayInputStream getInputStream()
{
return inputStream;
}
public void setInputStream(ByteArrayInputStream inputStream)
{
this.inputStream = inputStream;
}
@Override
public String execute() throws Exception {
BufferedImage bfi = new BufferedImage(80,25,BufferedImage.TYPE_INT_RGB);
Graphics g = bfi.getGraphics();
g.fillRect(0, 0, 80, 25);
//验证码字符范围
char[] ch = "abcdefghijklmnopqrstuvwxyz0123456789".toCharArray();
Random r = new Random();
int index;//保存随机数字
StringBuffer sb = new StringBuffer(); //保存字符串
//验证码为四位数字
for(int i=0; i<4; i++){
index = r.nextInt(ch.length);//产生随机数
g.setColor(new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255)));
Font font = new Font("宋体", 30, 20);
g.setFont(font);
g.drawString(ch[index]+"", (i*20)+2, 23);
sb.append(ch[index]);
}
// 添加噪点
int area = (int) (0.02 * 80 * 25);
for(int i=0; i<area; ++i){
int x = (int)(Math.random() * 80);
int y = (int)(Math.random() * 25);
bfi.setRGB(x, y, (int)(Math.random() * 255));
}
ActionContext.getContext().getSession().put("checkCode", sb.toString());
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
ImageIO.write(bfi, "JPG", outputStream);  //写到输出流
ByteArrayInputStream input = new ByteArrayInputStream(outputStream.toByteArray());
this.setInputStream(input);
return SUCCESS;  }  }


loginAction.java

public class loginAction extends ActionSupport {
private String username;
private String password;
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;
}
//校验方法
@Override
public void validate() {
if (username == null || username.trim().length() < 6 || username.trim().length() > 15) {
this.addFieldError("username", "用户名长度不合法");
}
if (password.trim().length() < 6 || password.trim().length() > 15) {
this.addFieldError("password", "密码长度不合法");
}
}
//登录的业务处理逻辑
public String loginMethod() {
HttpSession session = ServletActionContext.getRequest().getSession();
if (username.equals(session.getAttribute("username")) && password.equals(session.getAttribute("password"))) {
ActionContext.getContext().getSession().put("user", username);
return "loginOK";
} else {
this.addFieldError("err", "用户名或密码不正确");
return "loginFail";
}
}
}


RegistAction.java

public class RegistAction extends ActionSupport implements ModelDriven<User>{
private User u =new User();
private String username;
private String password;
private String repassword;
private String tel;
private String email;
private String birth;
private String checkCode;
@Override
public User getModel(){
return u;
}
@Override
public void validate() {
HttpSession session = ServletActionContext.getRequest().getSession();

String checkCode_ = (String)session.getAttribute("checkCode");
if(u.getCheckCode().equals("")||u.getCheckCode().trim().equals("")){
this.addFieldError("check","验证码不能为空");
}
else if(!u.getCheckCode().equals(checkCode_))
{
this.addFieldError("checkcode","验证码错误");
}
System.out.print(checkCode_);
}
public String registMethod(){
ActionContext.getContext().getSession().put("user",u);        ActionContext.getContext().getSession().put("username",u.getUsername());        ActionContext.getContext().getSession().put("password",u.getPassword());
return "registOK";
}
public void setUsername(String username) {
this.username = username;
}
public String getUsername() {
return username;
}
public void setPassword(String password) {
this.password = password;
}
public String getPassword() {
return password;
}
public void setRepassword(String repassword) {
this.repassword = repassword;
}
public String getRepassword() {
return repassword;
}
public void setTel(String tel) {
this.tel = tel;
}
public String getTel() {
return tel;
}
public void setEmail(String email) {
this.email = email;
}
public String getEmail() {
return email;
}
public void setBirth(String birth) {
this.birth = birth;
}
public String getBirth() {
return birth;
}
public void setCheckCode(String checkCode) {
this.checkCode = checkCode;
}
public String getCheckCode() {
return checkCode;
}
}


RegistAction-validation.xml

<?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">
<validators>
<field name="username">
<field-validator type="requiredstring">
<message>用户名必须输入!!</message>
</field-validator>
<field-validator type="stringlength">
<param name="minLength">6</param>
<param name="maxLength">15</param>
<message>用户名的长度必须是6-15位!!</message>
</field-validator>
</field>
<field name="password">
<field-validator type="requiredstring">
<message>密码必须输入!!</message>
</field-validator>
<field-validator type="stringlength">
<param name="minLength">6</param>
<param name="maxLength">15</param>
<message>密码的长度必须是6-15位!!</message>
</field-validator>
</field>
<field name="repassword">
<field-validator type="fieldexpression">
<param name="expression"><![CDATA[(password==repassword)]]></param>
&
e9db
lt;message>两次密码必须相同!!</message>
</field-validator>
</field>
<field name="birth">
<field-validator type="date">
<param name="min">1980-01-01</param>
<param name="max">2017-10-11</param>
<message>生日必须在${min}和${max}之间!</message>
</field-validator>
</field>
<field name="tel">
<field-validator type="regex">
<param name="regexExpression">^13[0-9]{9}$</param>
<message>电话必须是13开头!!</message>
</field-validator>
</field>
<field name="email">
<field-validator type="email">
<message>邮箱格式不对</message>
</field-validator>
</field>
</validators>


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 extends="struts-default" namespace="/" name="regist">
<action name="RegistAction" method="registMethod" class="nuc.sw.action.RegistAction">
<result name="registOK"> /success.jsp </result>
<result name="input"> /register.jsp </result>
</action>
<action name="imageAction" class="nuc.sw.action.imageAction">
<result name="success" type="stream">
<param name="contentType">image/jpeg</param>
<param name="inputName">inputStream</param>
</result>
</action>
<action name="loginAction" method="loginMethod" class="nuc.sw.action.loginAction">
<result name="loginOK"> /welcome.jsp </result>
<result name="input"> /login.jsp </result>
</action>
</package>
</struts>


login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登录页</title>
</head>
<body>
<s:fielderror fieldName="err"></s:fielderror>
<s:form action="loginAction" method="post">
<s:textfield label = "用户名" name="username" value="%{session.user.username}"></s:textfield>
<s:password label="密码" name="password" value="%{session.user.password}"></s:password>
<s:submit value="登录"></s:submit>
</s:form>
</body>
</html>


register.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>注册页</title>
<sx:head/>
</head>
<body>
<table>
<s:form action="RegistAction" method="post">
<tr><s:textfield label="用户名" name="username"></s:textfield></tr>
<tr><s:password label="密码" name="password"></s:password></tr>
<tr><s:password label="确认密码" name="repassword"></s:password></tr>
<tr><sx:datetimepicker label="生日" name="birth" displayFormat="yyyy-MM-dd"></sx:datetimepicker></tr>
<tr><s:textfield label="电话" name="tel"></s:textfield></tr>
<tr><s:textfield label="邮箱" name="email"></s:textfield></tr>
<tr>
<td><s:textfield label="验证码" name="checkCode"></s:textfield>
<img src="imageAction.action" onclick="this.src='imageAction.action'" title="点击图片刷新验证码"/>
</td>
</tr>
<s:submit value="注册"></s:submit>
</s:form>
</table>
</body>
</html>


success.jsp

<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>成功页</title>
</head>
<body>
用户  ${sessionScope.user.username}已注册成功!用户信息如下:<br>
生日:${sessionScope.user.birth}<br>
电话:${sessionScope.user.tel}<br>
邮箱:${sessionScope.user.email}<br>
</body>


welcome.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>欢迎页</title>
</head>
<body>
欢迎${sessionScope.user}登录!!!
<a href="login.jsp">点我跳转到登录页面</a>
</body>
</html>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  struts2.0 数据
相关文章推荐