struts2入门(四)——带登录验证的人员管理demo

一、实现带登录验证的人员管理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自增中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值