MVC项目实战
V | C | M |
视图(View) | 控制器(Controller) | 模型(Model) |
Jsp、EL和JSTL、html、css、js | servlet | JavaBean |
| 接收请求并做出响应 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{
}
}