刚刚学完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()
*/
@Override
public 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 {
@Override
public 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;
}
@Override
public 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 block
System.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 block
e.printStackTrace();
}
}
}
//5.关闭结果集
public static void closeResult(ResultSet rs){
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
db.properties
driver=com.mysql.jdbc.Driver
url=jdbc\:mysql\://localhost\:3306/user_manager
user=root
pass=root
i18n_en_US.properties
userName=User Name\uFF1A
password=Password\uFF1A
title_login=Login Page
submit=Submit
reset=Reset
regist=Regist
success=Congratulations {0}\uFF0CLogin success\uFF01
i18n_zh_CN.properties
username=\u7528\u6237\u540D\uFF1A
password=\u5BC6\u7801\uFF1A
title_login=\u767B\u9646\u9875\u9762
submit=\u767B\u9646
reset=\u91CD\u7F6E
regist=\u6CE8\u518C
success=\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>
本文介绍了使用Struts2框架实现登陆注册功能,包括字符串到POJO的转换、国际化(i18n)、服务器端输入验证及初步的权限控制。在MyEclipse环境中配置Struts2项目,通过自定义拦截器进行权限管理,同时展示了数据库和登陆页面的实现。
1230

被折叠的 条评论
为什么被折叠?



