使用Struts 2.0 框架实现用户注册登录模块(数据库校验)

来源:互联网 发布:transmodeler软件下载 编辑:程序博客网 时间:2024/06/16 08:57

 代码:

login.jsp

<%@ page language="java" import="java.util.*"   pageEncoding="gbk"%><%@ 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><title>用户登录</title></head><body>   <div align="right">     <s:a href="register.jsp"><font color="blue"><h5>还未注册?点击注册</h5></font></s:a>   </div>      <div style="color: #7FFF00">     <s:form action="login" method="post">        <s:textfield name="username" label="账号"></s:textfield><s:password name="password" label="密码"></s:password><s:submit value="登陆"></s:submit>     </s:form>   </div></body></html>

login_success.jsp

<%@ page language="java" import="java.util.*"  pageEncoding="gbk"%><%@ taglib prefix="s" uri="/struts-tags" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>我的主页</title></head><body>    <h4 align="right"><font color="blue">欢迎您,${user}</font></h4></body></html>

register.jsp

<%@ page language="java" import="java.util.*"  pageEncoding="gbk"%><%@ taglib prefix="s" uri="/struts-tags"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>用户注册</title><script type="text/javascript">    function shuaxin(obj) {        var shijian = new Date().getTime();        obj.src="imageAction.action?d="+shijian;   }</script></head><body> <h1 align="center">用户注册</h1> <div align="center">   <s:fielderror cssStyle="color:red"></s:fielderror>   <s:actionerror cssStyle="color:red"></s:actionerror>   <br>   <s:form action="register" theme="simple" method="post">    <table width="50%" border="0" style="width: 501px; height: 342px;">      <tr>        <td align="right">账号:</td><td width=20><s:textfield name="username"></s:textfield></td><td><font color="red" align="left"><h6>*必填</h6></font></td>      </tr>            <tr><td align="right">密码:</td><td><s:password name="password"></s:password></td><td><font color="red" align="left"><h6>*必填</h6></font></td> </tr>  <tr><td align="right">重复密码:</td><td><s:password name="repassword"></s:password></td><td><font color="red" align="left"><h6>*必填</h6></font></td></tr><tr>  <td align="right">性别:</td>  <td><input type="radio" name="sex" value="0" checked />男<input type="radio" name="sex" value="1" />女</td></tr><tr>  <td align="right">电子邮箱:</td>  <td><s:textfield name="email"></s:textfield></td>  <td><font color="red" align="left"><h6>*必填</h6></font></td></tr><tr>   <td align="right">验证码:</td>   <td><s:textfield name="validate"></s:textfield></td>   <td><img src="imageAction" align="left" alt="点击图片" onClick="shuaxin(this)" /></td></tr><tr><td></td><td>  <s:submit value="提交"></s:submit>  <s:reset value="重置"></s:reset></td></tr>    </table>   </s:form> </div></body></html>

register_success.jsp

<%@ page language="java" import="java.util.*"  pageEncoding="gbk"%><%@ taglib prefix="s" uri="/struts-tags"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>注册成功</title><script language='javascript' type='text/javascript'>var secs = 5; //倒计时的秒数     var URL;function Load(url) {URL = url;for ( var i = secs; i >= 0; i--) {window.setTimeout('doUpdate(' + i + ')', (secs - i) * 1000);}}function doUpdate(num) {document.getElementById('ShowDiv').innerHTML = '将在' + num + '秒后自动跳转到登录页面';if (num == 0) {window.location = URL;}}</script></head><body><center><h1><font color="red" align="center">恭喜您,注册成功!!</font></h1><br /><div id="ShowDiv"></div><script language="javascript">Load("http://localhost:8082/StrustLogin/login.jsp");</script><s:a href="/StrustLogin/login.jsp"><font color="blue"><h5>手动登录?</h5> </font></s:a></center></body></html>

ImageAction.java

package action;import java.io.*;import java.util.Map;import javax.imageio.ImageIO;import javax.imageio.stream.ImageOutputStream;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionSupport;import java.awt.*;import java.awt.image.BufferedImage;public class ImageAction extends ActionSupport {private static final long serialVersionUID = 1L;private ByteArrayInputStream inputStream;// 产生四个0~9的随机数,放在一个字符串里public String createRandomString() {String str = "";for (int i = 0; i < 4; i++) {str += Integer.toString((new Double(Math.random() * 10)).intValue());}return str;}// 随机产生一个颜色public Color createsRandomColor() {int r = (new Double(Math.random() * 256)).intValue();int g = (new Double(Math.random() * 256)).intValue();int b = (new Double(Math.random() * 256)).intValue();return new Color(r, g, b);}// 生成一个内存图片,将四个随机数写在图片上public BufferedImage createImage(String str) {int width = 60;int height = 22;BufferedImage image = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);// 获取图形上下文Graphics g = image.getGraphics();// 设定背景色g.setColor(Color.WHITE);g.fillRect(0, 0, width, height);// 画边框g.setColor(Color.black);g.drawRect(0, 0, width - 1, height - 1);// 将认证码显示到图象中g.setFont(new Font("Atlantic Inline", Font.PLAIN, 18));// 使用随机颜色g.setColor(this.createsRandomColor());// 将随机字符串的每个数字分别写到图片上g.drawString(Character.toString(str.charAt(0)), 8, 17);g.drawString(Character.toString(str.charAt(1)), 20, 17);g.drawString(Character.toString(str.charAt(2)), 33, 17);g.drawString(Character.toString(str.charAt(3)), 45, 17);// 图象生效g.dispose();return image;}// 将图片的以字节形式写到InputStream里public ByteArrayInputStream createInputStream() throws Exception {// 获取随机字符串String str = this.createRandomString();BufferedImage image = this.createImage(str);// 将产生的字符串写入session,供校验时使用ActionContext actionContext = ActionContext.getContext();Map session = actionContext.getSession();session.put("random", str);ByteArrayOutputStream output = new ByteArrayOutputStream();ImageOutputStream imageOut = ImageIO.createImageOutputStream(output);ImageIO.write(image, "JPEG", imageOut);imageOut.close();ByteArrayInputStream input = new ByteArrayInputStream(output.toByteArray());output.close();return input;}@Overridepublic String execute() throws Exception {setInputStream(createInputStream());return SUCCESS;}public ByteArrayInputStream getInputStream() {return inputStream;}public void setInputStream(ByteArrayInputStream inputStream) {this.inputStream = inputStream;}}

LoginAction.java

package action;import java.util.Map;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionSupport;import biz.Users;import dao.DbService;public class LoginAction extends ActionSupport {private static final long serialVersionUID = 1L;String username;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;}@Overridepublic String execute() throws Exception {// TODO Auto-generated method stubDbService dbservice = new DbService();Users user = new Users();user = dbservice.hasUser(username, password);if(user.getUsername()==null){this.addFieldError("username", "用户名或密码不正确");return INPUT;}else{ActionContext actionContext = ActionContext.getContext();Map session = actionContext.getSession();session.put("user", user.getUsername());}return SUCCESS;}}

RegisterAction.java

package action;import java.util.Map;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionSupport;import biz.Users;import dao.DbService;public class RegisterAction extends ActionSupport {private static final long serialVersionUID = 1L;private String username;private String password;private String  repassword;private String sex;private String email;private String validate;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 String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public String getValidate() {return validate;}public void setValidate(String validate) {this.validate = validate;}@Overridepublic String execute() throws Exception {// TODO Auto-generated method stubint sex1=Integer.parseInt(sex);Users user = new Users();user.setUsername(username);user.setEmail(email);user.setPassword(password);user.setSex(sex1);DbService dbservice = new DbService();if(dbservice.hasSameName(username)){this.addFieldError(username, "用户名已存在");return INPUT;}else {dbservice.addUser(user);}  return SUCCESS;}@Overridepublic void validate() {// TODO Auto-generated method stubActionContext actionContext = ActionContext.getContext();           Map session = actionContext.getSession();          if( !repassword.equals(password) ){this.addFieldError(repassword, "重复密码不一致");}if (!session.get("random").equals(validate)){     this.addFieldError(validate, "验证码错误");}}}

LoginAction-validation.xml

<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"><validators><field name="username"><field-validator type="requiredstring"><param name="trim">true</param><message>账号不能为空</message></field-validator></field><field name="password"><field-validator type="requiredstring"><param name="trim">true</param><message>密码不能为空</message></field-validator></field></validators>

RegisterAction-validation.xml

<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"><validators><field name="username"><field-validator type="requiredstring" short-circuit="true"><param name="trim">true</param><message>账号不能为空</message></field-validator><field-validator type="stringlength"><param name="minLength">6</param><param name="maxLength">20</param><message>账号长度应在 ${minLength} ~ ${maxLength}之间</message></field-validator></field><field name="password"><field-validator type="requiredstring" short-circuit="true"><param name="trim">true</param><message>密码不能为空</message></field-validator><field-validator type="stringlength"><param name="minLength">6</param><param name="maxLength">20</param><message>密码长度应在 ${minLength} ~ ${maxLength}之间</message></field-validator></field><field name="repassword"><field-validator type="requiredstring" short-circuit="true"><param name="trim">true</param><message>重复密码不能为空</message></field-validator></field><field name="email"><field-validator type="requiredstring" short-circuit="true"><param name="trim">true</param><message>邮箱不能为空</message></field-validator><field-validator type="email"><message>邮箱输入不正确</message></field-validator></field><field name="validate"><field-validator type="requiredstring"><param name="trim">true</param><message>验证码不能为空</message></field-validator></field></validators> 

Users.java

package biz;public class Users {   private int userid;   private String username;   private String password;   private int sex;   private String email;   public int getUserid() {return userid;}public void setUserid(int userid) {this.userid = userid;}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 int getSex() {return sex;}public void setSex(int sex) {this.sex = sex;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}   public Users(String username, String password, int sex, String email) {super();this.username = username;this.password = password;this.sex = sex;this.email = email;}public Users(int userid, String username, String password, int sex,String email) {super();this.userid = userid;this.username = username;this.password = password;this.sex = sex;this.email = email;}public Users() {super();}}

DbConnection.java

package dao;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;public class DbConnection {static {try {Class.forName("com.mysql.jdbc.Driver");} catch (ClassNotFoundException e) {e.printStackTrace();}}public static Connection getConnection() {Connection con = null;String url = "jdbc:mysql://localhost:3306/test";String userName = "root";String pwd = "root";try {con = DriverManager.getConnection(url, userName, pwd);System.out.println("数据库连接成功!");} catch (SQLException e) {System.out.println("数据库连接失败!"); e.printStackTrace();}return con;}public static void closeConnection(ResultSet rs, Statement st, Connection conn) {if (rs != null) {try {rs.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}if (st != null) {try {st.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}if (conn != null) {try {conn.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}

 DbService.java

package dao;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import biz.Users;public class DbService {public void addUser(Users user) {Connection connection = DbConnection.getConnection();PreparedStatement ps = null;String sql = "insert into users(username,password,sex,email) values(?,?,?,?)";try {ps = connection.prepareStatement(sql);ps.setString(1, user.getUsername());ps.setString(2, user.getPassword());ps.setInt(3, user.getSex());ps.setString(4, user.getEmail());ps.executeUpdate();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public Users hasUser(String username, String password) {Users user = new Users();Connection connection = DbConnection.getConnection();PreparedStatement ps = null;ResultSet rs = null;String sql = "select * from users where username= ? and password = ?";try {ps = connection.prepareStatement(sql);ps.setString(1, username);ps.setString(2, password);rs = ps.executeQuery();if (rs.next()) {user.setPassword(rs.getString("password"));user.setUsername(rs.getString("username"));user.setSex(rs.getInt("sex"));user.setEmail(rs.getString("email"));user.setUserid(rs.getInt("user_id"));}} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {DbConnection.closeConnection(rs, ps, connection);}return user;}public boolean hasSameName(String username) {String name = null;Connection connection = DbConnection.getConnection();PreparedStatement ps = null;ResultSet rs = null;String sql = "select * from users where username = ?";try {ps = connection.prepareStatement(sql);ps.setString(1, username);rs = ps.executeQuery();if (rs.next()) {name = rs.getString("username");if (name.equals(username)) {return true;}else{return false;}}else{return false;}} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {DbConnection.closeConnection(rs, ps, connection);}return false;}}

struts.xml

<!DOCTYPE struts PUBLIC    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"    "http://struts.apache.org/dtds/struts-2.0.dtd"><struts>   <constant name="struts.i18n.encoding" value="gbk"></constant>   <package name="StrutsLogin" extends="struts-default">     <action name="register" class="action.RegisterAction">        <result name="success">/register_success.jsp</result><result name="input">/register.jsp</result>     </action>          <action name="login" class="action.LoginAction">         <result name="success" type="redirect">/login_success.jsp</result> <result name="input">/login.jsp</result>     </action>          <action name="imageAction" class="action.ImageAction">        <result type="stream">            <param name="contentType">image/jpeg</param>            <param name="inputName">inputStream</param>        </result>     </action>          </package></struts>

截图:








0 0
原创粉丝点击