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

来源:互联网 发布:js单个图片木马旋转 编辑:程序博客网 时间:2024/06/05 01:43

使用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>            <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>
原创粉丝点击