运用struts2框架实现登陆注册

来源:互联网 发布:德国oshadhi知乎 编辑:程序博客网 时间:2024/05/10 13:24

刚刚学完struts2框架,趁热打铁,做了个struts2MVC小项目练练手。主要用到了struts2的机制实现了登陆注册,

1.字符串到POJO类型的转换,

2.利用i18n拦截器实现了中英文国际化,

3.利用validate拦截器框架效验实现服务器端输入验证,

4.struts2标签库以及利用自定义拦截器实现权限控制(第四条下篇博客再进行介绍)

建完项目后,引入jar包,我们用myeclipse自带的struts2jar包就ok,右键工程->MyEclipse->Project Faset->strutr2.x   完成之后就成功导入jar包

5.国际化实现之后,有三种方式实现中英文切换,前两种太过死板,第三种最灵活(推荐使用)

1>.直接在浏览器中修改浏览器语言

2>.在代码中设置locale属性。在struts.xml中加一个静态值(此方法虽然最简便,但不是长久之计)

代码:

<constant name="struts.locale" value="zh_CN"></constant>
<span style="white-space:pre"></span>若设置美国英文,将value值改为:en_US
3>.实现动态国际化,在页面中加入超连接的形式来实现,具体实现参见:点击打开链接

工程截图如下:


运行界面:






一、数据库介绍

用mysql实现
一个用户表,三个字段,
varchar类型的userName,password
int类型的role用来设置权限(此篇博客暂时没用到)
数据库表截图如下:

二、首先实现登陆页面

可以用struts2框架自带的标签库来定义,我用的html标签实现的,因为要实现国际化,框架效验,以及POJO的类型转化,所以还要引入struts2的标签库。
引入库的代码为:
<%@ taglib uri="/struts-tags" prefix="s" %>
代码如下:
login.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib uri="/struts-tags" prefix="s" %><%@ page import="com.user.bean.User" %><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>    <base href="<%=basePath%>">    <title><s:text name="title_login"></s:text></title>    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">  </head>  <body>  <div><s:fielderror /></div>    <form action="loginAction" method="post" name="form1">    <table align="center">    <tr>    <td><s:text name="username"></s:text></td>    <td><input type="text" name="user.userName"></td>    </tr>    <tr>    <td><s:text name="password"></s:text></td>    <td><input type="password" name="user.password"></td>    </tr>    <tr>    <%--struts标签这样写 <td colspan="2"><s:radio name="user.role" list="#{'0':'普通用户','1':'管理员'}"/></td> --%>    <td>普通用户:<input type="radio" name="user.role" value="0"></td>    <td>超级用户:<input type="radio" name="user.role" value="1"></td>    </tr>    <tr>    <td><input type="submit" value=<s:text name="submit"></s:text>></td>    <td><input type="reset" value=<s:text name="reset"></s:text>>    <input type="button" value=<s:text name="regist"></s:text> onclick="window.location.href='Page/register.jsp'"></td>    </tr>    </table>    <s:actionerror/>    </form>  </body></html>
register.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib uri="/struts-tags" prefix="s" %><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>    <base href="<%=basePath%>"><title><s:text name="title_regist"></s:text></title>    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">  </head>  <body>    <form action="registAction" method="post" name="form1">    <table align="center">    <tr>    <td><s:text name="username"></s:text></td>    <td><input type="text" name="user.userName"></td>    </tr>    <tr>    <td><s:text name="password"></s:text></td>    <td><input type="password" name="user.password"></td>    </tr>    <tr>    <td>普通用户:<input type="radio" name="user.flag" value="0"></td>    <td>超级用户:<input type="radio" name="user.flag" value="1"> </td>    </tr>    <tr>    <td><input type="submit" value=<s:text name="regist"></s:text>></td>    <td><input type="reset" value=<s:text name="reset"></s:text>></td>    </tr>    </table>    <s:actionerror/>    </form>  </body></html>
com.user.bean包下实体类:
User.java
package com.user.bean;public class User {private int role;private String userName;private String password;/** * @return the role */public int getRole() {return role;}/** * @param role the role to set */public void setRole(int role) {this.role = role;}/** * @return the userName */public String getUserName() {return userName;}/** * @param userName the userName to set */public void setUserName(String userName) {this.userName = userName;}/** * @return the password */public String getPassword() {return password;}/** * @param password the password to set */public void setPassword(String password) {this.password = password;}}
com.user.action包下UserAction.java
package com.user.action;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionSupport;import com.user.bean.User;import com.user.dao.UserDao;import com.user.dao.UserDaoImpl;public class UserAction extends ActionSupport{private static final long serialVersionUID = 1L;private User user;private UserDao userDao = new UserDaoImpl();public User getUser() {return user;}public void setUser(User user) {this.user = user;}//注册public String regist(){UserDaoImpl dao = new UserDaoImpl();int i = dao.Register(user);if(i!=-1){return SUCCESS;}else{return ERROR;}}//登陆验证public String login(){User checkUser = userDao.userLogin(user.getUserName(),user.getPassword(),user.getRole());if(null == checkUser){return ERROR;}else{ActionContext.getContext().put("tip", getText("success"));ActionContext.getContext().put("username", user.getUserName());return SUCCESS;}}//重写validate方法,完成输入效验/* (non-Javadoc) * @see com.opensymphony.xwork2.ActionSupport#validate() */@Overridepublic void validate() {//如果用户名为空或为空字符串,则添加错误信息if(user.getUserName() == null||user.getUserName().trim().equals("")){//添加表单效验错误信息addFieldError("username", "输入的用户名不能为空");}//如果密码为空或为空字符串,则添加错误信息if(user.getPassword()==null ||user.getPassword().trim().equals("")){addFieldError("password", "输入的密码不能为空");}}}
com.user.dao包下
UserDao.java
package com.user.dao;import com.user.bean.User;public interface UserDao {//用户登陆 public User userLogin(String userName,String password,int role);//用户注册public int Register(User user);}
UserDaoImpl.java
package com.user.dao;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import com.user.bean.User;import com.user.util.DBConnection;public class UserDaoImpl implements UserDao {@Overridepublic User userLogin(String userName,String password,int role) {Connection conn = null;PreparedStatement pstmt = null;ResultSet rs = null;User user = null;//获得链接conn = DBConnection.getConn();//准备String sql_userCheck="select userName,password,role from user where userName=? and password=? and role=?";try {pstmt = conn.prepareStatement(sql_userCheck);pstmt.setString(1, userName);pstmt.setString(2, password);pstmt.setInt(3, role);rs = pstmt.executeQuery();if(rs.next()){user = new User();user.setUserName(rs.getString("userName"));user.setPassword(rs.getString("password"));user.setRole(rs.getInt("role"));System.out.println(user.getUserName());System.out.println(user.getPassword());System.out.println(user.getRole());}} catch (SQLException e) {System.out.println("登陆错误!");e.printStackTrace();} finally{DBConnection.closeConn(conn);DBConnection.closeStatement(pstmt);DBConnection.closeResult(rs);}return user;}@Overridepublic int Register(User user) {int i=-1;Connection conn = null;PreparedStatement pstmt = null;try{//获得链接conn = DBConnection.getConn();//准备String sql_userCheck="INSERT INTO user (user.userName,user.password,user.flag) VALUES(?,?,?)";pstmt = conn.prepareStatement(sql_userCheck);pstmt.setString(1, user.getUserName());pstmt.setString(2, user.getPassword());pstmt.setInt(3, user.getRole());i = pstmt.executeUpdate();}catch(SQLException e){System.out.println("注册错误");e.printStackTrace();}finally{DBConnection.closeConn(conn);DBConnection.closeStatement(pstmt);}return i;}}
com.user.util包下
DBConnection.java
package com.user.util;import java.io.IOException;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.util.Properties;/** * 数据库连接和关闭 * @author yl * */public final class DBConnection {private static String DRIVER;private static String URL;private static String USER;private static String PWD;private static Properties pr = new Properties();static{try {pr.load(DBConnection.class.getClassLoader().getResourceAsStream("db.properties"));DRIVER = pr.getProperty("driver");URL = pr.getProperty("url");USER = pr.getProperty("user");PWD = pr.getProperty("pass");} catch (IOException e) {System.out.println("加载资源文件错误");e.printStackTrace();}}//1.注册驱动static{try {Class.forName(DRIVER);} catch (ClassNotFoundException e) {System.out.println("注册驱动失败!");e.printStackTrace();}}//2.获得连接public static Connection getConn(){Connection conn = null;try {conn = DriverManager.getConnection(URL, USER, PWD);} catch (SQLException e) {// TODO Auto-generated catch blockSystem.out.println("数据库连接失败");e.printStackTrace();}return conn;}//3.关闭连接public static void closeConn(Connection conn){if(conn!=null){try {conn.close();} catch (SQLException e) {System.out.println("关闭连接失败");e.printStackTrace();}}}//4.关闭执行对象public static void closeStatement(Statement stmt){if(stmt!=null){try {stmt.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}//5.关闭结果集public static void closeResult(ResultSet rs){if(rs!=null){try {rs.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}
db.properties

driver=com.mysql.jdbc.Driverurl=jdbc\:mysql\://localhost\:3306/user_manageruser=rootpass=root

i18n_en_US.properties

userName=User Name\uFF1Apassword=Password\uFF1Atitle_login=Login Pagesubmit=Submitreset=Resetregist=Registsuccess=Congratulations {0}\uFF0CLogin success\uFF01

i18n_zh_CN.properties

username=\u7528\u6237\u540D\uFF1Apassword=\u5BC6\u7801\uFF1Atitle_login=\u767B\u9646\u9875\u9762submit=\u767B\u9646reset=\u91CD\u7F6Eregist=\u6CE8\u518Csuccess=\u606D\u559C{0}\uFF0C\u767B\u9646\u6210\u529F\uFF01

struts.xml
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"><struts><constant name="struts.custom.i18n.resources" value="i18n"></constant><constant name="struts.locale" value="zh_CN"></constant><package name="userManager" extends="struts-default"><action name="loginAction" class="com.user.action.UserAction" method="login"><result name="success">/WEB-INF/Page/loginSuccess.jsp</result><result name="error">/WEB-INF/Page/loginFailed.jsp</result><result name="input">/Page/login.jsp</result></action><action name="registAction" class="com.user.action.UserAction" method="regist"><result name="success">/Page/login.jsp</result><result name="error">/Page/register.jsp</result><result name="input">/Page/register.jsp</result></action></package></struts>    



3 1
原创粉丝点击