一、实现带登录验证的人员管理demo
环境:eclipse,tomcat 6.0 ,orcl
框架:struts2
基于登录验证,实现一个简单的对表的增删改查。
二、源码
1.项目结构
2.实体类
person.java
package com.it.struts.entity;
public class person {
//登录账户密码
private String pname;
private String pwd;
public String getPname() {
return pname;
}
public void setPname(String pname) {
this.pname = pname;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public person(String pname, String pwd) {
super();
this.pname = pname;
this.pwd = pwd;
}
public person() {
super();
}
}
user.java
package com.it.struts.entity;
public class user {
//被操作的用户
private int pid;
private String pname;
private String pwd;
private String pdate;
private String pdept;
public int getPid() {
return pid;
}
public void setPid(int pid) {
this.pid = pid;
}
public String getPname() {
return pname;
}
public void setPname(String pname) {
this.pname = pname;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getPdate() {
return pdate;
}
public void setPdate(String pdate) {
this.pdate = pdate;
}
public String getPdept() {
return pdept;
}
public void setPdept(String pdept) {
this.pdept = pdept;
}
public user(int pid,String pname, String pwd, String pdate, String pdept) {
super();
this.pid = pid;
this.pname = pname;
this.pwd = pwd;
this.pdate = pdate;
this.pdept = pdept;
}
public user() {
super();
}
@Override
public String toString() {
return "user [pid="+pid+" pname=" + pname + ", pwd=" + pwd + ", pdate=" + pdate + ", pdept=" + pdept + "]";
}
}
3.数据库链接类
注意:这里需要导入orcl数据库的jar包。
DButil.java
package com.it.struts.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class DButil {
private static String url = "jdbc:oracle:thin:@localhost:1521:orcl";//数据库链接字符串
private static String user="scott";//数据库帐号
private static String password = "*****";//数据库密码
private static String driver = "oracle.jdbc.driver.OracleDriver";//数据库驱动
private static Connection conn = null;
public static Connection getConnection() {
try {
Class.forName(driver);
//加载驱动
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("驱动加载失败");
}
try {
conn=DriverManager.getConnection(url, user, password);
//创建连接
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("数据库连接失败");
}
return conn;
}
public static void closeConn(Connection conn,PreparedStatement ps,ResultSet rs) {
//使用结束后关闭conn,ps,rs
if(rs!=null) {
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(ps!=null) {
try {
ps.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(conn!=null) {
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
4.时间转换类
TimeTransform.java
package com.it.struts.tools;
import java.util.Date;
import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
public class TimeTransform {
public static java.sql.Date Stringtodate(String stime){
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
//1.把字符串转换为util包的date
java.util.Date utilDate = null;
try {
utilDate = format.parse(stime);
} catch (ParseException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
//2.再把util包的date转换为sql包的date
java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());
return sqlDate;
}
public static Timestamp Stringtodatetime(String stime){
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//1.把字符串转换为util包的date
java.util.Date utilDate = null;
try {
utilDate = format.parse(stime);
} catch (ParseException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
//2.再把util包的date转换为sql包的date
Timestamp ts = new Timestamp(utilDate.getTime());
return ts;
}
public static String Datetostring(Date date){
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
//将data转换为string
String sdate = format.format(date);
return sdate;
}
}
5.拦截器类
MyInterceptor2.java
package com.it.struts.interceptor;
import java.util.Map;
import com.it.struts.entity.person;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
public class MyInterceptor2 extends AbstractInterceptor{
@Override
public String intercept(ActionInvocation invocation) throws Exception {
Map session = ActionContext.getContext().getSession();
//获取session作用域内是否有值
person person = (person) session.get("person");
if(person!=null){//合法访问
return invocation.invoke();
}else{//user为空说明未经过登陆,保存错误提示信息,跳到登陆页面
ActionContext.getContext().put("noright", "请先登陆再进行操作!");
return Action.LOGIN;
}
}
}
6.Dao及DaoImp
userDao.java
package com.it.Dao;
import java.util.List;
import java.util.Map;
import com.it.struts.entity.user;
public interface userDao {
public List<user> findAll(Map<String,Object> map) throws Exception;
public boolean insert(user user) throws Exception;
public boolean update(user user) throws Exception;
public boolean delete(user user) throws Exception;
}
userDaoImp.java
package com.it.DaoImp;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import com.it.Dao.userDao;
import com.it.struts.entity.user;
import com.it.struts.jdbc.DButil;
import com.it.struts.tools.TimeTransform;
public class userDaoImp implements userDao {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
@Override
public List<user> findAll(Map<String, Object> map) throws Exception {
// TODO Auto-generated method stub
List<user> list =new ArrayList<user>();
StringBuffer sql =new StringBuffer("select * from user_1 where 1=1 ");
if(map.get("pid")!=""&&map.get("pid")!=null) {
sql.append(" and pid = ").append(map.get("pid"));
}
try {
conn = DButil.getConnection();
ps = conn.prepareStatement(sql.toString());
System.out.println(sql.toString());
rs = ps.executeQuery();
while(rs.next()) {
user user = new user();
user.setPid(rs.getInt("pid"));
user.setPname(rs.getString("pname"));
user.setPwd(rs.getString("pwd"));
user.setPdate(TimeTransform.Datetostring(rs.getDate("pdate")));
user.setPdept(rs.getString("pdept"));
list.add(user);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
DButil.closeConn(conn, ps, rs);
return list;
}
@Override
public boolean insert(user user) throws Exception{
// TODO Auto-generated method stub
String sql = "insert into user_1 values(?,?,?,?,?)";
conn = DButil.getConnection();
int result = 0;
try {
ps = conn.prepareStatement(sql);
ps.setInt(1, user.getPid());
ps.setString(2,user.getPname());
ps.setString(3, user.getPwd());
ps.setDate(5,TimeTransform.Stringtodate(user.getPdate()));
ps.setString(4, user.getPdept());
result = ps.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
DButil.closeConn(conn, ps, null);
return result>0;
}
@Override
public boolean update(user user) throws Exception{
// TODO Auto-generated method stub
String sql = "update user_1 set pname=?,pwd=?,pdate=?,pdept=? where pid = ?";
conn = DButil.getConnection();
int result = 0;
try {
ps = conn.prepareStatement(sql);
ps.setInt(5,user.getPid());
ps.setString(1,user.getPname());
ps.setString(2, user.getPwd());
ps.setDate(3,TimeTransform.Stringtodate(user.getPdate() ));
ps.setString(4, user.getPdept());
result = ps.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
DButil.closeConn(conn, ps, null);
return result>0;
}
@Override
public boolean delete(user user) throws Exception{
// TODO Auto-generated method stub
String sql = "delete from user_1 where pid = ?";
conn = DButil.getConnection();
int result = 0;
try {
ps = conn.prepareStatement(sql);
ps.setInt(1, user.getPid());
System.out.println(sql);
result = ps.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
DButil.closeConn(conn, ps, null);
return result>0;
}
}
7.Action类
PersonAction1.java
注意:这里的person为进行数据库验证,而是写死为帐号abc,密码123
package com.it.struts.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
import com.it.struts.entity.person;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
public class PersonAction1 extends ActionSupport implements ModelDriven<person>{
person person = new person();
@Override
public person getModel() {
// TODO Auto-generated method stub
return person;
}
public String login() throws Exception {
// TODO Auto-generated method stub
String path = null;
if("abc".equals(person.getPname())&&"123".equals(person.getPwd())) {
path = SUCCESS;
}
else {
path = INPUT;
}
// HttpServletRequest request = ServletActionContext.getRequest();
//HttpSession session = request.getSession();
ActionContext.getContext().getSession().put("person", person);
// session.setAttribute("person",person);
return path;
}
}
UserAction.java
package com.it.struts.action;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.it.DaoImp.userDaoImp;
import com.it.struts.entity.user;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
public class UserAction extends ActionSupport implements ModelDriven<user>{
userDaoImp userdao = new userDaoImp();
//获取userdao 进行数据库操作
private user u;
//模型驱动,设置获取user的值
public user getU() {
return u;
}
public void setU(user u) {
this.u = u;
}
private List list;
//模型驱动,设置获取list的值
public List getList() {
return list;
}
public void setList(List list) {
this.list = list;
}
user user = new user();
@Override
public user getModel() {
// TODO Auto-generated method stub
return user;
}
//默认设置
//显示所有信息
public String show() {
Map<String,Object> map = new HashMap<String,Object>();
list = new ArrayList<user>();
try {
list = userdao.findAll(map);
return "success";
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return "error";
}
}
//根据id显示信息
public String showId() {
Map<String,Object> map = new HashMap<String,Object>();
map.put("pid", user.getPid());
list = new ArrayList<user>();
try {
list = userdao.findAll(map);
u = (com.it.struts.entity.user) list.get(0);
System.out.println(u.toString());
return "findsuccess";
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return "error";
}
}
//删除信息
public String del() {
String path = "";
try {
if(userdao.delete(user)) {
path = "success";
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
path = "error";
}
return path;
}
//添加信息
public String add() {
String path = null;
try {
userdao.insert(user);
path ="success";
} catch (Exception e) {
// TODO Auto-generated catch block
path = "error";
e.printStackTrace();
}
return path;
}
//更新信息
public String upd() {
String path = null;
try {
System.out.println(u.toString());
userdao.update(u);
path ="success";
} catch (Exception e) {
// TODO Auto-generated catch block
path = "error";
e.printStackTrace();
}
return path;
}
}
8.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>
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<constant name="struts.devMode" value="false" />
<package name="default" namespace="/person" extends="struts-default">
<interceptors>
//拦截器定义
<interceptor name="inter02" class="com.it.struts.interceptor.MyInterceptor2"></interceptor>
</interceptors>
<default-action-ref name="index" />
<!-- 全局异常处理结果 -->
<global-results>
<result name="error">/WEB-INF/jsp/error.jsp</result>
<result name="login">login.jsp</result>
</global-results>
<!-- 全局异常配置 -->
<global-exception-mappings>
<exception-mapping exception="java.lang.Exception" result="error"/>
</global-exception-mappings>
<action name="personAction" class="com.it.struts.action.PersonAction1">
<interceptor-ref name="inter01"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
<result name="success">show.jsp</result>
<result name="error" type="redirect">login.jsp</result>
</action>
<action name="UserAction" class="com.it.struts.action.UserAction">
<interceptor-ref name="inter02"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
<result name="success">show.jsp</result>
<result name="findsuccess">upUser.jsp</result>
<result name="error" type="redirect">login.jsp</result>
</action>
</struts>
注意:这里的package空间为/person,所以jsp就要放在person里,否则jsp就找不到action
9.jsp页面
注意:这里需要使用struts标签,所以需要引入ongl-XXX.jar包及在jsp页面添加
<%@ taglib prefix="s" uri="/struts-tags" %>
login.jsp
<body>
<s:form action="personAction!login" method="post">
<s:textfield name="pname" label="用户名"></s:textfield>
<s:textfield name="pwd" label="密码"></s:textfield>
<tr>
<td colspan="2">
<s:submit theme="simple" value="提交"></s:submit>
<s:submit theme="simple" value="重置"></s:submit>
</td>
</tr>
</s:form>
</body>
show.jsp
<body>
<center>
<a href="addUser.jsp" >添加用户</a>
<a href="UserAction!show" >显示用户</a>
<table border="1">
<s:iterator value="list" status="st" var="user" >
<tr>
<td><s:property value="#user.pid"/></td>
<td><s:property value="#user.pname"/></td>
<td><s:property value="#user.pwd"/></td>
<td><s:property value="#user.pdept"/></td>
<td><s:property value="#user.pdate"/></td>
<td><a href="UserAction!del?pid=<s:property value='pid'/>" >删除</td>
<td><a href="UserAction!showId?pid=<s:property value='pid'/>" >更新</td></td>
</tr>
</s:iterator>
</table>
</center>
</body>
addUser.jsp
<body >
<center>
<s:form action="UserAction!add" method="post">
<s:textfield name="pname" label="用户名"></s:textfield>
<s:textfield name="pwd" label="密码"></s:textfield>
<s:select list="#{'1':'人事部','2':'销售部','3':'总裁部'}" label="部门" name="pdept"></s:select>
<s:textfield name="pdate" label="日期"></s:textfield>
<tr>
<td colspan="2">
<s:submit theme="simple" value="提交"></s:submit>
<s:submit theme="simple" value="重置"></s:submit>
</td>
</tr>
</s:form>
</center>
</body>
update.jsp
<body>
<center>
<s:form action="UserAction!upd" method="post">
<s:hidden name="u.pid" ></s:hidden>
<s:textfield name="u.pname" label="用户名"></s:textfield>
<s:textfield name="u.pwd" label="密码"></s:textfield>
<s:select list="#{'1':'人事部','2':'销售部','3':'总裁部'}" label="部门" name="u.pdept"></s:select>
<s:textfield name="u.pdate" label="日期"></s:textfield>
<tr>
<td colspan="2">
<s:submit theme="simple" value="提交"></s:submit>
<s:submit theme="simple" value="重置"></s:submit>
</td>
</tr>
</s:form>
</center>
</body>
10.数据库表:user_1
这里需要对pid设置自增,见orcl设置id自增中。