[](()3)權限攔截
未登入使用者不允計通路背景
- 過濾器
public class LoginFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) resp;
Object user = request.getSession().getAttribute(Constants.USER_SESSION);
// 未登入
if (user == null) {
response.sendRedirect(request.getContextPath() + “/error.jsp”);
}
// 執行下一鍊
chain.doFilter(request, response);
}
@Override
public void destroy() {
}
}
[](()4)修改密碼
[](()(1)Dao層
public interface UserDao {
int modifyPwd(Connection connection, int id, String newPassword);
}
public class UserDaoImpl implements UserDao{
@Override
public int modifyPwd(Connection connection, int id, String newPassword){
if(connection == null){
return 0;
}
String sql = “update smbms_user set userPassword = ? where id = ?”;
//Object[] params = {newPassword,id};
List params = new ArrayList<>();
params.add(newPassword);
params.add(id);
int i = 0;
try {
i = BaseDao.executeUpdate(connection, sql, params);
} catch (SQLException e) {
e.printStackTrace();
} finally {
return i;
}
}
}
[](()(2)Service層
public interface UserService {
boolean modifyPwd(int id, String newPassword);
}
public class UserServiceImpl implements UserService {
@Override
public boolean modifyPwd(int id, String newPassword) {
Connection connection = BaseDao.getConnection();
int i = userDao.modifyPwd(connection, id, newPassword);
// 關閉連接配接
BaseDao.close(connection, null, null);
if (i > 0) {
return true;
}
return false;
}
}
[](()(3)Servlet層
類的複用
public class UserServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String method = req.getParameter(“method”);
if(StringUtils.isNullOrEmpty(method)){
return;
}
// 修改密碼
if (Objects.equals(“modifypwd”, method)) {
modifyPwd(req, resp);
return;
}
// 檢驗舊密碼
if (Objects.equals(“checkpwd”, method)) {
checkPwd(req, resp);
return;
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
private void modifyPwd(HttpServletRequest req, 《一線大廠Java面試題解析+後端開發學習筆記+最新架構講解視訊+實戰項目源碼講義》無償開源 威信搜尋公衆号【程式設計進階路】 HttpServletResponse resp) throws ServletException, IOException {
// —從Session中擷取使用者—
User user = (User) req.getSession().getAttribute(Constants.USER_SESSION);
// Session失效
if(user==null){
req.setAttribute(Constants.MESSAGE,“請重新登入!”);
req.getRequestDispatcher(“/login.jsp”).forward(req,resp);
return;
}
// —得到使用者輸入的舊密碼—
String oldpassword = req.getParameter(“oldpassword”);
if(StringUtils.isNullOrEmpty(oldpassword) || !Objects.equals(user.getUserPassword(),oldpassword)){
// 舊密碼不合法:空 | null | 新舊不一緻
// 請求轉發至修改密碼頁面,傳回
req.setAttribute(Constants.MESSAGE,“舊密碼錯誤!”);
req.getRequestDispatcher(“/jsp/pwdmodify.jsp”).forward(req,resp);
return;
}
// —得到使用者輸入的新密碼—
String newpassword = req.getParameter(“newpassword”);
// 修改密碼
UserServiceImpl userService = new UserServiceImpl();
boolean b = userService.modifyPwd(user.getId(), newpassword);
// 修改成功:移除Session中的User,重定向至登入頁,給出提示資訊,退出
if(b){
req.getSession().removeAttribute(Constants.USER_SESSION);
req.setAttribute(Constants.MESSAGE,“密碼修改成功!請重新登入!”);
req.getRequestDispatcher(“/login.jsp”).forward(req,resp);
return;
}
// 修改失敗:請求轉發至修改密碼頁面,給出提示資訊
req.setAttribute(Constants.MESSAGE,“密碼修改失敗!”);
req.getRequestDispatcher(“/jsp/pwdmodify.jsp”).forward(req,resp);
}
}
- web.xml 中配置 Servlet
userServlet
com.tuwer.servlet.user.UserServlet
userServlet
/jsp/user.do
[](()(4)優化:Ajax檢驗舊密碼
- js片段
$.ajax({
type:“GET”,
url:path+“/jsp/user.do”,
data:{method:“checkpwd”,oldpassword:oldpassword.val()},
dataType:“json”,
success:function(data){
if(data.result == “true”){//舊密碼正确
validateTip(oldpassword.next(),{“color”:“green”},imgYes,true);
}else if(data.result == “false”){//舊密碼輸入不正确
validateTip(oldpassword.next(),{“color”:“red”},imgNo + " 原密碼輸入不正确",false);
}else if(data.result == “sessionerror”){//目前使用者session過期,請重新登入
validateTip(oldpassword.next(),{“color”:“red”},imgNo + " 目前使用者session過期,請重新登入",false);
}else if(data.result == “error”){//舊密碼輸入為空
validateTip(oldpassword.next(),{“color”:“red”},imgNo + " 請輸入舊密碼",false);
}
},
error:function(data){
//請求出錯
validateTip(oldpassword.next(),{“color”:“red”},imgNo + " 請求錯誤",false);
}
});
- Servlet
private void checkPwd(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 結果集
Map<String, String> resultMap = new HashMap<>(1);
// —從Session中擷取使用者—
User user = (User) req.getSession().getAttribute(Constants.USER_SESSION);
// Session失效
if (user == null) {
resultMap.put(“result”, “sessionerror”);
} else {
// —得到使用者輸入的舊密碼—
String oldpassword = req.getParameter(“oldpassword”);
if (StringUtils.isNullOrEmpty(oldpassword)) {
// 舊密碼不合法:空 | null
resultMap.put(“result”, “error”);
} else if (Objects.equals(user.getUserPassword(), oldpassword)) {
// 密碼新舊一緻
resultMap.put(“result”, “true”);
} else {
resultMap.put(“result”, “false”);
}
}
// —傳回json資料—
resp.setContentType(“application/json”);
PrintWriter writer = resp.getWriter();
// 自定義JSON {“result”:“true”}
//writer.print(“{“result”:”" + resultMap.get(“result”) + “”}");
// 調用阿裡巴巴JSON
writer.print(JSONArray.toJSONString(resultMap));
writer.close();
}
com.alibaba
fastjson
1.2.78
- web.xml中不用再注冊(複用)
[](()5、使用者管理
================================================================
[](()1)檢視使用者清單
分頁查詢使用者資訊
- 需要查使用者資訊 / 需要統計使用者總數 / 需要查角色表
- 支援名稱模糊查詢
- 支援按角色查詢

[](()(1)Dao層
- 接口方法
UserDao.java
int getUserCount(Connection connection,String userName,int userRole);
List getUserList(
Connection connection,
String userName,
int userRole,
int startIndex,
int pageSize
);
角色接口
public interface RoleDao {
List getRoleList(Connection connection);
}
- 實作類
UserDaoImpl.java
@Override
public int getUserCount(Connection connection, String userName, int userRole) {
if (connection == null) {
return 0;
}
//String sql = “select count(1) from smbms_user u,smbms_role r where u.userRole = ? and u.userName like ? and u.userRole = r.id”;
// 隻要數量,不需要查角色表
StringBuffer sql = new StringBuffer();
sql.append(“select count(1) as count from smbms_user u”);
// 參數
List params = new ArrayList<>();
// —拼接sql及參數清單—
// 判斷是否有使用者名
boolean noUserName = StringUtils.isNullOrEmpty(userName);
// 判斷是否有用色
boolean noUserRole = userRole < 1;
// 沒有角色
if (noUserRole) {
// 有使用者名
if (!noUserName) {
sql.append(" where u.userName like ?");
params.add(“%” + userName + “%”);
}
}
// 有角色
else {
sql.append(" where u.userRole = ?");
params.add(userRole);
// 有使用者名
if (!noUserName) {
sql.append(" and u.userName like ?");
params.add(“%” + userName + “%”);
}
}
int count = 0;
try {
RowSet rowSet = BaseDao.executeQuery(connection, sql.toString(), params);
if (rowSet.next()) {
count = rowSet.getInt(“count”);
}
} catch (SQLException e) {
e.printStackTrace();
}
return count;
}
@Override
public List getUserList(
Connection connection,
String userName,
int userRole,
int startIndex,
int pageSize) {
if (connection == null) {
return null;
}
StringBuffer sql = new StringBuffer();
sql.append(“select u.*,r.roleName as userRoleName from smbms_user u,smbms_role r where”);
// 參數
List params = new ArrayList<>();
// —拼接sql及參數清單—
// 判斷是否有使用者名
boolean noUserName = StringUtils.isNullOrEmpty(userName);
// 判斷是否有用色
boolean noUserRole = userRole < 1;
// 沒有角色
if (noUserRole) {
// 有使用者名
if (!noUserName) {
sql.append(" u.userName like ? and");
params.add(“%” + userName + “%”);
}
sql.append(" u.userRole = r.id");
}
// 有角色
else {
sql.append(" u.userRole = ? and");
params.add(userRole);
// 有使用者名
if (!noUserName) {
sql.append(" u.userName like ? and");
params.add(“%” + userName + “%”);
}
sql.append(" u.userRole = r.id");
}
sql.append(" order by creationDate desc limit ?,?");
params.add(startIndex - 1);
params.add(pageSize);
List userList = new ArrayList<>();
try {
RowSet rs = BaseDao.executeQuery(connection, sql.toString(), params);
while (rs.next()) {
User user = new User();
user.setId(rs.getInt(“id”));
user.setUserCode(rs.getString(“userCode”));
user.setUserName(rs.getString(“userName”));
user.setUserPassword(rs.getString(“userPassword”));
user.setGender(rs.getInt(“gender”));
user.setBirthday(rs.getDate(“birthday”));
user.setPhone(rs.getString(“phone”));
user.setAddress(rs.getString(“address”));
user.setUserRole(rs.getInt(“userRole”));
user.setCreatedBy(rs.getInt(“createdBy”));
user.setCreationDate((LocalDateTime) rs.getObject(“creationDate”));
user.setModifyBy(rs.getInt(“modifyBy”));
user.setModifyDate((LocalDateTime) rs.getObject(“modifyDate”));
user.setUserRoleName(rs.getString(“roleName”));
//user.setUserRoleName(rs.getString(rs.getMetaData().getColumnName(14)));
userList.add(user);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
return userList;
}
}
RoleDaoImpl.java
public class RoleDaoImpl implements RoleDao{
@Override
public List getRoleList(Connection connection) {
if(connection == null){
return null;
}
String sql = “select * from smbms_role order by creationDate desc”;
List roleList = new ArrayList<>();
try {
RowSet rs = BaseDao.executeQuery(connection, sql, null);
while (rs.next()){
Role r = new Role();
r.setId(rs.getInt(“id”));
r.setRoleCode(rs.getString(“roleCode”));
r.setRoleName(rs.getString(“roleName”));
r.setCreatedBy(rs.getInt(“createdBy”));
r.setCreatedBy(rs.getInt(“createdBy”));
r.setCreationDate((LocalDateTime) rs.getObject(“creationDate”));
r.setModifyBy(rs.getInt(“modifyBy”));
r.setModifyDate((LocalDateTime) rs.getObject(“modifyDate”));
roleList.add®;
}
} catch (SQLException e) {
e.printStackTrace();
}
return roleList;
}
}
[](()(2)Service層
- 接口方法
UserService.java
int getUserCount(String userName,int userRole);
List getUserList(
String userName,
int userRole,
int startIndex,
int pageSize
);
RoleService.java
public interface RoleService {
List getRoleList();
}
- 實作類
UserServiceImpl.java
@Override
public int getUserCount(String userName, int userRole) {
Connection connection = BaseDao.getConnection();
int count = userDao.getUserCount(connection, userName, userRole);
// 關閉連接配接
BaseDao.close(connection, null, null);
return count;
}
@Override
public List getUserList(String userName, int userRole, int startIndex, int pageSize) {
Connection connection = BaseDao.getConnection();
List userList = userDao.getUserList(connection, userName, userRole, startIndex, pageSize);
// 關閉連接配接
BaseDao.close(connection, null, null);
return userList;
}
RoleServiceImpl.java
public class RoleServiceImpl implements RoleService {
RoleDao roleDao;
public RoleServiceImpl() {
this.roleDao = new RoleDaoImpl();
}
@Override
public List getRoleList() {
Connection connection = BaseDao.getConnection();
List roleList = roleDao.getRoleList(connection);
// 關閉連接配接
BaseDao.close(connection, null, null);
return roleList;
}
}
[](()(3)Servlet層
UserServlet.java
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String method = req.getParameter(“method”);
if (StringUtils.isNullOrEmpty(method)) {
return;
}
// 查詢使用者清單
if (Objects.equals(“query”, method)) {
query(req, resp);
return;
}
}
private void query(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// —從Session中擷取使用者—
User user = (User) req.getSession().getAttribute(Constants.USER_SESSION);
// Session失效
if (user == null) {
req.setAttribute(Constants.MESSAGE, “請重新登入!”);
req.getRequestDispatcher(“/login.jsp”).forward(req, resp);
return;
}
// —準備參數—
// 要查詢使用者名
String queryName = req.getParameter(“queryname”);
// 要查詢角色
int userRoleId = PageUtil.strToInt_0123(req.getParameter(“queryUserRole”));
// 總記錄數
UserServiceImpl userService = new UserServiceImpl();
int rows = userService.getUserCount(queryName, userRoleId);
// 總頁數
int pages = PageUtil.getPages(rows, Constants.PAGE_SIZE);
// 目前頁
int currentPage = PageUtil.getCurrentPage(req.getParameter(“pageIndex”), pages);
// 查詢起始位置
int startIndex = PageUtil.getStartIndex(currentPage, Constants.PAGE_SIZE);
// —擷取角色清單—
RoleServiceImpl roleService = new RoleServiceImpl();
List roleList = roleService.getRoleList();
// 把角色清單存入Session中,友善後面使用
req.getSession().setAttribute(Constants.ROLE_SESSION, roleList);
// —擷取使用者清單—
List userList = userService.getUserList(queryName, userRoleId, startIndex, Constants.PAGE_SIZE);
// 轉發請求
req.setAttribute(“roleList”, roleList);
req.setAttribute(“userList”, userList);
req.setAttribute(“totalCount”, rows);
req.setAttribute(“currentPageNo”, currentPage);
req.setAttribute(“totalPageCount”, pages);
req.setAttribute(“queryUserName”, queryName);
req.setAttribute(“queryUserRole”, userRoleId);
req.setAttribute(“startIndex”, startIndex);
req.getRequestDispatcher(“/jsp/userlist.jsp”).forward(req, resp);
}
[](()2)添加使用者
[](()(1)Dao層
boolean userCodeIsExist(Connection connection,String userCode);
int addUser(Connection connection,User user);
@Override
public boolean userCodeIsExist(Connection connection, String userCode) {
if (connection == null) {
return false;
}
String sql = “select count(1) as count from smbms_user where userCode = ?”;
// 參數
List params = new ArrayList<>();
params.add(userCode);
boolean isExist = false;
try {
RowSet rowSet = BaseDao.executeQuery(connection, sql, params);
if (rowSet.next()) {
if (rowSet.getInt(“count”) > 0) {
isExist = true;
}
}
} catch (SQLException e) {
e.printStackTrace();
}
return isExist;
}
@Override
public int addUser(Connection connection, User user) {
if (connection == null) {
return 0;
}
String sql = “insert into smbms_user (userCode,userName,userPassword,” +
"userRole,gender,birthday,phone,address,creationDate,createdBy) " +
“values(?,?,?,?,?,?,?,?,?,?)”;
// 參數
List params = new ArrayList<>();
params.add(user.getUserCode());
params.add(user.getUserName());
params.add(user.getUserPassword());
params.add(user.getUserRole());
params.add(user.getGender());
params.add(user.getBirthday());
params.add(user.getPhone());
params.add(user.getAddress());
params.add(user.getCreationDate());
params.add(user.getCreatedBy());
int i = 0;
try {
i = BaseDao.executeUpdate(connection, sql, params);
} catch (SQLException e) {
e.printStackTrace();
}
return i;
}
[](()(2)Service層
boolean userCodeIsExist(String userCode);
boolean addUser(User user);
@Override
public boolean userCodeIsExist(String userCode) {
Connection connection = BaseDao.getConnection();
boolean isExist = userDao.userCodeIsExist(connection,userCode);
// —關閉—
BaseDao.close(connection, null, null);
return isExist;
}
@Override
public boolean addUser(User user) {
boolean flag = false;
Connection connection = BaseDao.getConnection();
try {
// —開啟事務—
connection.setAutoCommit(false);
// —添加—
int i = userDao.addUser(connection, user);
// —正常傳回,送出事務—
connection.commit();
if (i > 0) {
flag = true;
}
} catch (SQLException e) {
e.printStackTrace();
// —異常—
// —事務復原—
try {
connection.rollback();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
} finally {
// —關閉—
BaseDao.close(connection, null, null);
}
// —傳回—
return flag;
}
[](()(3)Servlet層
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String method = req.getParameter(“method”);
if (StringUtils.isNullOrEmpty(method)) {
return;
}
// 添加使用者
if (Objects.equals(“add”, method)) {
addUser(req, resp);
return;
}
// 驗證userCode是否已存在
if (Objects.equals(“ucexist”, method)) {
userCodeIsExist(req, resp);
return;
}
}
private void userCodeIsExist(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 結果集
Map<String, String> resultMap = new HashMap<>(1);
// —得到使用者賬号—
String userCode = req.getParameter(“userCode”);
if (StringUtils.isNullOrEmpty(userCode)) {
// 使用者賬号不合法:空 | null
resultMap.put(“userCode”, “error”);
} else if (new UserServiceImpl().userCodeIsExist(userCode)) {
// 已存在
resultMap.put(“userCode”, “exist”);
} else {
// 不存在
resultMap.put(“userCode”, “notexist”);
}
// —傳回json資料—
resp.setContentType(“application/json”);
PrintWriter writer = resp.getWriter();
// 自定義JSON {“result”:“true”}
//writer.print(“{“result”:”" + resultMap.get(“result”) + “”}");
// 調用阿裡巴巴JSON
writer.print(JSONArray.toJSONString(resultMap));
writer.close();
}
private void addUser(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// —從Session中擷取使用者—
User user = (User) req.getSession().getAttribute(Constants.USER_SESSION);
// Session失效
if (user == null) {
req.setAttribute(Constants.MESSAGE, “請重新登入!”);
req.getRequestDispatcher(“/login.jsp”).forward(req, resp);
return;
}
// —接收參數—
String userCode = req.getParameter(“userCode”).trim();
String userName = req.getParameter(“userName”).trim();
String userPassword = req.getParameter(“userPassword”);
String gender = req.getParameter(“gender”).trim();
String birthday = req.getParameter(“birthday”).trim();
String phone = req.getParameter(“phone”).trim();
String address = req.getParameter(“address”).trim();
String userRole = req.getParameter(“userRole”).trim();
// —生成User—
User newUser = new User();
newUser.setUserCode(userCode);
newUser.setUserName(userName);
newUser.setUserPassword(userPassword);
newUser.setGender(Integer.parseInt(gender));
try {
newUser.setBirthday(new SimpleDateFormat(“yyyy-MM-dd”).parse(birthday));
} catch (ParseException e) {
e.printStackTrace();
}
newUser.setPhone(phone);
newUser.setAddress(address);
newUser.setUserRole(Integer.parseInt(userRole));
// 建立時間:目前時間
newUser.setCreationDate(LocalDateTime.now());
// 建立者:目前登入使用者Id
newUser.setCreatedBy(user.getId());
// —添加—
UserServiceImpl userService = new UserServiceImpl();
// 添加成功:重定向至使用者清單頁
if (userService.addUser(newUser)) {
resp.sendRedirect(req.getContextPath() + “/jsp/user.do?method=query”);
return;
}
// 添加失敗:轉發至添加使用者頁
req.getRequestDispatcher(“/jsp/useradd.jsp”).forward(req, resp);
}
[](()3)檢視特定使用者
[](()(1)Dao層
User getUserById(Connection connection,int userId);
@Override
public User getUserById(Connection connection, int userId) {
if (connection == null) {
return null;
}
String sql = “select u.*,r.roleName from smbms_user u,smbms_role r where u.id = ? and u.userRole = r.id”;
// 參數
List params = new ArrayList<>();
params.add(userId);
User user = null;
try {
RowSet rs = BaseDao.executeQuery(connection, sql, params);
if (rs.next()) {
user = new User();
user.setId(userId);
user.setUserCode(rs.getString(“userCode”));
user.setUserName(rs.getString(“userName”));
user.setUserPassword(rs.getString(“userPassword”));
user.setGender(rs.getInt(“gender”));
user.setBirthday(rs.getDate(“birthday”));
user.setPhone(rs.getString(“phone”));
user.setAddress(rs.getString(“address”));
user.setUserRole(rs.getInt(“userRole”));
user.setCreatedBy(rs.getInt(“createdBy”));
user.setCreationDate((LocalDateTime) rs.getObject(“creationDate”));
user.setModifyBy(rs.getInt(“modifyBy”));
user.setModifyDate((LocalDateTime) rs.getObject(“modifyDate”));
user.setUserRoleName(rs.getString(rs.getMetaData().getColumnName(14)));
}
} catch (SQLException e) {
e.printStackTrace();
}
return user;
}
[](()(2)Service層
User getUserById(int userId);
@Override
public User getUserById(int userId) {
Connection connection = BaseDao.getConnection();
User user = userDao.getUserById(connection, userId);
// —關閉—
BaseDao.close(connection, null, null);
return user;
}
[](()(3)Servlet層
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String method = req.getParameter(“method”);
if (StringUtils.isNullOrEmpty(method)) {
return;
}
// 檢視使用者
if (Objects.equals(“view”, method)) {
viewUser(req, resp);
return;
}
}
private void viewUser(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// —從Session中擷取使用者—
User user = (User) req.getSession().getAttribute(Constants.USER_SESSION);
// Session失效
if (user == null) {
req.setAttribute(Constants.MESSAGE, “請重新登入!”);
req.getRequestDispatcher(“/login.jsp”).forward(req, resp);
return;
}
// —準備參數—
// 要查詢使用者Id
String userId = req.getParameter(“uid”);
if (StringUtils.isNullOrEmpty(userId)) {
// 使用者Id不合法:空 | null
return;
} else {
User u = new UserServiceImpl().getUserById(Integer.parseInt(userId));
// 轉發請求
req.setAttribute(“user”, u);
req.getRequestDispatcher(“/jsp/userview.jsp”).forward(req, resp);
}
}
[](()4)修改使用者
[](()(1)Dao層
boolean modifyUser(Connection connection,User user);
@Override
public boolean modifyUser(Connection connection, User user) {
if (connection == null) {
return false;
}
String sql = “update smbms_user set userName = ?,gender = ?,birthday = ?,phone = ?,address = ?,userRole = ?,modifyBy = ?,modifyDate = ? where id = ?”;
// 參數
List params = new ArrayList<>();
params.add(user.getUserName());
params.add(user.getGender());
params.add(user.getBirthday());
params.add(user.getPhone());
params.add(user.getAddress());
params.add(user.getUserRole());
params.add(user.getModifyBy());
params.add(user.getModifyDate());
params.add(user.getId());
boolean success = false;
try {
int i = BaseDao.executeUpdate(connection, sql, params);
if (i > 0) {
success = true;
}
} catch (SQLException e) {
e.printStackTrace();
}
return success;
}
[](()(2)Service層
boolean modifyUser(User user);
@Override
public boolean modifyUser(User user) {
boolean flag = false;
Connection connection = BaseDao.getConnection();
try {
// —開啟事務—
connection.setAutoCommit(false);
// —修改—
flag = userDao.modifyUser(connection, user);
// —正常傳回,送出事務—
connection.commit();
} catch (SQLException e) {
e.printStackTrace();
// —異常—
// —事務復原—
try {
connection.rollback();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
} finally {
// —關閉—
BaseDao.close(connection, null, null);
}
// —傳回—
return flag;
}
[](()(3)Servlet層
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String method = req.getParameter(“method”);
if (StringUtils.isNullOrEmpty(method)) {
return;
}
// 進入修改使用者頁面
if (Objects.equals(“modify”, method)) {
goModifyUser(req, resp);
return;
}
// 修改使用者
if (Objects.equals(“modifyexe”, method)) {
modifyUser(req, resp);
return;
}
}
private void goModifyUser(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// —從Session中擷取使用者—
User user = (User) req.getSession().getAttribute(Constants.USER_SESSION);
// Session失效
if (user == null) {
req.setAttribute(Constants.MESSAGE, “請重新登入!”);
req.getRequestDispatcher(“/login.jsp”).forward(req, resp);
return;
}
// —準備參數—
// 使用者Id
String userId = req.getParameter(“uid”);
if (StringUtils.isNullOrEmpty(userId)) {
// 使用者Id不合法:空 | null
return;
} else {
User u = new UserServiceImpl().getUserById(Integer.parseInt(userId));
// 轉發請求
req.setAttribute(“user”, u);
req.getRequestDispatcher(“/jsp/usermodify.jsp”).forward(req, resp);
}
}
private void modifyUser(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// —從Session中擷取使用者—
User user = (User) req.getSession().getAttribute(Constants.USER_SESSION);
// Session失效
if (user == null) {
req.setAttribute(Constants.MESSAGE, “請重新登入!”);
req.getRequestDispatcher(“/login.jsp”).forward(req, resp);
return;
}
// —準備參數—
// 使用者Id
String userId = req.getParameter(“uid”);
String userName = req.getParameter(“userName”);
String gender = req.getParameter(“gender”);
String birthday = req.getParameter(“birthday”);
String phone = req.getParameter(“phone”);
String address = req.getParameter(“address”);
String userRole = req.getParameter(“userRole”);
if (StringUtils.isNullOrEmpty(userId)) {
// 使用者Id不合法:空 | null
return;
} else {
// —生成User—
UserServiceImpl userService = new UserServiceImpl();
User newUser = userService.getUserById(Integer.parseInt(userId));
newUser.setUserName(userName);
newUser.setGender(Integer.parseInt(gender));
try {
newUser.setBirthday(new SimpleDateFormat(“yyyy-MM-dd”).parse(birthday));
} catch (ParseException e) {
e.printStackTrace();
}
newUser.setPhone(phone);
newUser.setAddress(address);
newUser.setUserRole(Integer.parseInt(userRole));
// 修改時間:目前時間
newUser.setCreationDate(LocalDateTime.now());
// 建立者:目前登入使用者Id
newUser.setCreatedBy(user.getId());
if (userService.modifyUser(newUser)) {
// 修改成功:傳回使用者資訊頁面
resp.sendRedirect(req.getContextPath() + “/jsp/user.do?method=view&uid=” + userId);
} else {
// 修改失敗:傳回修改頁面
// 轉發請求
req.setAttribute(“user”, newUser);
req.getRequestDispatcher(“/jsp/usermodify.jsp”).forward(req, resp);
}
}
}
[](()5)删除使用者
[](()(1)Dao層
boolean deleteUser(Connection connection,int userId);
@Override
public boolean deleteUser(Connection connection, int userId) {
if (connection == null) {
return false;
}
String sql = “delete from smbms_user where id = ?”;
// 參數
List params = new ArrayList<>();
params.add(userId);
boolean success = false;
try {
if (BaseDao.executeUpdate(connection, sql, params) > 0) {
success = true;
}
} catch (SQLException e) {
e.printStackTrace();
}
return success;
}
[](()(2)Service層
boolean deleteUser(int userId);
@Override
public boolean deleteUser(int userId) {
Connection connection = BaseDao.getConnection();
boolean success = userDao.deleteUser(connection, userId);
// —關閉—
BaseDao.close(connection, null, null);
return success;
}
[](()(3)Servlet層
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String method = req.getParameter(“method”);
if (StringUtils.isNullOrEmpty(method)) {
return;
}
// 删除使用者
if (Objects.equals(“deluser”, method)) {
deleteUser(req, resp);
return;
}
}
private void deleteUser(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 結果集
Map<String, String> resultMap = new HashMap<>(1);
// —得到使用者id—
String userId = req.getParameter(“uid”);
if (StringUtils.isNullOrEmpty(userId)) {
// 使用者Id不合法:空 | null
resultMap.put(“result”, “false”);
} else if (new UserServiceImpl().deleteUser(Integer.parseInt(userId))) {
// 已存在
resultMap.put(“result”, “true”);
} else {
// 不存在
resultMap.put(“result”, “notexist”);
}
// —傳回json資料—