销售网站html源码,晋江怎么交换友情链接,网站的开发方式,无极分期网站前言 使用JSP回显用户列表#xff0c;可以进行批量删除#xff08;有删除确认步骤#xff09;#xff0c;和修改用户数据#xff08;用户数据回显步骤#xff09;使用servlet处理传递进来的请求参数#xff0c;并调用dao处理数据并返回使用mybatis#xff0c;书写dao层…前言 使用JSP回显用户列表可以进行批量删除有删除确认步骤和修改用户数据用户数据回显步骤使用servlet处理传递进来的请求参数并调用dao处理数据并返回使用mybatis书写dao层获取mysql数据库数据并返回到servlet 项目实现步骤
完整项结构 第一步创建项目配置pom.xml文件导入相关工具类
pom.xml dependencies!--单元测试--dependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion4.12/versionscopetest/scope/dependency!--mysql数据库连接--dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion8.0.21/version/dependency!--servlet--dependencygroupIdjavax.servlet/groupIdartifactIdjavax.servlet-api/artifactIdversion3.1.0/versionscopeprovided/scope/dependency!--lombok--dependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdversion1.18.24/versionscopeprovided/scope/dependency!---mybatis--dependencygroupIdorg.mybatis/groupIdartifactIdmybatis/artifactIdversion3.4.6/version/dependency!--log4j--dependencygroupIdlog4j/groupIdartifactIdlog4j/artifactIdversion1.2.17/version/dependency!--jstl--dependencygroupIdjavax.servlet/groupIdartifactIdjstl/artifactIdversion1.2/version/dependency/dependenciesbuildfinalNameproject1/finalNamepluginsplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-compiler-plugin/artifactIdversion3.1/versionconfigurationsource1.8/sourcetarget1.8/targetencodingUTF-8/encoding/configuration/pluginplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-war-plugin/artifactIdversion3.3.2/version/pluginplugingroupIdorg.eclipse.jetty/groupIdartifactIdjetty-maven-plugin/artifactIdversion9.3.14.v20161028/version/pluginplugingroupIdorg.apache.tomcat.maven/groupIdartifactIdtomcat7-maven-plugin/artifactIdversion2.1/versionconfigurationport8080/portpath/my_maven_pro/pathuriEncodingUTF-8/uriEncodingservertomcat7/server/configuration/plugin/plugins/build
/project因为要使用mybatis因此需要导入创建SqlSession的工具类目的是创建sqlsession对象来发送sql获取数据因为需要使用log4j日志需要导入其配置文件相关设置因为mybatis配置了jdbc连接信息和mybatis配置信息分离所以要jdbc.properties文件 SqlSessionFactoryUtil
public class SqlSessionFactoryUtil {private static SqlSessionFactory factory;private SqlSessionFactoryUtil(){}static {Reader readernull;try {readerreader Resources.getResourceAsReader(mybatis.xml);factorynew SqlSessionFactoryBuilder().build(reader);} catch (IOException e) {throw new RuntimeException(e);}}public static SqlSession getSessionSql(){return factory.openSession(true);}} openSession()方法参数为true表示自动提交事务。 jdbc.properties
drivercom.mysql.cj.jdbc.Driver
urljdbc:mysql://localhost:3306/csx_demo_925?serverTimezoneAsia/ShanghaiuseUnicodetruecharacterEncodingUTF-8zeroDateTimeBehaviorconvertToNull
usernameroot
passwordroot jdbc的连接信息需要自己本地的mysql连接配置 log4j.properties
### set log levels ###
log4j.rootLogger debug,stdout
log4j.appender.stdout org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target System.out
log4j.appender.stdout.layout org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern %d %p [%c] - %m%nlog4j.logger.com.ibatisdebug
log4j.logger.com.ibatis.common.jdbc.SimpleDataSourcedebug
log4j.logger.com.ibatis.common.jdbc.ScriptRunnerdebug
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegatedebug
log4j.logger.java.sql.Connectiondebug
log4j.logger.java.sql.Statementdebug
log4j.logger.java.sql.PreparedStatementdebug,stdout配置mybatis日志文件在执行mybatis相关的sql时可以看到sql语句的执行流程 web.xml
?xml version1.0 encodingUTF-8?
web-app xmlnshttp://java.sun.com/xml/ns/javaeexmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_3_0.xsdversion3.0display-nameArchetype Created Web Application/display-name/web-appweb.xml配置的头信息需要指定3.0版本以上目的是可以在servlet中使用注解完成相关的映射配置 第二步创建数据库表和对应实体类
数据库表 t_user用户表包含字段为user_id用户id,user_name用户名user_pic用户头像user_point(用户积分);这里用户头像暂时用不到 建表语句
create table if not exists t_user(
user_id int primary key auto_increment comment 用户id,主键,
user_name varchar(30) not null unique comment用户名,
password varchar(30) not null comment密码,
user_pic varchar(50) comment用户头像,
user_point int default 0 comment用户积分
);
User
Getter
Setter
AllArgsConstructor
NoArgsConstructor
public class User implements Serializable {private Integer userId;private String userName;private String password;private String userPic;private Integer userPoint;
}属性名和字段名采用了小驼峰映射需要在mybatis中手动配置类的属性和表中字段的映射关系。 第三步创建Mybatis主配置文件Dao层和mapper映射
mybatis.xml
?xml version1.0 encodingUTF-8 ?
!DOCTYPE configuration PUBLIC -//mybatis.org//DTD Config 3.0//ENhttp://mybatis.org/dtd/mybatis-3-config.dtd
configurationproperties resourcejdbc.properties/!--settingssetting name value//settings--typeAliasespackage namecom.csx.entity//typeAliasesenvironments defaultdevelopmentenvironment iddevelopmenttransactionManager typeJDBC/dataSource typePOOLEDproperty namedrivervalue${driver}/property nameurlvalue${url}/property nameusername value${username}/property namepassword value${password}//dataSource/environment/environmentsmappersmapper resourcemapper/UserMapper.xml/mapper/mappers/configuration注意 properties resourcejdbc.properties/配置了jdbc连接信息的路径可以在mybatis.xml中使用${}引入jdbc.properties的配置信息 typeAliasespackage namecom.csx.entity/
/typeAliases 设置别名将entity包下的所有实体类都设置别名为类名或类名的全小写mappers标签中的mapper标签需要先存在mappper映射文件才能配置其和主配置文件的绑定。 UserDao
public interface UserDao {//查询所有用户ListUser getUserList();//根据id查询指定用户User getUserById(int id);//更新用户int updateUser(User user);//删除单个用户 int delUser(int id);//批量删除用户int delUsers(int[] ids);} 项目需要的所有sql支持从上到下分别为查询所有用户数据根据id查询指定用户修改用户数据删除用户数据删除单个批量删除用户数据 UserMapper.xml
?xml version1.0 encodingUTF-8 ?
!DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//ENhttp://mybatis.org/dtd/mybatis-3-mapper.dtd
mapper namespacecom.csx.dao.UserDaoresultMap iduserCols typeuserid propertyuserId columnuser_id/result propertyuserName columnuser_name/result propertyuserPic columnuser_pic/result propertyuserPoint columnuser_point//resultMap!--查询所有用户--select idgetUserList resultMapuserColsselect * from t_user/select
!--根据id查询指定用户--select idgetUserById parameterTypeint resultMapuserColsselect * from t_userwhere user_id #{id}/select
!--根据id修改用户名和积分--update idupdateUser parameterTypeuserupdate t_user set user_name #{userName},user_point#{userPoint}where user_id #{userId}/update
!--删除单个用户数据--delete iddelUser parameterTypeintdelete from t_user where user_id #{id}/delete
!--批量删除用户数据接收参数类型为数组--delete iddelUsersdelete from t_user where user_id inforeach collectionarray itemid open( close) separator,#{id}/foreach/delete/mapper
书写mapper.xml时需要注意使用 resultMap配置数据库字段和实体类的属性一一映射 第四步创建service层
UserService
public interface UserService {ListUser getUserList();User getUserById(int id);int updateUser(User user);int delUser(int id);int delUsers(String[] ids);}
UserServiceImpl
public class UserServiceImpl implements UserService {SqlSession session SqlSessionFactoryUtil.getSessionSql();UserDao userDaosession.getMapper(UserDao.class);Overridepublic ListUser getUserList() {return userDao.getUserList();}Overridepublic User getUserById(int id) {return userDao.getUserById(id);}Overridepublic int updateUser(User user) {return userDao.updateUser(user);}Overridepublic int delUser(int id) {return userDao.delUser(id);}Overridepublic int delUsers(String[] ids) {//将字符串数组转换成int数组需要判断null值if (ids!null){int[] idss Arrays.stream(ids).mapToInt(Integer::parseInt).toArray();return userDao.delUsers(idss);}return 0;}
} service层作用是调用dao的sql支持完成业务逻辑就像上面的类型转换的操作实在service层实现的 第五步创建前端页面和servlet 前端页面执行逻辑---当我们启动服务器时在浏览器输入localhost:8080 默认访问的是index.html或index.jsp页面因此我们可以直接在index.html页面完成跳转功能跳转到我们的servlet进行逻辑处理获取数据库中的数据然后在页面展示 index.html
html
body
h2Hello World!/h2
/body
scriptlocation.hreftoIndex;
/script
/html在默认首页完成跳转到指定的servlet进行逻辑处理 ToIndexServlet
WebServlet(/toIndex)
public class ToIndexServlet extends HttpServlet {Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {UserService userServicenew UserServiceImpl();//调用mybatis方法获取所有用户数据ListUser list userService.getUserList();//将存有用户数据的list集合放在request中req.setAttribute(list,list);//转发请求到list.jsp页面req.getRequestDispatcher(list.jsp).forward(req,resp);}Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doPost(req, resp);}
} servlet的作用是获取所有用户信息存放在list集合中在存放到request作用域进行转发请求操作到list.jsp页面 list.jsp
% page languagejava importjava.util.* pageEncodingUTF-8%
% taglib prefixc urihttp://java.sun.com/jsp/jstl/core%
!DOCTYPE HTML
html
meta http-equivcontent-type contenttext/html;charsetutf-8 /!-- /Added by HTTrack --
headmeta charsetUTF-8meta namedescription contentmeta namekeywords contenttitle/title
/head
bodytable border1pxtrth/thth编号/thth姓名/thth积分/thth积分/th/trform actionsubSelItem methodpostc:forEach items${list} varutrtdinput typecheckbox nameselItems value${u.userId}/tdtd${u.userId}/tdtd${u.userName}/tdtd${u.userPoint}/tdtda hreftoUserDetail?userId${u.userId}修改/aa hrefdelUser?userId${u.userId} onclickreturn delUser()删除/a/td/tr/c:forEachinput typesubmit value删除所选 onclickreturn delUser()/form/table
/body
scriptfunction delUser(){var ans confirm(忍心删除吗?);if(ans){return true;}else{return false;}}
/script/html 使用jstl标签库中的forEach标签结合el表达式获取数据遍历存放在request作用域中的list集合结合中的数据通过两个超链接a进行页面跳转和数据传递处理修改和删除业务通过表单包裹checkbox复选框实现批量删除的请求 注意这里只展示了用户的id用户名和用户积分 修改功能实现 修改逻辑的执行流程: 点击修改按钮跳转到处理修改的/toUserDetail的servlet类作用是获取当前用户信息回显数据由/toUserDetail的servlet跳转到修改页面userDetail.jsp进行修改操作将修改后的数据提交到另一个/updateUser的servlet中进行数据库更新操作更新完成后跳转到/toIndex的servlet获取数据库用户列表获取完数据库用户数据后跳转到list.jsp展示 ToUserDetailServlet
WebServlet(/toUserDetail)
public class ToUserDetailServlet extends HttpServlet {Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {int idInteger.parseInt(req.getParameter(userId));UserService userServicenew UserServiceImpl();User user userService.getUserById(id);req.setAttribute(user,user);req.getRequestDispatcher(userDetail.jsp).forward(req,resp);}Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doPost(req, resp);}
} 根据请求参数的用户id获取用户对象将用户对象存放在request作用域并转发请求到userDetail.jsp userDetail.jsp
% page languagejava importjava.util.* pageEncodingUTF-8%
% taglib prefixc urihttp://java.sun.com/jsp/jstl/core%
%
String path request.getContextPath();
String basePath request.getScheme()://request.getServerName():request.getServerPort()path/;
%
!DOCTYPE HTML
html
meta http-equivcontent-type contenttext/html;charsetutf-8 /!-- /Added by HTTrack --
headmeta charsetUTF-8meta namedescription contentmeta namekeywords contenttitle页面修改/title
/head
bodyform actionupdateUser methodpostinput typehidden nameuserId value${user.userId}姓名: input typetext nameuserName value${user.userName} br/积分: input typetext nameuserPoint value${user.userPoint} br/input typesubmit value确认修改/form/body
/html 进行页面回显操作点击提交按钮将数据提交到/updateUser的servlet类处理 UpdateUserServlet
WebServlet(/updateUser)
public class UpdateUserServlet extends HttpServlet {Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {int id Integer.parseInt(req.getParameter(userId));String user_name req.getParameter(userName);int score Integer.parseInt(req.getParameter(userPoint));User usernew User();user.setUserId(id);user.setUserName(user_name);user.setUserPoint(score);UserService userServicenew UserServiceImpl();userService.updateUser(user);resp.sendRedirect(toIndex);}Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doPost(req, resp);}
}将提交数据更新到数据库中然后回到/toIndex的servlet类中重新获取数据库中的用户列表然后跳转到list.jsp展示查看 删除单个功能 步骤 在list.jsp中点击删除按钮出现提示框点击确认跳转到delUser的servlet类中处理在delUser的servlet类中进行删除操作删除完毕后跳转到toIndex的servlet类中重新获取数据库中的用户列表跳转到list.jsp展示 DelUserServlet
WebServlet(/delUser)
public class DelUserServlet extends HttpServlet {Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {int id Integer.parseInt(req.getParameter(userId));UserService userServicenew UserServiceImpl();userService.delUser(id);resp.sendRedirect(toIndex);}Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doPost(req, resp);}
}批量删除功能 在list.jsp中使用表单包裹checkbox复选框当选中多个提交时在对应的servlet中使用 getParameterValues方法接收到字符串数组将字符串数组转换成int数组底层通过mybatis的forEach标签进行批量删除 SubSelItemServlet
WebServlet(/subSelItem)
public class SubSelItemServlet extends HttpServlet {Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String[] items req.getParameterValues(selItems);UserService userServicenew UserServiceImpl();userService.delUsers(items);resp.sendRedirect(toIndex);}Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doPost(req, resp);}
}
业务处理字符串数组转int数组 mybatis的sql处理 总结 基于jspservletmybatis实现用户列表查看用户修改删除单个用户确认步骤批量删除用户等功能实现