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>index.jsp</title>
</head>
<body>
<h1>注册成功!欢迎进入首页</h1>
</body>
</html>
<!-- ************************************************************注册页面页面******************************************************************************** -->
<%@ 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>Insert title here</title>
</head>
<body>
<h1 align="center">欢迎注册</h1>
    <form action="Servlet" method="post">
        <table width="500px" align="center" border="1px">
            <tr>
                <td>姓名</td>
                <td>
                <input type="text" name="username" value="${user.username}" /><span>${user.error.username }</span>
                </td>
            </tr>
            <tr>
                <td>地址</td>
                <td><input type="text" name="address" value="${user.address}"/><span>${user.error.address }</span></td>
            </tr>
            <tr>
                <td>邮箱</td>
                <td><input type="text" name="email"  value="${user.email}"/><span>${user.error.email}</span></td>
            </tr>
            <tr>
                <td>年龄</td>
                <td><input type="text" name="userage" value="${user.userage}" /></td>
            </tr>
            <tr>
                <td>生日</td>
                <td><input type="text" name="birthday"  value="${user.birthday}"/><span>${user.error.birthday}</span></td>
            </tr>
            <tr>
                <td align="center" colspan="2"><input type="submit" value="Reg" /> 
                <input type="reset" value="reset" /></td>
            </tr>
        </table>
    </form>
</body>
</html>
<!-- ***********************************************************实体类******************************************************************************** -->
package com.pojo;

import java.util.Date;

public class Users {
    private String userid;
    private String username;
    private String address;
    private String email;
    private int userage;
    private Date birthday;
    public String getUserid() {
        return userid;
    }
    public void setUserid(String userid) {
        this.userid = userid;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public int getUserage() {
        return userage;
    }
    public void setUserage(int userage) {
        this.userage = userage;
    }
    public Date getBirthday() {
        return birthday;
    }
    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
    public Users() {
        super();
    }
    public Users(String userid, String username, String address, String email, int userage, Date birthday) {
        super();
        this.userid = userid;
        this.username = username;
        this.address = address;
        this.email = email;
        this.userage = userage;
        this.birthday = birthday;
    }
    @Override
    public String toString() {
        return "Users [userid=" + userid + ", username=" + username + ", address=" + address + ", email=" + email
                + ", userage=" + userage + ", birthday=" + birthday + "]";
    }
    
    
}
<!-- ***********************************************************过渡实体类******************************************************************************** -->
package com.pojo;

import java.util.LinkedHashMap;
import java.util.Map;

import org.apache.commons.beanutils.locale.converters.DateLocaleConverter;


/**
 * 此类为一个过渡
 * 以全String类型接收JSP中传过来的数据
 * 处理完业务后返回
 * @author lin
 *
 */
public class UserBean {
    
    private String userid;
    private String username;
    private String address;
    private String email;
    private String userage;
    private String birthday;
    //用于存储错误的信息
    private Map<String, String> error = new LinkedHashMap<>();
    
    @Override
    public String toString() {
        return "UserBean [userid=" + userid + ", username=" + username + ", address=" + address + ", email=" + email
                + ", userage=" + userage + ", birthday=" + birthday + ", error=" + error + "]";
    }

    public String getUserid() {
        return userid;
    }

    public void setUserid(String userid) {
        this.userid = userid;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getEmail() {
        return email;
    }

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

    public String getUserage() {
        return userage;
    }

    public void setUserage(String userage) {
        this.userage = userage;
    }

    public String getBirthday() {
        return birthday;
    }

    public void setBirthday(String birthday) {
        this.birthday = birthday;
    }

    public Map<String, String> getError() {
        return error;
    }

    public void setError(Map<String, String> error) {
        this.error = error;
    }

    public UserBean(String userid, String username, String address, String email, String userage, String birthday,
            Map<String, String> error) {
        super();
        this.userid = userid;
        this.username = username;
        this.address = address;
        this.email = email;
        this.userage = userage;
        this.birthday = birthday;
        this.error = error;
    }

    public UserBean() {
        super();
    }

    /**
     * 以下进行对数据的校验
     */
    public boolean validate(){
        boolean isOK=true;
        if(checkUserName(isOK)  & checkEmail(isOK) & checkBirthday(isOK)){
            isOK=true;
        }else{
            isOK=false;
        }
        return isOK;
    }
    
    /**
     * 对生日的规则
     * @param isOK
     * @return
     */
    private boolean checkBirthday(boolean isOK) {
        if(birthday!=null && !birthday.trim().equals("")) {
            DateLocaleConverter dlc=new DateLocaleConverter();
            try{
                dlc.convert(birthday,"yyyy-MM-dd");
            }catch(Exception e){
                System.out.println("转换失败");
                isOK=false;
                error.put("birthday","日期格式不对");
            }
        
        }
        return isOK;
    }
    /**
     * 对名称的规则
     * @param isOK
     * @return
     */
    private boolean checkUserName(boolean isOK) {
        if(username==null || username.trim().equals("")){
            isOK=false;
            error.put("username", "用户名不能为空");
        }else{
            if(!username.matches("[A-Za-z]{3,8}")){
                isOK=false;
                error.put("username","用户名必须是3到8位字母");
            }
        }
        return isOK;
    }
    /**对邮箱的规则
     * @param isOK
     * @return
     */
    private boolean checkEmail(boolean isOK) {
        if(email==null || email.trim().equals("")){
            isOK=false;
            error.put("email", "邮箱不能为空");
        }else{
            if(!email.matches("\\w+@\\w+(\\.\\w+)+")){
                isOK=false;
                error.put("email","邮箱格式不对");
            }
        }
        return isOK;
    }
}
<!-- ***********************************************************Servlet******************************************************************************** -->
package com.servlets;

import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Enumeration;
import java.util.UUID;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.Converter;

import com.pojo.UserBean;
import com.pojo.Users;

/**
 * Servlet implementation class Servlet
 */
@WebServlet("/Servlet")
public class Servlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public Servlet() {
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        //将数据进行封装
        UserBean requestToBean = requestToBean(request, UserBean.class);
        if (requestToBean.validate()) {
            //对传入的数据进行校验,成功则将过度类赋给实体类
            Users user2 = new Users();
            // BeanUtils可以对数据进行复制,自动数据类型转化
            try {
                //将BeanUtils不能转化的日期类型进行转化
                copyBean(user2, requestToBean);
                //加上ID
                user2.setUserid(UUID.randomUUID().toString());
                System.out.println("对象封装成功!"+user2);
                response.sendRedirect("/JSP-Servlet.3.3/index.jsp");
            } catch (Exception e) {
                e.printStackTrace();
            }

        } else {
            // 如果校验不符合规则取出error
            HttpSession session = request.getSession();
            session.setAttribute("user", requestToBean);
            response.sendRedirect("/JSP-Servlet.3.3/reg.jsp");
        }
    }
    /**
     * 日期类型的转化
     * @param user2
     * @param requestToBean
     */
    private void copyBean(Users user2, UserBean requestToBean) {
                ConvertUtils.register(new Converter() {
                    // 是把时间类型进行转换
                    @Override
                    //先判断是否为空
                    public Object convert(Class type, Object value) {
                        if (value == null) {
                            return null;
                        }
                        String str = (String) value;
                        if (str.trim().equals("")) {
                            return null;
                        }
                        //规定格式
                        SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd");
                        try {
                            return s.parse(str.trim());
                        } catch (Exception e) {
                            throw new RuntimeException(e);
                        }
                    }

                }, Date.class);
                try {
                    BeanUtils.copyProperties(user2, requestToBean);
                } catch (Exception e) {
                    throw new RuntimeException(e);
                }

    }
    /**
     * 利用泛型,反射得到实体类中的所有属性,方法
     * @param request
     * @param c
     * @return
     */
    private <T> T requestToBean(HttpServletRequest request, Class<T> c) {
        try {
            //泛型接收
            T t = c.newInstance();
            //获取请求中的数据
            Enumeration<String> e = request.getParameterNames();
            //对数据操作
            while (e.hasMoreElements()) {
                String name = e.nextElement();
                String value = request.getParameter(name);
                //setProperty提供三个参数,第一是JavaBean对象,第二个是要操作的属性名,第三个为要设置的具体的值
                BeanUtils.setProperty(t, name, value);
            }
            return t;
        } catch (Exception e) {
            throw new RuntimeException(e);
        }

    }


    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}

猜你喜欢

转载自www.cnblogs.com/jiangchanglin/p/9432799.html