SMBMS

article/2025/10/29 12:05:16

SMBMS

在这里插入图片描述

项目搭建

  1. 搭建一个maven web项目

  2. 配置Tomcat

  3. 测试项目是否能够跑起来

  4. 导入项目中会遇到的jar包

    jsp,servlet,mysql驱动,jstl,starand

  5. 创建项目包结构

在这里插入图片描述

  1. 编写实体类

    ORM映射:表-类映射

  2. 编写基础公共类

    1. 数据库配置文件

      driver=com.mysql.jdbc.Driver
      url=jdbc:mysql://localhost:3306/smbms?useUnicode=true&characterEncoding=utf-8
      username=root
      password=0927
    2. 编写数据库公共类

      package com.hao.dao;import java.io.IOException;
      import java.io.InputStream;
      import java.sql.*;
      import java.util.Properties;/*** @author 许浩* @date 2020/7/19 - 16:19*///操作数据库的公共类
      public class BaseDao {private static String driver;private static String url;private static String username;private static String password;//静态代码块,类加载的时候就初始化了static {Properties properties = new Properties();//通过类加载器来加载资源InputStream is = BaseDao.class.getClassLoader().getResourceAsStream("db.properties");try {properties.load(is);} catch (IOException e) {e.printStackTrace();}driver = properties.getProperty("driver");url = properties.getProperty("url");username = properties.getProperty("username");password = properties.getProperty("password");}//获取数据库的连接public static Connection getConnection() {Connection connection = null;try {Class.forName(driver);connection = DriverManager.getConnection(url, username, password);} catch (Exception e) {e.printStackTrace();}return connection;}//编写查询公共类public static ResultSet execute(Connection connection, PreparedStatement preparedStatement, ResultSet resultSet, String sql, Object[] params) throws SQLException {preparedStatement = connection.prepareStatement(sql);for (int i = 0; i < params.length; i++) {preparedStatement.setObject(i + 1, params[i]);}resultSet = preparedStatement.executeQuery();return resultSet;}//编写增删改公共方法public static int execute(Connection connection, PreparedStatement preparedStatement, String sql, Object[] params) throws SQLException {preparedStatement = connection.prepareStatement(sql);for (int i = 0; i < params.length; i++) {preparedStatement.setObject(i + 1, params[i]);}int updateRows = preparedStatement.executeUpdate();return updateRows;}//释放资源public static boolean closeResource(Connection connection, PreparedStatement preparedStatement, ResultSet resultSet) {boolean flag = true;if (resultSet != null) {try {resultSet.close();//GC回收resultSet = null;} catch (SQLException e) {e.printStackTrace();flag = false;}}if (preparedStatement != null) {try {preparedStatement.close();//GC回收preparedStatement = null;} catch (SQLException e) {e.printStackTrace();flag = false;}}if (connection != null) {try {connection.close();//GC回收connection = null;} catch (SQLException e) {e.printStackTrace();flag = false;}}return flag;}
      }
    3. 编写字符编码过滤器并注册

      package com.hao.filter;import javax.servlet.*;
      import java.io.IOException;/*** @author 许浩* @date 2020/7/19 - 16:51*/
      public class CharacterEncodingFilter implements Filter {public void init(FilterConfig filterConfig) throws ServletException {}public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {servletRequest.setCharacterEncoding("utf-8");servletResponse.setCharacterEncoding("utf-8");filterChain.doFilter(servletRequest,servletResponse);}public void destroy() {}
      }
  3. 导入静态资源

登录功能实现

在这里插入图片描述

  1. 编写前端页面

  2. 设置首页

    <!--设置欢迎页面-->
    <welcome-file-list><welcome-file>login.jsp</welcome-file>
    </welcome-file-list>
    
  3. 编写dao层登录用户登录的接口

    //得到要登录的用户
    public User getLoginUser(Connection connection, String userCode, String userPassword) throws SQLException;
    
  4. 编写dao接口的实现类

    //得到要登录的用户
    public User getLoginUser(Connection connection, String userCode, String userPassword) throws SQLException {PreparedStatement pstm = null;ResultSet rs = null;User user = null;if (connection != null) {String sql = "select * from smbms_user where userCode=? and userPassword=?";Object[] params = {userCode, userPassword};rs = BaseDao.execute(connection, pstm, rs, sql, params);if (rs.next()) {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(rs.getTimestamp("creationDate"));}BaseDao.closeResource(null, pstm, rs);}return user;
    }
    
  5. 业务层接口

    public interface UserService {//用户登录public User login(String usercode, String password);
    }
    
  6. 业务层实现类

    package com.hao.service.user;import com.hao.dao.BaseDao;
    import com.hao.dao.user.UserDao;
    import com.hao.dao.user.UserDaoImpl;
    import com.hao.pojo.User;
    import org.junit.jupiter.api.DynamicTest;
    import org.junit.jupiter.api.Test;import java.sql.Connection;
    import java.sql.SQLException;/*** @author 许浩* @date 2020/7/19 - 19:35*/
    public class UserServiceImpl implements UserService {//业务层都会调用dao层,所以我们要引入Dao层private UserDao userDao;public UserServiceImpl() {userDao = new UserDaoImpl();}public User login(String usercode, String password) {Connection connection = null;User user = null;try {connection = BaseDao.getConnection();//通过业务层调用对应的具体的数据库操作user = userDao.getLoginUser(connection, usercode);} catch (SQLException e) {e.printStackTrace();} finally {BaseDao.closeResource(connection, null, null);}return user;}}
  7. 编写Servlet

    package com.hao.servlet;import com.hao.pojo.User;
    import com.hao.service.user.UserServiceImpl;
    import com.hao.util.Constants;import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;/*** @author 许浩* @date 2020/7/19 - 20:11*/
    public class LoginServlet extends HttpServlet {//Servlet:控制层,调用业务层代码@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//获取用户名和密码String userCode = req.getParameter("userCode");String userPassword = req.getParameter("userPassword");//和数据库中的密码进行对比,调用业务层UserServiceImpl userService = new UserServiceImpl();User user = userService.login(userCode, userPassword);if (user != null) {    //查有此人,可以登录//将用户的信息放到Session中req.getSession().setAttribute(Constants.User_Session, user);//跳转到主页resp.sendRedirect("jsp/frame.jsp");} else { //查无此人//转发会登录页面,顺带提示用户名或密码错误req.setAttribute("error", "用户名或密码错误");req.getRequestDispatcher("login.jsp").forward(req, resp);}}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
    }
  8. 注册Servlet

        <!--Servlet--><servlet><servlet-name>LoginServlet</servlet-name><servlet-class>com.hao.servlet.LoginServlet</servlet-class></servlet><servlet-mapping><servlet-name>LoginServlet</servlet-name><url-pattern>/login.do</url-pattern></servlet-mapping>
    
  9. 测试访问,确保以上功能成功

登录功能优化

注销功能:

思路:

  1. 移除Session

    public class LogoutServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//用处用户的Sessionreq.getSession().removeAttribute(Constants.User_Session);//返回登录页面resp.sendRedirect("/login.jsp");}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
    }
    
  2. 注册xml

    <servlet><servlet-name>LogoutServlet</servlet-name><servlet-class>com.hao.servlet.LogoutServlet</servlet-class>
    </servlet>
    <servlet-mapping><servlet-name>LogoutServlet</servlet-name><url-pattern>/jsp/logout.do</url-pattern>
    </servlet-mapping>
    

登录拦截优化

编写 过滤器,并注册

public class SysFilter implements Filter {public void init(FilterConfig filterConfig) throws ServletException {}public void doFilter(ServletRequest req, ServletResponse resp, FilterChain filterChain) throws IOException, ServletException {HttpServletRequest request=(HttpServletRequest)req;HttpServletResponse response=(HttpServletResponse)resp;//过滤器,从Session中获取用户User user = (User) request.getSession().getAttribute(Constants.User_Session);if (user==null){    //已经移除或注销了response.sendRedirect("/smbms/error.jsp");}filterChain.doFilter(req,resp);}public void destroy() {}
}

密码修改

  1. 导入前端素材

  2. 写项目,建议从底层向上写
    在这里插入图片描述

  3. UserDao接口

    //修改当前用户密码
    public int updatePwd(Connection connection,String id,String password) throws SQLException;
    
  4. UserDao实现类

    //修改当前用户密码
    public int updatePwd(Connection connection, String id, String password) throws SQLException {PreparedStatement pstm = null;int excute = 0;if (connection != null) {String sql = "update smbms_user set userPassword=? where id=?";Object[] params = {password, id};excute = BaseDao.execute(connection, pstm, sql, params);BaseDao.closeResource(null, pstm, null);}return excute;
    }
    
  5. UserService接口

    //根据用户ID修改密码
    public boolean updatePwd(int id, String password);
    
  6. UserService实现类

    public boolean updatePwd(int id, String password) {Connection connection = null;boolean flag = false;//修改密码try {connection = BaseDao.getConnection();if (userDao.updatePwd(connection, id, password) > 0) {flag = true;}} catch (SQLException e) {e.printStackTrace();} finally {BaseDao.closeResource(connection, null, null);}return flag;
    }
    
  7. 实现复用,需要提出取方法

    public void updatePwd(HttpServletRequest req,HttpServletResponse resp){//从Session里面拿ID;Object attribute = req.getSession().getAttribute(Constants.User_Session);String newpassword = req.getParameter("newpassword");boolean flag = false;if (attribute != null && newpassword != null) {UserServiceImpl userService = new UserServiceImpl();flag = userService.updatePwd(((User) (attribute)).getId(), newpassword);if (flag) {req.setAttribute("message", "修改密码成功,请退出,并使用新密码登录");//密码修改成功,移除当前Sessionreq.getSession().removeAttribute(Constants.User_Session);} else {//密码修改失败req.setAttribute("message", "密码修改失败");}} else {req.setAttribute("message", "新密码有问题");}try {req.getRequestDispatcher("pwdmodify.jsp").forward(req, resp);} catch (ServletException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}
    }
    
  8. 注册xml

    <servlet><servlet-name>UserServlet</servlet-name><servlet-class>com.hao.servlet.UserServlet</servlet-class>
    </servlet>
    <servlet-mapping><servlet-name>UserServlet</servlet-name><url-pattern>/jsp/user.do</url-pattern>
    </servlet-mapping>
    

优化密码修改使用Ajax

  1. 阿里巴巴的fastjson

    <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.4</version>
    </dependency>
    
  2. 代码实现

    //验证旧密码,session中有用户的密码
    public void pwdModify(HttpServletRequest req, HttpServletResponse resp) {Object o = req.getSession().getAttribute(Constants.User_Session);String oldpassword = req.getParameter("oldpassword");//万能的MapMap<String, String> resultMap = new HashMap<String, String>();if (o == null) {    //Session失效了resultMap.put("result", "sessionerror");} else if (StringUtils.isNullOrEmpty(oldpassword)) {  //输入密码为空resultMap.put("result", "error");} else {String userPassword = ((User) o).getUserPassword();    //Session中用户的密码if (oldpassword.equals(userPassword)) {resultMap.put("result", "true");} else {resultMap.put("result", "false");}}try {resp.setContentType("application/json");PrintWriter writer = resp.getWriter();//JSONArray 阿里巴巴的JSON工具类,转换工具/*resultMap=["result","sessionerror"]Json格式={key:value}*/writer.write(JSONArray.toJSONString(resultMap));writer.flush();writer.close();} catch (IOException e) {e.printStackTrace();}
    }
    
  3. 测试

用户管理实现

思路:

在这里插入图片描述

  1. 用户分页的工具类

  2. 用户列表页面导入

    userlist.jsp

    rollpage.jsp

1、获取用户数量

  1. UserDao

    //查询用户总数
    public int getUserCount(Connection connection,String username,int userRole) throws SQLException;
    
  2. UserDaoImpl

    //根据用户名或角色查询用户总数
    public int getUserCount(Connection connection, String username, int userRole) throws SQLException {PreparedStatement pstm = null;ResultSet rs = null;int count = 0;if (connection != null) {List<Object> list = new ArrayList<Object>();StringBuffer sql = new StringBuffer();sql.append("SELECT COUNT(1) as count FROM smbms_user u,smbms_role r where u.userRole=r.id");if (!StringUtils.isNullOrEmpty(username)) {sql.append(" and u.userName like ?");list.add("%" + username + "%");//index:0}if (userRole > 0) {sql.append(" and u.userRole like ?");list.add(userRole); //index:1}//把list转换为数组Object[] params = list.toArray();rs = BaseDao.execute(connection, pstm, rs, sql.toString(), params);if (rs.next()) {count = rs.getInt("count");}BaseDao.closeResource(null, pstm, rs);}return count;
    }
    
  3. UserService

    //查询记录数
    public int getUserCount(String username,int userRole);
    
  4. UserServiceImpl

    //查询记录数
    public int getUserCount(String username, int userRole) {Connection connection=null;int userCount = 0;try {connection=BaseDao.getConnection();userCount = userDao.getUserCount(connection, username, userRole);} catch (SQLException e) {e.printStackTrace();}finally {BaseDao.closeResource(connection,null,null);}return  userCount;
    }
    

2.获取用户列表

  1. UserDao

    //通过条件查询-userList
    public List<User> getUserList(Connection connection, String userName, int userRole, int currentPageNo, int pageSize) throws SQLException;
    
  2. UserDaoImpl

    //通过条件查询-userList
    public List<User> getUserList(Connection connection, String userName, int userRole, int currentPageNo, int pageSize) throws SQLException {PreparedStatement pstm = null;ResultSet rs = null;List<User> userList = new ArrayList<User>();if(connection != null){StringBuffer sql = new StringBuffer();sql.append("select u.*,r.roleName as userRoleName from smbms_user u,smbms_role r where u.userRole = r.id");List<Object> list = new ArrayList<Object>();if(!StringUtils.isNullOrEmpty(userName)){sql.append(" and u.userName like ?");list.add("%"+userName+"%");}if(userRole > 0){sql.append(" and u.userRole = ?");list.add(userRole);}sql.append(" order by creationDate DESC limit ?,?");currentPageNo = (currentPageNo-1)*pageSize;list.add(currentPageNo);list.add(pageSize);Object[] params = list.toArray();System.out.println("sql ----> " + sql.toString());rs = BaseDao.execute(connection, pstm, rs, 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.setGender(rs.getInt("gender"));_user.setBirthday(rs.getDate("birthday"));_user.setPhone(rs.getString("phone"));_user.setUserRole(rs.getInt("userRole"));_user.setUserRoleName(rs.getString("userRoleName"));userList.add(_user);}BaseDao.closeResource(null, pstm, rs);}return userList;
    }
    
  3. UserService

    //根据条件查询用户列表
    public List<User> getUserList(String queryUserName, int queryUserRole, int currentPageNo, int pageSize);
    
  4. UserServiceImpl

    //根据条件查询用户列表
    public List<User> getUserList(String queryUserName,int queryUserRole,int currentPageNo, int pageSize) {Connection connection = null;List<User> userList = null;System.out.println("queryUserName ---- > " + queryUserName);System.out.println("queryUserRole ---- > " + queryUserRole);System.out.println("currentPageNo ---- > " + currentPageNo);System.out.println("pageSize ---- > " + pageSize);try {connection = BaseDao.getConnection();userList = userDao.getUserList(connection, queryUserName,queryUserRole,currentPageNo,pageSize);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{BaseDao.closeResource(connection, null, null);}return userList;
    }
    

3、获取角色操作

为了 职责统一,可以把角色的操作单独放在一个包,和pojo相对应

  1. RoleDao

    public interface RoleDao {//获取角色列表public List<Role> getRoleList(Connection connection) throws SQLException;
    }
    
  2. RoleDaoImpl

    //获取角色列表
    public List<Role> getRoleList(Connection connection) throws SQLException {ResultSet resultSet = null;PreparedStatement pstm = null;List<Role> list = new ArrayList<Role>();if (connection != null) {String sql = "select * from smbms_role";pstm = connection.prepareStatement(sql);Object[] params = {};resultSet = BaseDao.execute(connection, pstm, resultSet, sql, params);while (resultSet.next()) {Role _role = new Role();_role.setId(resultSet.getInt("id"));_role.setRoleCode(resultSet.getString("roleCode"));_role.setRoleName(resultSet.getString("roleName"));list.add(_role);}BaseDao.closeResource(null, pstm, resultSet);}return list;
    }
    
  3. RoleService

    public interface RoleService {//获得角色列表public List<Role> getRoleList();
    }
    
  4. RoleServiceImpl

    //获得角色列表
    public class RoleServiceImpl implements RoleService {//引入Daoprivate RoleDao roleDao;public RoleServiceImpl() {roleDao = new RoleDaoImpl();}public List<Role> getRoleList() {Connection connection = null;List<Role> roleList = null;try {connection = BaseDao.getConnection();roleList = roleDao.getRoleList(connection);} catch (SQLException e) {e.printStackTrace();} finally {BaseDao.closeResource(connection, null, null);}return roleList;}
    }
    

4、用户显示的Servlet

  1. 获取用户前端的数据
  2. 判断请求是否需要执行,看参数的值判断
  3. 为了实现分页,需要就算出当前页面和分页面,页面大小
  4. 用户列表展示
  5. 返回前端
//查询用户列表
public void query(HttpServletRequest req, HttpServletResponse resp) {//从前端获取数据String queryUsername = req.getParameter("queryname");String temp = req.getParameter("queryUserRole");  //临时量,会随用户选择而变化String pageIndex = req.getParameter("pageIndex"); //前端选择的页面值int queryUserRole = 0;    //用户选择角色默认为0(1,2,3)//获取用户列表UserServiceImpl userService = new UserServiceImpl();List<User> userList = null;//第一次走这个请求,一定是第一页,页面大小固定int pageSize = 5; //默认页面大小为5int currentPageNo = 1;    //起始页if (queryUsername == null) {queryUsername = "";}if (temp != null && !temp.equals("")) {queryUserRole = Integer.parseInt(temp); //获取角色}if (pageIndex != null) {currentPageNo = Integer.parseInt(pageIndex);}//获得用户的总数(用于分页)int totalCount = userService.getUserCount(queryUsername, queryUserRole);//分页数支持PageSupport pageSupport = new PageSupport();pageSupport.setCurrentPageNo(currentPageNo);pageSupport.setPageSize(pageSize);pageSupport.setTotalCount(totalCount);int totalPageCount = pageSupport.getTotalPageCount(); //获得分页数//控制首页和尾页if (totalPageCount < 1) {currentPageNo = 1;} else if (totalPageCount < currentPageNo) { //当前页大于总页数currentPageNo = totalPageCount;}//获取用户列表展示userList = userService.getUserList(queryUsername, queryUserRole, currentPageNo, pageSize);req.setAttribute("userList", userList);//获取角色列表RoleServiceImpl roleService = new RoleServiceImpl();List<Role> roleList = roleService.getRoleList();req.setAttribute("roleList", roleList); //用户列表req.setAttribute("totalCount", totalCount); //用户总数总数req.setAttribute("currentPageNo", currentPageNo);   //当前页req.setAttribute("totalPageCount",totalPageCount);   //页面总数req.setAttribute("queryUserName",queryUsername);req.setAttribute("queryUserRole",queryUserRole);//返回前端try {req.getRequestDispatcher("userlist.jsp").forward(req, resp);} catch (ServletException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}
}

5、添加用户

  1. UserDao

    //增加用户信息
    public int add(Connection connection,User user) throws Exception;
    
  2. UserDaoImpl

    public int add(Connection connection, User user) throws Exception {PreparedStatement pstm = null;int updateRows = 0;if (connection != null) {String sql = "insert into smbms_user (userCode,userName,userPassword,userRole,gender,birthday,phone,address,creationDate,createdBy) values(?,?,?,?,?,?,?,?,?,?)";Object[] params = {user.getUserCode(), user.getUserName(), user.getUserPassword(), user.getUserRole(), user.getGender(), user.getBirthday(), user.getPhone(), user.getAddress(), user.getCreationDate(), user.getCreatedBy()};updateRows = BaseDao.execute(connection, pstm, sql, params);BaseDao.closeResource(null, pstm, null);}return updateRows;
    }
    
  3. UserService

    //添加用户
    public boolean add(User user);
    
  4. UserServiceImpl

    public boolean add(User user) {Connection connection = null;boolean flag = false;try {connection = BaseDao.getConnection();connection.setAutoCommit(false);//开启事务int updateRows = userDao.add(connection, user);connection.commit();if (updateRows > 0) {flag = true;} else {System.out.println("添加失败");}} catch (Exception e) {e.printStackTrace();try {connection.rollback();//添加失败,数据回滚} catch (SQLException throwables) {throwables.printStackTrace();}}return flag;
    }
    
  5. UserServlet

    //添加用户
    public void add(HttpServletRequest req, HttpServletResponse resp) throws Exception {String userCode = req.getParameter("userCode");String userName = req.getParameter("userName");String userPassword = req.getParameter("userPassword");String gender = req.getParameter("gender");String birthday = req.getParameter("birthday");String phone = req.getParameter("phone");String address = req.getParameter("userName");String userRole = req.getParameter("userRole");User user = new User();user.setUserCode(userCode);user.setUserName(userName);user.setUserPassword(userPassword);user.setAddress(address);try {user.setBirthday(new SimpleDateFormat("yyyy-MM-dd").parse(birthday));} catch (ParseException e) {e.printStackTrace();}user.setGender(Integer.valueOf(gender));user.setPhone(phone);user.setUserRole(Integer.valueOf(userRole));user.setCreationDate(new Date());user.setCreatedBy(((User) req.getSession().getAttribute(Constants.User_Session)).getId());UserService userService = new UserServiceImpl();if (userService.add(user)) {resp.sendRedirect(req.getContextPath() + "/jsp/user.do?method=query");} else {req.getRequestDispatcher("useradd.jsp").forward(req, resp);}
    }
    

6、删除用户

  1. UserDao

    //通过userID删除对象
    public int deleteUserById(Connection connection, Integer delId)throws Exception;
    
  2. UserDaoImpl

    //通过用户id删除用户
    public int deleteUserById(Connection connection, Integer delId) throws Exception {PreparedStatement pstm = null;int flag = 0;if (connection != null) {String sql = "delete from smbms_user where id=?";Object[] params = {delId};flag = BaseDao.execute(connection, pstm, sql, params);BaseDao.closeResource(null, pstm, null);}return flag;
    }
    
  3. UserService

    //删除用户
    public boolean deleteUserById(Integer delId);
    
  4. UserServiceImpl

    //通过id删除用户
    public boolean deleteUserById(Integer delId) {Connection connection = null;boolean flag = false;try {connection = BaseDao.getConnection();if (userDao.deleteUserById(connection, delId) > 0) {flag = true;}} catch (Exception e) {e.printStackTrace();} finally {BaseDao.closeResource(connection, null, null);}return flag;
    }
    
  5. UserServlet

    //删除用户
    private void delUser(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String id = request.getParameter("uid");Integer delId = 0;try {delId = Integer.parseInt(id);} catch (Exception e) {delId = 0;}HashMap<String, String> resultMap = new HashMap<String, String>();if (delId <= 0) {resultMap.put("delResult", "notexist");} else {UserService userService = new UserServiceImpl();if (userService.deleteUserById(delId)) {resultMap.put("delResult", "true");} else {resultMap.put("delResult", "false");}}
    }
    

7、修改用户

  1. UserDao

    //修改用户名信息
    public int modify(Connection connection, User user)throws Exception;
    
  2. UserDaoImpl

    //修改用户信息
    public int modify(Connection connection, User user) throws Exception {int flag = 0;PreparedStatement pstm = null;if (connection != null) {String sql = "update smbms_user set userName=?,gender=?,birthday=?,phone=?,address=?,userRole=?,modifyBy=?,modifyDate=? where id =?";Object[] params = {user.getUserName(), user.getGender(), user.getBirthday(),user.getPhone(), user.getAddress(), user.getUserRole(), user.getModifyBy(),user.getModifyDate(), user.getId()};flag = BaseDao.execute(connection, pstm, sql, params);BaseDao.closeResource(null, pstm, null);}return flag;
    }
    
  3. UserService

    //修改用户
    public boolean modify(User user);
    
  4. UserServiceImpl

    //修改用户
    public boolean modify(User user) {Connection connection = null;boolean flag = false;try {connection = BaseDao.getConnection();if (userDao.modify(connection, user) > 0)flag = true;} catch (Exception e) {e.printStackTrace();} finally {BaseDao.closeResource(connection, null, null);}return flag;
    }
    
  5. UserServlet

    //修改用户数据
    private void modify(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {String id = request.getParameter("uid");String userName = request.getParameter("userName");String gender = request.getParameter("gender");String birthday = request.getParameter("birthday");String phone = request.getParameter("phone");String address = request.getParameter("address");String userRole = request.getParameter("userRole");User user = new User();user.setId(Integer.valueOf(id));user.setUserName(userName);user.setGender(Integer.valueOf(gender));try {user.setBirthday(new SimpleDateFormat("yyyy-MM-dd").parse(birthday));} catch (ParseException e) {e.printStackTrace();}user.setPhone(phone);user.setAddress(address);user.setUserRole(Integer.valueOf(userRole));user.setModifyBy(((User) request.getSession().getAttribute(Constants.User_Session)).getId());user.setModifyDate(new Date());UserService userService = new UserServiceImpl();if (userService.modify(user)) {response.sendRedirect(request.getContextPath() + "/jsp/user.do?method=query");} else {request.getRequestDispatcher("usermodify.jsp").forward(request, response);}}
    

http://chatgpt.dhexx.cn/article/KXhnbbCA.shtml

相关文章

SMB信息泄露

SMB信息泄露 1.确保攻击机和靶机处在同局域网/ 首先使用ifconfig命令查看本机IP地址 2.使用 nmap -sn -PE 192.168.56.0/24命令然后扫出靶机IP&#xff1a;192.168.56.103 3.使用nmap -sV 192.168.56.103 命令扫描靶机开放的服务端口 我们发现目标靶机有22&#xff0c;80&…

smbclient命令查看Samba服务共享时出现报错“protocol negotiation failed: NT_STATUS_IO_TIMEOUT”

使用smbclient命令查看Samba服务共享了哪些目录时&#xff0c;报错了&#xff0c;报错信息&#xff1a;protocol negotiation failed: NT_STATUS_IO_TIMEOUT 解决方法&#xff1a; 注释掉网卡配置文件中的DNS&#xff0c; 重启网络 [rootmaster ~]# systemctl restart networ…

【Linux专题】SMB端口号说明

SMB端口号说明 SMB端口号是 TCP/445,还有一些说法是 SMB端口号还包括 137~139, 这种说法只是部分正确&#xff1b; 早期版本的 SMB(SMB 1.0) 最初设计为在 TCP/IP(NBT)上的 NetBIOS 上运行,它使用: TCP/139 进行会话服务(session services) TCP/UDP/137 进行名称服务(name se…

kali(linux) smbclient用法

Smb一般作为文件共享服务器&#xff0c;专门提供Linux与Windows之间的传送文件服务&#xff0c;在kali linux中提供了专用的客户端smbclient 下面就介绍一下其简单用法 如图&#xff1a;-U 后面跟用户名和密码&#xff0c;如果没有则不需要加-U 如图就可以使用linux的ls等命令进…

Linux常用命令——smbclient命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) smbclient 交互方式访问samba服务器 补充说明 smbclient命令属于samba套件&#xff0c;它提供一种命令行使用交互式方式访问samba服务器的共享资源。 语法 smbclient(选项)(参数)选项 -B<ip地址>&…

注意力机制介绍(attention)

注意力机制是指我们将视觉注意力集中在图像的不同区域&#xff0c;或者将注意力集中在一句话中的某个词语&#xff0c;以下图为例&#xff1a; 人眼的视觉注意力允许我们以“高分辨率”关注某个特定区域&#xff08;例如黄色框内的耳朵&#xff09;同时以“低分辨率”处理周围的…

什么是注意力机制及其应用(self attention)?

一、引言 注意力机制是自深度学习快速发展后广泛应用于自然语言处理、统计学习、图像检测、语音识别等领域的核心技术&#xff0c;例如将注意力机制与RNN结合进行图像分类&#xff0c;将注意力机制运用在自然语言处理中提高翻译精度&#xff0c;注意力机制本质上说就是实现信息…

自注意力(Self-Attention)

一、自注意力机制概述 循环神经网络由于信息传递的容量以及梯度消失问题&#xff0c;实际上也只能建立短距离依赖关系。 为了建立长距离的依赖关系&#xff0c;可以增加网络的层数或者使用全连接网络。但是全连接网络无法处理变长的输入序列&#xff0c;另外&#xff0c;不同的…

5、注意力机制和Transformer模型

1、人类的视觉注意力 从注意力模型的命名方式看&#xff0c;很明显其借鉴了人类的注意力机制&#xff0c;因此&#xff0c;我们首先简单介绍人类视觉的选择性注意力机制。 视觉注意力机制是人类视觉所特有的大脑信号处理机制。人类视觉通过快速扫描全局图像&#xff0c;获得需…

注意力机制原理及其模型发展和应用

点击上方“小白学视觉”&#xff0c;选择加"星标"或“置顶” 重磅干货&#xff0c;第一时间送达 Attention机制在近几年来在图像&#xff0c;自然语言处理等领域中都取得了重要的突破&#xff0c;被证明有益于提高模型的性能。Attention机制本身也是符合人脑和人眼的…

深度解析注意力模型(attention model)

前言attention的内部结构是什么&#xff1f; 前言 这里学习的注意力模型是我在研究image caption过程中的出来的经验总结&#xff0c;其实这个注意力模型理解起来并不难&#xff0c;但是国内的博文写的都很不详细或说很不明确&#xff0c;我在看了 attention-mechanism后才完全…

图解自注意力机制

写在最前边 这个文章是《图解GPT-2 | The Illustrated GPT-2 (Visualizing Transformer Language Models)》的一部分&#xff0c;因为篇幅太长我就单独拿出来了。 当然如果你只想了解自注意力机制可以只看本文的前半部分。 后半部分主要是讲Masked Self-attention在GPT-2中的应…

NeurIPS 2021 | Twins:重新思考高效的视觉注意力模型设计

Twins 是美团和阿德莱德大学合作提出的视觉注意力模型&#xff0c;相关论文已被 NeurIPS 2021 会议接收。本文主要讲述 Twins 解决的难点、设计和实现思路&#xff0c;以及在美团场景的探索落地&#xff0c;希望能对从事视觉算法研发的同学有所帮助和启发。 导读 Twins [1] 是美…

深度理解机器学习20-注意力机制模型

人类的注意力机制&#xff08;Attention Mechanism&#xff09;是从直觉中得到&#xff0c;它是人类利用有限的注意力资源从大量信息中快速筛选出高价值信息的手段。深度学习中的注意力机制借鉴了人类的注意力思维方式&#xff0c;被广泛的应用在自然语言处理&#xff08;Natur…

人工智能之注意力模型

朋友们&#xff0c;如需转载请标明出处&#xff1a;人工智能AI技术的博客_CSDN博客-python系列教程,人工智能,程序人生领域博主 注意力模型 通过对教程中前面一些文章的学习&#xff0c;我们知道可以用上面的神经网络来实现机器翻译。假设要将一段法语句子翻译成英文句子。那么…

注意力之双线性模型注意力

本文主要针对两篇论文&#xff1a;双线性注意力网络模型和深度模块化注意力进行总结&#xff0c;加上自己对其的理解。若有不足&#xff0c;还望指出。 论文地址&#xff1a; 双线性注意力网络 深度模块化注意力 项目地址&#xff1a; 双线性注意力网络 深度模块化注意力 0. 写…

注意力模型CBAM

论文&#xff1a;CBAM: Convolutional Block Attention Module Convolutional Block Attention Module (CBAM) 表示卷积模块的注意力机制模块。是一种结合了空间&#xff08;spatial&#xff09;和通道&#xff08;channel&#xff09;的注意力机制模块。相比于senet只关注通道…

注意力模块

目前主流的注意力机制可以分为以下三种&#xff1a;通道注意力、空间注意力以及自注意力&#xff08;Self-attention&#xff09; 通道域旨在显示的建模出不同通道之间的相关性&#xff0c;通过网络学习的方式来自动获取到每个特征通道的重要程度&#xff0c;最后再为每个通道…

注意力机制学习

注意力机制学习 学习于博客https://blog.csdn.net/weixin_44791964/article/details/121371986 1.Channel Attention 1.1 SeNet 对于输入进来的特征层&#xff0c;关注其每一个通道的权重&#xff0c;让网络关注它最需要关注的通道。【channel不变&#xff0c;h,w变】 代表…

一般注意力模型

文章目录 一般注意力模型注意力输入注意力输出 一般注意力模型 描述一般注意力模型&#xff0c;首先要描述可以使用注意力的模型的一般特征。我们将这种模型称为任务模型&#xff0c;如图&#xff1a; 这个模型接受一个输入&#xff0c;执行指定的任务&#xff0c;然后产生所…