1.先进行文件配置
①pom.xml,加载依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>javaweb</artifactId>
<groupId>com.by</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>user_manage</artifactId>
<packaging>war</packaging>
<properties>
<!-- 项目源码及编译输出的编码 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<!--jdk编码-->
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
</dependency>
<!--mybatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
<!--mysql8-->
<!--<version>8.0.28</version>-->
</dependency>
<!--log4j-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
<build>
<!-- 如果不添加此节点src/main/java目录下的所有配置文件都会被漏掉。 -->
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<!--让idea识别resources目录-->
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
</build>
</project>
② resources包
db.properties
jdbc.driver=com.mysql.jdbc.Driver
#mysql8
#jdbc:mysql://127.0.0.1:3306/mybatis?useSSL=false&serverTimezone=Asia/Shanghai
jdbc.url=jdbc:mysql://127.0.0.1:3306/servlet?characterEncoding=UTF-8
jdbc.username=root
jdbc.password=root
log4j.properties
# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
mybatis-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="db.properties"></properties>
<typeAliases>
<!--<typeAlias type="com.by.pojo.User" alias="User"></typeAlias>-->
<!--批量给pojo定义别名,推荐使用小写-->
<package name="com.by.pojo"/>
</typeAliases>
<!--使用dev环境-->
<environments default="dev">
<environment id="dev">
<!--事务-->
<transactionManager type="JDBC"></transactionManager>
<!--
type="POOLED":连接池
-->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<package name="com.by.mapper"/>
</mappers>
</configuration>
3.加载mybatis的运行环境
在listener包下创建监听器MyServletContextListener
在监听器中加载mybatis的运行环境
ublic class MyServletContextListener implements ServletContextListener {
//servletContext对象创建后会调用此方法
@Override
public void contextInitialized(ServletContextEvent sce) {
try {
//加载mybatis的运行环境
//加载mybatis-config.xml
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
//创建sqlSessionFactory
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//创建sqlSession
SqlSession sqlSession = sessionFactory.openSession();
System.out.println("tomcat启动并加载mybatis环境:" + sqlSession);
//把sqlSession对象撞到servletContext中
ServletContext servletContext = sce.getServletContext();
servletContext.setAttribute("sqlSession", sqlSession);
}catch (Exception e){
e.printStackTrace();
}
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
}
}
4.在webapp包下创建login.jsp登录页面和select_list.jsp主页面
login.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<h1>用户管理系统</h1>
<form action="login" method="post">
账号:<input type="text" name="username"><br>
密码:<input type="text" name="password"><br>
<input type="submit" value="登录">
</form>
</body>
</html>
select_list.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
这是主页面
</body>
</html>
5.在servlet包下创建LoginServlet
public class LoginServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//根据input标签的name属性获取前端提交的参数
String username = req.getParameter("username");
String password = req.getParameter("password");
//调用service
UserService userService = new UserServiceImpl(this);
User user = userService.login(username, password);
if(user != null){
//如果登录成功,则跳转到select_list.jsp
req.getRequestDispatcher("select_list.jsp").forward(req, resp);
}else{
//如果登录失败,则跳转到login.jsp
req.getRequestDispatcher("login.jsp").forward(req, resp);
}
}
}
6.在pojo包下创建User类
package com.by.pojo;
public class User {
private Integer id;
private String username;
private String password;
private String sex;
private String address;
public Integer getId() {
return id;
}
public void setId(Integer 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 String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
7.在service包下创建UserService接口
public interface UserService {
User login(String username, String password);
}
接着创建实现类
public class UserServiceImpl implements UserService {
private UserMapper userMapper;
public UserServiceImpl(LoginServlet loginServlet) {
System.out.println(loginServlet);
ServletContext servletContext = loginServlet.getServletContext();
SqlSession sqlSession = (SqlSession) servletContext.getAttribute("sqlSession");
userMapper = sqlSession.getMapper(UserMapper.class);
}
@Override
public User login(String username, String password) {
//业务逻辑...
//调用dao层
return userMapper.login(username, password);
}
}
8.在mapper包下创建UserMapper接口
public interface UserMapper {
User login(@Param("username") String username, @Param("password") String password);
}
接着创建UserMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.by.mapper.UserMapper">
<select id="login" resultType="com.by.pojo.User">
SELECT * FROM user WHERE username=#{username} AND password=#{password}
</select>
</mapper>
9.创建一个数据库servlet
并创建一个user表
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`password` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`sex` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`age` int(11) NULL DEFAULT NULL,
`address` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
向表中添加数据
INSERT INTO `user` VALUES (1, 'admin', '111', '男', 22, '郑州市高新区');
最后运行程序