06_MVC项目实战

MVC项目实战

V

C

M

视图(View)

控制器(Controller)

模型(Model)

Jsp、EL和JSTL、html、css、js

servlet

JavaBean

  1. 接收用户的输入(表单)
  2. (被动)展示数据给用户

接收请求并做出响应

Servlet

实体类 entity

保存数据状态 dao

处理业务逻辑 service

公共类 common

过滤器 filter

login.jsp

index.jsp

UpdateUser.jsp

/common/page.jsp

/css/index.css

LoginServlet

GetUsersServlet

DeleteUserServlet

ToUpdateUserServlet

ToAddUserServlet

DoUpdateUserServlet

BaseDao

User Role

UserDao  UserDaoImpl

RoleDao  RoleDaoImpl

UserService  UserServiceImpl

RoleService  RoleServiceImpl

EncodingFilter SessionFilter

db.properties

松耦合,扩展性和维护性增强      标准mvc--自定义mvc

项目:登陆查询+CRUD+分页+模糊查询+多表连接+过滤器

login.jsp->LoginServlet->GetUsersServlet->index.jsp

         ->ToAddUserServlet->UpdateUser.jsp->DoUpdateUserServlet

         ->ToUpdateUserServlet->UpdateUser.jsp->DoUpdateUserServlet

         ->DeleteUserServlet->GetUsersServlet

项目名:t38(Eclipse>Dynamic Web Project)

配置tomcat:Window>Preferences>server>RuntimeEnvironme

        t38>BuildPath>Configure_>Library>addServerRuntime

配置Database:DataSourceExplorer>DatabaseConnections>New Oracle

properties: jdbc:oracle:thin:@localhost:1521:ORCL

Oracle Thin Driver Oracle 11--JAR List(ojdbc6.jar)

完全限定名:绝对路径 /项目名/ (包.类)

项目调试:Tomcat>Debug Server>浏览器localhost:8080/t38/login.jsp登陆>进入debug

F5 单步执行,观察变量、sql语句

PL/SQL Developer:T38@ORCL

创建用户:T38 (角色权限:connect resource)

创建表格Table:==>实体类entity

tb_user用户表:

    ID NUMBER (PK_USER_ID Primary)

    USERNAME VARCHAR(20)

    PASSWORD VARCHAR(20)

    STATUS NUMBER

    CREATETIME DATE

    ROLE_ID NUMBER (FK_USER_ROLE_ID Foreign TB_ROLE ID)

    Sequences:SEQ_USER

tb_role角色表:

    ID NUMBER (PK_ROLE_ID Primary)

    ROLENAME VARCHAR(20)

select * from tb_user;

insert into tb_user values(seq_user.nextval,'admin','123',1,sysdate);

insert into tb_user values(seq_user.nextval,'sa','456',2,sysdate);

insert into tb_user values(seq_user.nextval,'zhangsan','456',1,sysdate);

insert into tb_user values(seq_user.nextval,'lisi','789',1,sysdate);

commit;

-- currentPage 当前页

-- pageSize 每页显示的条数

--rownum根据结果集生成

select t2.* from

(select t1.*,rownum rn from tb_user t1

where rownum <=(currPage*pageSize)) t2

where rn > (currentPage-1)*pageSize;

select t2.* from (select t1.*,rownum rn from tb_user t1

where rownum <=6) t2

where rn>3

select t2.* from

(select a.*,b.rolename,rownum rn

from tb_user a

inner join tb_role b

on a.role_id = b.id where rownum <=6) t2

where rn>3;

WebContent

/WEB-INF:/lib(ojdbc.6.jar、standard.jar、jstl.jar)

/css/index.css(index.jsp样式):

body,table,td,tr,form{

    padding:0;

    margin:0;

    font-size:12px;

    text-align:center;

}

.main_table{

    width:98%;

    border-collapse:collapse;

    margin:0 auto;

}

.main_table .head_tr{

    font-weight:bold;

    background-color:#ccc;  

}

.main_table td{

    height:20px;

}

视图层View

login.jsp:登陆窗口界面

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>登录</title>

<script type="text/javascript">

    function checkInput() {

        //var oUsername = document.getElementById("username");

        var oUsername = document.loginForm.username;//表单名称.其元素名称

        var reg = /^\s*$/g; //正则表达式:/^  $/g

        if (reg.test(oUsername.value)) {

            alert("用户名不能为空!");

            oUsername.focus();

            return false;

        }

        var oPassword = document.loginForm.password;

        if (reg.test(oPassword.value)) {

            alert("密码不能为空!");

            oPassword.focus();

            return false;

        }

        return true;

    }

</script>

</head>

<body>

    <form name="loginForm" action="/t38/LoginServlet" method="post" onsubmit="return checkInput()">

        用户名:<input type="text" name="username"

maxlength="20" /><br />

        密码:<input type="password" name="password"

maxlength="20" /><br />

        <input type="submit" value="登录" />

    </form>

</body>

</html>

index.jsp:主界面

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>用户列表</title>

<link style="text/css" rel="stylesheet" href="/t38/css/index.css" />

</head>

<body>

<form name="searchForm" action="/t38/GetUsersServlet" method="post">

<input type="hidden" name="currentPage" />

<input type="hidden" name="pageSize" />

<table style="width:70%;margin:0 auto;">

    <tr>

        <td>用户名:<input type="text" name="username" value=

"${condition.username }" /></td>

        <td>密码:<input type="text" name="password" value=

"${condition.password }" /></td>

        <td>状态:<select name="status">

                    <option value="0" <c:if test="${condition.status == 0 }"> selected</c:if> >全部</option>

                    <option value="1" <c:if test="${condition.status == 1 }"> selected</c:if> >正常</option>

                    <option value="2" <c:if test="${condition.status == 2 }"> selected</c:if> >禁用</option>

                </select>

        </td>

        <td>

            <input type="submit"  value="查询" />

        </td>

    </tr>

</table>

<hr />

</form>

<table class="main_table" border="1">

    <tr class="head_tr">

        <td>序号</td>

        <td>用户名</td>

        <td>密码</td>

        <td>状态</td>

        <td>角色</td>

        <td>创建时间</td>

        <td>操作/<a href="/t38/ToAddUserServlet">增加</a></td>

    </tr>

    <c:forEach var="u" items="${requestScope.list }" varStatus="s">

    <tr>

        <td>${(pager.currentPage-1)*pager.pageSize + s.index +1 }</td>

        <td>${u.username }</td>

        <td>${u.password }</td>

        <td>${u.status == 1 ? "正常"

:"<span style='color:red'>禁用</span>"}</td>

        <td>${u.rolename }</td>

        <td>

         <fmt:formatDate value="${u.createtime }" pattern="yyyy-MM-dd"/>

        </td>

        <td>

            <!-- ?id 带参数 -->

            <a href="/t38/ToUpdateUserServlet?id=${u.id}">修改</a>

            <a href="javascript:if(confirm('您确定要删除吗?'))

{window.location.href='/t38/DeleteUserServlet?id=${u.id}'}">删除</a>

        </td>

    </tr>

    </c:forEach>

</table>

<!-- 包含分页界面 -->

<%@ include file="/common/page.jsp" %>

</body>

</html>

updateUser.jsp:增加/修改界面

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>编辑/保存用户</title>

</head>

<body>

    <form action="/t38/DoUpdateUserServlet" method="post">

        <input type="hidden" name="id" value="${item.id }" />

        用户名:<input type="text" name="username" value=

"${item.username }" /><br />

        密码:<input type="text" name="password" value=

"${item.password }" /><br />

        角色:<select name="roleId">

                <c:forEach var="role" items="${roleList }">

                    <option value="${role.id }"

<c:if test="${item.roleId == role.id }">selected

</c:if>>${role.rolename }

</option>

                </c:forEach>

        </select><br />

        状态:<select name="status">

                <option value="1"

<c:if test="${item.status == 1 }"> selected</c:if>

>正常</option>

                <option value="2"

<c:if test="${item.status == 2 }"> selected</c:if>

>禁用</option>

        </select><br />

        <input type="submit" value="保存" />

    </form>

</body>

</html>

/common/page.jsp:分页界面

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<script type="text/javascript">

    function jump(p,s){

//window.location.href="/t38/GetUsersServlet?currentPage="+p+"&p

ageSize="+s;

        //document.searchForm.currentPage.value = 0;

        //document.searchForm.ageSize.value = 0;

        //document.searchForm.submit();

        var oForm = document.searchForm || document.forms[0];

        with(oForm){

            currentPage.value = p;

            pageSize.value = s;

            submit();  

        }

    }

</script>

<table style="width:98%;margin:0 auto;">

    <tr>

        <td style="text-align:left">

            <span style="color:red">${pager.currentPage }</span>

/${pager.totalPage }

            ${pager.totalCount }

        </td>

        <td style="text-align:right">

            <c:choose>

                <c:when test="${pager.currentPage == 1 }">

                    首页

                    上一页

                </c:when>

                <c:otherwise>

<a href="javascript:jump(1,${pager.pageSize})">首页</a>

                    <a href="javascript:jump(${pager.currentPage-1 }

,${pager.pageSize})">上一页</a>

                </c:otherwise>

            </c:choose>

            <c:choose>

                <c:when test="${pager.totalPage == pager.currentPage }">

                    下一页

                    末页

                </c:when>

                <c:otherwise>

                    <a href="javascript:jump(${pager.currentPage+1 }

,${pager.pageSize})">下一页</a>

                    <a href="javascript:jump(${pager.totalPage }

,${pager.pageSize})">末页</a>

                </c:otherwise>

            </c:choose>

            转到<input id="gPage" type="text" style="width:20px" value=

"${pager.currentPage }" /><input type="button" value="GO" onclick="jump(document.getElementById('gPage').value

,${pager.pageSize})" />

            每页显示<select id="gSize" onchange="jump(1,this.value)">

                <option value="3" <c:if test="${pager.pageSize == 3 }"> selected</c:if> >3</option>

                <option value="5" <c:if test="${pager.pageSize == 5 }"> selected</c:if> >5</option>

                <option value="10" <c:if test="${pager.pageSize == 10 }"> selected</c:if> >10</option>

                <option value="20" <c:if test="${pager.pageSize == 20 }"> selected</c:if> >20</option>

            </select>

        </td>

    </tr>

</table>

/WEB-INF/web.xml:

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">

  <display-name>t38</display-name>

  <welcome-file-list>

    <welcome-file>index.html</welcome-file>

    <welcome-file>index.htm</welcome-file>

    <welcome-file>index.jsp</welcome-file>

    <welcome-file>default.html</welcome-file>

    <welcome-file>default.htm</welcome-file>

    <welcome-file>default.jsp</welcome-file>

  </welcome-file-list>

<!-- 过滤器 -->

  <filter>

    <filter-name>encodingFilter</filter-name>

    <filter-class>com.hfxt.filter.EncodingFilter</filter-class>

    <init-param>

      <param-name>encoding</param-name>

      <param-value>UTF-8</param-value>

    </init-param>

  </filter>

  <filter-mapping>

    <filter-name>encodingFilter</filter-name>

    <url-pattern>/*</url-pattern>

  </filter-mapping>

  <filter>

    <filter-name>sessionFilter</filter-name>

    <filter-class>com.hfxt.filter.SessionFilter</filter-class>

  </filter>

  <filter-mapping>

    <filter-name>sessionFilter</filter-name>

    <url-pattern>/*</url-pattern>

  </filter-mapping>

<!-- Servlet:自动生成 -->

  <servlet>

    <description></description>

    <display-name>LoginServlet</display-name>

    <servlet-name>LoginServlet</servlet-name>

    <servlet-class>com.hfxt.servlet.LoginServlet</servlet-class>

  </servlet>

  <servlet-mapping>

    <servlet-name>LoginServlet</servlet-name>

    <url-pattern>/LoginServlet</url-pattern>

  </servlet-mapping>

  <servlet>

    <description></description>

    <display-name>GetUserServlet</display-name>

    <servlet-name>GetUserServlet</servlet-name>

    <servlet-class>com.hfxt.servlet.GetUserServlet</servlet-class>

  </servlet>

  <servlet-mapping>

    <servlet-name>GetUserServlet</servlet-name>

    <url-pattern>/GetUserServlet</url-pattern>

  </servlet-mapping>

  <servlet>

    <description></description>

    <display-name>DeleteUserServlet</display-name>

    <servlet-name>DeleteUserServlet</servlet-name>

    <servlet-class>com.hfxt.servlet.DeleteUserServlet</servlet-class>

  </servlet>

  <servlet-mapping>

    <servlet-name>DeleteUserServlet</servlet-name>

    <url-pattern>/DeleteUserServlet</url-pattern>

  </servlet-mapping>

  <servlet>

    <description></description>

    <display-name>ToUpdateUserServlet</display-name>

    <servlet-name>ToUpdateUserServlet</servlet-name>

    <servlet-class>com.hfxt.servlet.ToUpdateUserServlet</servlet-class>

  </servlet>

  <servlet-mapping>

    <servlet-name>ToUpdateUserServlet</servlet-name>

    <url-pattern>/ToUpdateUserServlet</url-pattern>

  </servlet-mapping>

  <servlet>

    <description></description>

    <display-name>DoUpdateUserServlet</display-name>

    <servlet-name>DoUpdateUserServlet</servlet-name>

    <servlet-class>com.hfxt.servlet.DoUpdateUserServlet</servlet-class>

  </servlet>

  <servlet-mapping>

    <servlet-name>DoUpdateUserServlet</servlet-name>

    <url-pattern>/DoUpdateUserServlet</url-pattern>

  </servlet-mapping>

  <servlet>

    <description></description>

    <display-name>ToAddUserServlet</display-name>

    <servlet-name>ToAddUserServlet</servlet-name>

    <servlet-class>com.hfxt.servlet.ToAddUserServlet</servlet-class>

  </servlet>

  <servlet-mapping>

    <servlet-name>ToAddUserServlet</servlet-name>

    <url-pattern>/ToAddUserServlet</url-pattern>

  </servlet-mapping>

</web-app>

Java Resources:/src

com.hfxt.entity

User:

public class User {

    private int id;

    private String username;

    private String password;

    private int status;

    private Date createtime;

    private int roleId;

    private String rolename;//业务字段

    public int getId() {

        return id;

    }

    public void setId(int id) {

        this.id = id;

    }

    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 getStatus() {

        return status;

    }

    public void setStatus(int status) {

        this.status = status;

    }

    public Date getCreatetime() {

        return createtime;

    }

    public void setCreatetime(Date createtime) {

        this.createtime = createtime;

    }

    public String getRolename() {

        return rolename;

    }

    public void setRolename(String rolename) {

        this.rolename = rolename;

    }

    public int getRoleId() {

        return roleId;

    }

    public void setRoleId(int roleId) {

        this.roleId = roleId;

    }

}

Role:

public class Role {

    private int id;

    private String rolename;

    public int getId() {

        return id;

    }

    public void setId(int id) {

        this.id = id;

    }

    public String getRolename() {

        return rolename;

    }

    public void setRolename(String rolename) {

        this.rolename = rolename;

    }

}

公共类:com.hfxt.common

Pager(分页):

package com.hfxt.common;

/**

 * 分页bean 封装了分页所需的信息

 * @author Ftmy

 */

public class Pager {

    private int currentPage = 1;//当前页,默认第一页

    private int pageSize = 3;//每页显示的条数

    private int totalCount = 0;//总条数

    private int totalPage = 1;//总页数,计算得到

    /**

     * 计算总页数

     * @return

     */

    public int getTotalPage() {

        totalPage = totalCount % pageSize == 0

? totalCount / pageSize : totalCount / pageSize + 1;

        return totalPage;

    }

    public int getCurrentPage() {

        return currentPage;

    }

    public void setCurrentPage(int currentPage) {

        if(currentPage < 1){

            currentPage = 1;

        }

        this.currentPage = currentPage;

    }

    public int getPageSize() {

        return pageSize;

    }

    public void setPageSize(int pageSize) {

        this.pageSize = pageSize;

    }

    public int getTotalCount() {

        return totalCount;

    }

    public void setTotalCount(int totalCount) {

        this.totalCount = totalCount;

    }

}

db.properties:

driver=oracle.jdbc.driver.OracleDriver

url=jdbc:oracle:thin:@localhost:1521:ORCL

dbname=t38

dbpass=123456

DAO层:com.hfxt.dao

BaseDao(基类):

public class BaseDao {

    private ResourceBundle rb = ResourceBundle.getBundle("db");

/**

     * 获取数据库连接

     * @return

     */

    public Connection getConn(){

        Connection conn = null;

        try {

            Class.forName(rb.getString("driver"));

            conn = DriverManager.getConnection(rb.getString("url")

,rb.getString("dbname"),rb.getString("dbpass"));

        } catch (ClassNotFoundException e) {

            e.printStackTrace();

        } catch (SQLException e) {

            e.printStackTrace();

        }

        return conn;

    }

    /**

     * 关闭资源

     * @param rs 结果集

     * @param pstmt

     * @param conn

     */

    public void closeAll(ResultSet rs,PreparedStatement pstmt,Connection conn){

        if(rs != null){

            try {

                rs.close();

            } catch (SQLException e) {

                e.printStackTrace();

            }

        }

        if(pstmt != null){

            try {

                pstmt.close();

            } catch (SQLException e) {

                e.printStackTrace();

            }

        }

        try {

            if(conn != null && !conn.isClosed()){

                conn.close();

            }

        } catch (SQLException e) {

            e.printStackTrace();

        }

    }

    /**

     * 执行增、删、改的方法

     * @param sql 要执行的sql

     * @param args sql中的参数

     * @return 受影响的行数

     */

    public int executeSql(String sql,Object...args){

        int row = 0; //要返回的受影响的行数

        Connection conn = null;

        PreparedStatement pstmt = null;

        try {

            conn = getConn();

            pstmt = conn.prepareStatement(sql);

            if(args != null && args.length > 0){

                for (int i = 0; i < args.length; i++) {

                    //sql语句中参数赋值

                    pstmt.setObject(i+1, args[i]);

                }

            }

            row = pstmt.executeUpdate();

        } catch (Exception e) {

            e.printStackTrace();

        }finally{

            closeAll(null, pstmt, conn);

        }

        return row;

    }

    /**

     * 判断查询结果集中是否存在某列

     * @param rs 查询结果集

     * @param columnName 列名

     * @return true 存在; false 不存在

     */

    public boolean isExistColumn(ResultSet rs, String columnName) {

        try {

            if (rs.findColumn(columnName) > 0) {

                return true;

            }

        } catch (SQLException e) {

            return false;

        }

        return false;

    }

}

UserDao

public interface UserDao {

    /**

     * 根据用户名查询用户对象

     * @param username

     * @return

     */

    public User getUserByUsername(String username);

    /**

     * 分页显示用户信息

     * @param pager 分页bean

     * @return

     */

    public List<User> getUsersByPage(Pager pager,User condition);

    /**

     * 根据sql获取条数

     * @param sql

     * @return

     */

    public int getCount(String sql);

    /**

     * 根据id查询用户信息

     * @param id

     * @return

     */

    public User getUserById(int id);

    /**

     * 查询所有的用户信息

     * @return

     */

    public List<User> getAllUsers();

    /**

     * 删除用户

     * @param id 要删除的记录的id

     * @return 受影响的行数

     */

    public int deleteUser(int id);

    /**

     * 增加

     * @param item 封装了要增加的数据的对象

     * @return 受影响的行数

     */

    public int addUser(User item);

    /**

     * 修改

     * @param item 封装了要修改的数据的对象

     * @return 受影响的行数

     */

    public int updateUser(User item);

}

RoleDao:

public interface RoleDao {

    public List<Role> getAllRoles();

}

com.hfxt.dao.impl(实现类)

UserDaoImpl

/**

 * tb_user表进行增、删、改、查等操作

 * @author Administrator

 *

 */

public class UserDaoImpl extends BaseDao implements UserDao{

    /**

     * 根据sql查询用户信息

     * @param sql 要执行的sql

     * @param args sql的参数

     * @return 用户集合

     */

    private List<User> getUsersBySql(String sql,Object...args){

        List<User> list = new ArrayList<User>();

        Connection conn = null;

        PreparedStatement pstmt = null;

        ResultSet rs = null;

        try {

            conn = getConn();

            pstmt = conn.prepareStatement(sql);

            if(args != null && args.length >0){

                for (int i = 0; i < args.length; i++) {

                    pstmt.setObject(i+1, args[i]);

                }

            }

            rs = pstmt.executeQuery();

            boolean exists = isExistColumn(rs, "rolename");

            while(rs.next()){

                User user = new User();

                user.setId(rs.getInt("ID"));

                user.setUsername(rs.getString("USERNAME"));

                user.setPassword(rs.getString("PASSWORD"));

                user.setStatus(rs.getInt("STATUS"));

                user.setCreatetime(rs.getTimestamp("CREATETIME"));

                user.setRoleId(rs.getInt("ROLE_ID"));

                if(exists){

                    user.setRolename(rs.getString("ROLENAME"));

                }

                list.add(user);

            }

        } catch (Exception e) {

            e.printStackTrace();

        }finally{

            closeAll(rs, pstmt, conn);

        }

        return list;

    }

   

    @Override

    public User getUserByUsername(String username){

        String sql = "select * from tb_user where username=?";

        List<User> list = getUsersBySql(sql, username);

        return list != null && list.size() > 0 ? list.get(0) : null;

    }

    @Override

    public User getUserById(int id){

        String sql = "select * from tb_user where id=?";

        List<User> list = getUsersBySql(sql, id);

        return list != null && list.size() > 0? list.get(0) : null;

    }

    @Override

    public List<User> getAllUsers(){

        String sql = "select * from tb_user";

        return getUsersBySql(sql);

    }

    @Override

    public int getCount(String sql){

        int count = 0;//获取的条数

        Connection conn = null;

        PreparedStatement pstmt = null;

        ResultSet rs = null;

        try {

            conn = getConn();

            pstmt = conn.prepareStatement(sql);

            rs = pstmt.executeQuery();

            if(rs.next()){

                count = rs.getInt(1);

            }

        } catch (Exception e) {

            e.printStackTrace();

        }finally{

            closeAll(rs, pstmt, conn);

        }

        return count;

    }

    @Override

    public List<User> getUsersByPage(Pager pager,User condition){

        String conditionSql = "";

        String sql = "select t2.* from (select a.*,b.rolename,rownum rn

from tb_user a

inner join tb_role b

on a.role_id = b.id where rownum <=? ";

        if(condition != null){

            if(condition.getUsername() != null &&

!"".equals(condition.getUsername().trim())){

                conditionSql += " and username like '%"

+condition.getUsername().trim()+"%'";

            }

            if(condition.getPassword() != null &&

!"".equals(condition.getPassword().trim())){

                conditionSql += " and password ='"

+condition.getPassword().trim()+"'";

            }

            if(condition.getStatus() != 0){

                conditionSql += " and status="+condition.getStatus();

            }

        }

        sql += conditionSql;

        sql += ") t2 where rn > ?";

        List<User> list = getUsersBySql(sql,

                pager.getCurrentPage() * pager.getPageSize(),

                (pager.getCurrentPage() - 1) * pager.getPageSize());

        String countSql = "select count(1) from tb_user where 1=1 ";

        countSql += conditionSql;

        int count = getCount(countSql);

        pager.setTotalCount(count);

        return list;

    }

    @Override

    public int deleteUser(int id){

        String sql = "delete from tb_user where id=?";

        return executeSql(sql,id);

    }

    @Override

    public int addUser(User item){

        String sql = "insert into tb_user

values(seq_user.nextval,?,?,?,sysdate,?)";

        return executeSql(sql, item.getUsername(),item.getPassword()

,item.getStatus(),item.getRoleId());

    }

    @Override

    public int updateUser(User item){

        String sql = "update tb_user set username=?,password=?

,status=?,role_id=? where id=?";

        return executeSql(sql, item.getUsername(),item.getPassword(),item.getStatus(),item.getRoleId(),item.getId());

    }

}

RoleDaoImpl:

public class RoleDaoImpl extends BaseDao implements RoleDao {

    public List<Role> getAllRoles() {

        String sql = "select * from tb_role";

        return getRolesBySql(sql);

    }

    private List<Role> getRolesBySql(String sql,Object...args){

        List<Role> list = new ArrayList<Role>();

        Connection conn = null;

        PreparedStatement pstmt = null;

        ResultSet rs = null;

        try {

            conn = getConn();

            pstmt = conn.prepareStatement(sql);

            if (args != null && args.length > 0) {

                for (int i = 0; i < args.length; i++) {

                    pstmt.setObject(i + 1, args[i]);

                }

            }

            rs = pstmt.executeQuery();

            while (rs.next()) {

                Role role = new Role();

                role.setId(rs.getInt("ID"));

                role.setRolename(rs.getString("ROLENAME"));

                list.add(role);

            }

        } catch (Exception e) {

            e.printStackTrace();

        } finally {

            closeAll(rs, pstmt, conn);

        }

        return list;

    }

}

Service层:com.hfxt.service

UserService接口:

public interface UserService {

    /**

     * 检查登录

     * @param username 传进来的用户名

     * @param password 传进来的密码

     * @return true:登录成功,返回用户信息User

     */

    public User checkLogin(String username,String password);

    /**

     * 根据id查询用户信息

     * @param id

     * @return

     */

    public User getUserById(int id);

    /**

     * 查询所有的用户信息

     * @return

     */

    public List<User> getAllUsers();

    /**

     * 分页显示用户信息

     * @param pager 分页bean

     * @return

     */

    public List<User> getUsersByPage(Pager pager,User condition);

    /**

     * 删除用户

     * @param id 要删除的记录的id

     * @return 受影响的行数

     */

    public int deleteUser(int id);

    /**

     * 增加

     * @param item 封装了要增加的数据的对象

     * @return 受影响的行数

     */

    public int addUser(User item);

    /**

     * 修改

     * @param item 封装了要修改的数据的对象

     * @return 受影响的行数

     */

    public int updateUser(User item);

}

RoleService:

public interface RoleService {

    public List<Role> getAllRoles();

}

com.hfxt.service.impl(实现类)

UserServiceimpl:

public class UserServiceImpl implements UserService{

    private UserDao userDao = new UserDaoImpl();

    @Override

    public User checkLogin(String username,String password){

        //根据用户名查询用户对象

        User user = userDao.getUserByUsername(username);

        if(user != null){ //用户名存在

            if(user.getPassword().equals(password)){//密码也对

                return user; //登录成功

            }

        }

        return null; //登录失败

    }

    @Override

    public User getUserById(int id){

        return userDao.getUserById(id);

    }

    @Override

    public List<User> getAllUsers(){

        return userDao.getAllUsers();

    }

    @Override

    public List<User> getUsersByPage(Pager pager,User condition){

        return userDao.getUsersByPage(pager,condition);

    }

    @Override

    public int deleteUser(int id){

        return userDao.deleteUser(id);

    }

    @Override

    public int addUser(User item){

        return userDao.addUser(item);

    }

    @Override

    public int updateUser(User item){

        return userDao.updateUser(item);

    }

}

RoleServiceImpl:

public class RoleServiceImpl implements RoleService {

    private RoleDao roleDao = new RoleDaoImpl();

    @Override

    public List<Role> getAllRoles() {

        return roleDao.getAllRoles();

    }

}

Servlet层:com.hfxt.servlet

LoginServlet:

public class LoginServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        this.doPost(request, response);

    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //处理登录

        String strUsername = request.getParameter("username");

        String strPassword = request.getParameter("password");

        //服务端验证

        PrintWriter out = response.getWriter();

        if(strUsername == null || "".equals(strUsername.trim())){

            out.print("<script>alert('用户名不能为空!')

;window.location.href='/t38/login.jsp';</script>");

            out.close();

            return;

        }

        if(strPassword == null || "".equals(strPassword.trim())){

            out.print("<script>alert('密码不能为空!')

;window.location.href='/t38/login.jsp';</script>");

            out.close();

            return;

        }

        //调用service

        UserService userService = new UserServiceImpl();

        User loginUser = userService.checkLogin(strUsername

, strPassword);

        if(loginUser != null){ //登录成功

        //跳到一个servlet来抓取数据,把数据存入request中,转发到index.jsp

            //response.sendRedirect("/t38/index.jsp");

            //把用户的身份信息存入session

            HttpSession session = request.getSession();

            session.setAttribute("loginUser", loginUser);

            response.sendRedirect("/t38/GetUsersServlet");

        }else{

            out.print("<script>alert('用户名或密码错误!')

;window.location.href='/t38/login.jsp';</script>");

        }

    }

}

GetUsersServlet:

@WebServlet("/GetUsersServlet")

public class GetUsersServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        this.doPost(request, response);

    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //处理post请求参数的乱码

        //request.setCharacterEncoding("UTF-8");

        //接收查询参数

        String strUsername = request.getParameter("username");

        String strPassword = request.getParameter("password");

        String strStatus = request.getParameter("status");

        //封装查询条件

        User condition = new User();

        condition.setUsername(strUsername);

        condition.setPassword(strPassword);

        if(strStatus != null && !"".equals(strStatus.trim())){

            condition.setStatus(Integer.parseInt(strStatus));

        }

        //调用service

        UserService userService = new UserServiceImpl();

        //List<User> list = userService.getAllUsers();

        Pager pager = new Pager();

        String strCurrentPage = request.getParameter("currentPage");

        String strPageSize = request.getParameter("pageSize");

        if(strCurrentPage != null && !"".equals(strCurrentPage.trim())){

            pager.setCurrentPage(Integer.parseInt(strCurrentPage));

        }

        if(strPageSize != null && !"".equals(strPageSize.trim())){

            pager.setPageSize(Integer.parseInt(strPageSize));

        }

        List<User> list = userService.getUsersByPage(pager,condition);

        //list存入request

        request.setAttribute("list", list);

        request.setAttribute("pager", pager);

        request.setAttribute("condition", condition);

        //只能转发

        request.getRequestDispatcher("/index.jsp")

.forward(request, response);

    }

}

ToAddUserServlet:

public class ToAddUserServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        this.doPost(request, response);

    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        RoleService roleService = new RoleServiceImpl();

        List<Role> roleList = roleService.getAllRoles();

        request.setAttribute("roleList", roleList);

        request.getRequestDispatcher("/updateUser.jsp")

.forward(request, response);

    }

}

ToUpdateUserServlet:

public class ToUpdateUserServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        this.doPost(request, response);

    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

         //调用service

        String strId = request.getParameter("id");

        UserService userService = new UserServiceImpl();

        User item = userService.getUserById(Integer.parseInt(strId));

        RoleService roleService = new RoleServiceImpl();

        List<Role> roleList = roleService.getAllRoles();

        //item存入request

        request.setAttribute("item", item);

        request.setAttribute("roleList", roleList);

        request.getRequestDispatcher("/updateUser.jsp")

.forward(request, response);

    }

}

DoUpdateUserServlet:

public class DoUpdateUserServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        this.doPost(request, response);

    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //处理响应的乱码

        //response.setContentType("text/html;charset=UTF-8");

        //处理增加、修改

        //request.setCharacterEncoding("UTF-8");

        //接收请求参数的值

        String strId = request.getParameter("id");

        String username = request.getParameter("username");

        String password = request.getParameter("password");

        String status = request.getParameter("status");

        String roleId = request.getParameter("roleId");

        //服务端验证(*)

        //封装数据

        User item = new User();

        item.setUsername(username);

        item.setPassword(password);

        item.setStatus(Integer.parseInt(status));

        item.setRoleId(Integer.parseInt(roleId));

        //调用service

        UserService userService = new UserServiceImpl();

        int row = 0;

        if(strId == null || "".equals(strId.trim())){//add

            row = userService.addUser(item);

        }else{//update

            item.setId(Integer.parseInt(strId));

            row = userService.updateUser(item);

        }

        PrintWriter out = response.getWriter();

        if(row > 0){

            out.print("<script>alert('保存成功!')

;window.location.href='/t38/GetUsersServlet'</script>");

            out.close();

            return;

        }else{

            out.print("<script>alert('保存失败,请重试或联系管理员!')

;history.go(-1)</script>");

            out.close();

        }

    }

}

DeleteUserServlet:

public class DeleteUserServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        this.doPost(request, response);

    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //处理响应的乱码

        //response.setContentType("text/html;charset=UTF-8");

        //删除操作

        String strId = request.getParameter("id");

        //做验证

        PrintWriter out = response.getWriter();

        if(strId == null || "".equals(strId.trim())){

            out.print("<script>alert('参数错误!')

;window.location.href='/t38/GetUsersServlet'</script>");

            out.close();

            return;

        }

        //调用service

        UserService userService = new UserServiceImpl();

        int row = userService.deleteUser(Integer.parseInt(strId));

        if(row > 0){

            response.sendRedirect("/t38/GetUsersServlet");

        }else{

            out.print("<script>alert('删除失败,请重试或联系管理员!')

;history.go(-1);</script>");

            out.close();

        }

    }

}

过滤器:com.hfxt.filter

EncodingFilter

public class EncodingFilter implements Filter {

    private String encoding;

    @Override

    public void destroy() {

    }

    @Override

    public void doFilter(ServletRequest request, ServletResponse

response,FilterChain filterChain) throws IOException,ServletException {

        if (encoding == null || "".equals(encoding)){

            encoding = "UTF-8";

        }

        //处理响应的乱码

        response.setContentType("text/html;charset="+encoding);

        //处理post请求参数的乱码

        request.setCharacterEncoding(encoding);

        //放过

        filterChain.doFilter(request, response);

    }

    @Override

public void init(FilterConfig filterConfig) throws ServletException{

        encoding = filterConfig.getInitParameter("encoding");

    }

}

SessionFilter

public class SessionFilter implements Filter {

    @Override

    public void destroy() {

    }

    @Override

    public void doFilter(ServletRequest request, ServletResponse response,FilterChain filterChain) throws IOException, ServletException{

        HttpServletRequest req = (HttpServletRequest) request;

        HttpServletResponse res =(HttpServletResponse) response;

        //定义个不需要验证身份的页面等

        String[] excludeFiles = {"/login.jsp","/LoginServlet"

,".css",".jpg",".gif",".png"};

        //尝试着去session中获取用户身份信息

        HttpSession session = req.getSession();

        User loginUser = (User) session.getAttribute("loginUser");

        if(loginUser != null){

            filterChain.doFilter(request, response);

        }else{

            String uri = req.getRequestURI();

            boolean flag = false;

            for(String file : excludeFiles){

                if(uri.indexOf(file) !=-1){

                    flag = true;

                    break;

                }

            }

            if(flag){

                filterChain.doFilter(request, response);

            }else{

                //跳转到登录页

                PrintWriter out = res.getWriter();

                out.print("<script>alert('您还未登录或长时间未操作,请重新登

陆!');window.location.href='/t38/login.jsp'</script>");

                out.close();

            }

        }

    }

    @Override

    public void init(FilterConfig filterConfig) throws ServletException{

    }

}

 

猜你喜欢

转载自blog.csdn.net/ftmy_c/article/details/81210338
今日推荐