1.用户登录
1.1需求分析
1.2 环境准备
1.2.1 项目结构搭建
1.2.1.1Maven创建web项目(不使用骨架)
1.创建Maven项目
2.选择不使用Web项目骨架
3.输入Maven项目坐标创建项目
——这里只用输入模块名称即可
4.在pom.xml设置打包方式为war
——注意这里更改完以后记得点击右上角保存按钮同步,只有这里设置打包方式为war才能被识别为web项目
5.补齐Maven Web项目缺失webapp的目录结构
——这里如果没有找到自己的项目,检查上一步是否保存,没保存打包方式为war不会被识别为web项目
6.补齐Maven Web项目缺失WEB-INF/web.xml的目录结构
——web.xml文件可以联通WEB-INF文件夹一起默认创建出来,然后一起拖到webapp下面即可
1.2.1.2 IDEA使用Tomcat Maven插件使用Tomcat服务器
- 在pom.xml中添加Tomcat插件
<build>
<plugins>
<!--Tomcat插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
</plugin>
</plugins>
</build>
- 使用Maven Helper插件快速启动项目,选中项目,右键–>Run Maven --> tomcat7:run
使用Maven Tomcat插件,要想修改Tomcat的端口和访问路径,可以直接修改pom.xml
<build>
<plugins>
<!--Tomcat插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>80</port><!--访问端口号 -->
<!--项目访问路径
未配置访问路径: http://localhost:80/tomcat-demo2/a.html
配置/后访问路径: http://localhost:80/a.html
如果配置成 /hello,访问路径会变成什么?
答案: http://localhost:80/hello/a.html
-->
<path>/</path>
</configuration>
</plugin>
</plugins>
</build>
1.2.1.3 创建Servlet
- 导入Servlet依赖坐标
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<!--
此处为什么需要添加该标签?
provided指的是在编译和测试过程中有效,最后生成的war包时不会加入
因为Tomcat的lib目录中已经有servlet-api这个jar包,如果在生成war包的时候生效就会和Tomcat中的jar包冲突,导致报错
-->
<scope>provided</scope>
</dependency>
- IDEA快速创建Servlet
(1)按照自己的需求,修改Servlet创建的模板内容
在模板里面直接按照自己常用的格式进行更改——doPost()方法中调用doGet()、项目注解只保留资源访问路径…
(2)使用servlet模板创建Servlet类
1.2.2 复制资料中的静态页面到项目的webapp目录下
1.2.3 创建db1数据库,创建tb_user表,创建User实体类
1.2.4 在项目的pom.xml导入Mybatis和Mysql驱动坐标
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.5</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.34</version>
</dependency>
1.2.5 创建mybatis-config.xml核心配置文件,UserMapper.xml映射文件,UserMapper接口
- mybatis-config.xml文件拷贝到resources目录下
<?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>
<!--起别名-->
<typeAliases>
<package name="com.itheima.pojo"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<!--
useSSL:关闭SSL安全连接 性能更高
useServerPrepStmts:开启预编译功能
& 等同于 & ,xml配置文件中不能直接写 &符号
-->
<property name="url" value="jdbc:mysql:///db1?useSSL=false&useServerPrepStmts=true"/>
<property name="username" value="root"/>
<property name="password" value="1234"/>
</dataSource>
</environment>
</environments>
<mappers>
<!--扫描mapper-->
<package name="com.itheima.mapper"/>
</mappers>
</configuration>
- 在com.itheima.mapper包下创建UserMapper接口
public interface UserMapper {
}
- 将UserMapper.xml文件拷贝到resources目录下——注意,在resources下创建UserMapper.xml的目录时,要使用/分割
1.3 代码实现
1.在UserMapper接口中提供一个根据用户名和密码查询用户对象的方法;使用@Param注解用于传递参数,使方法的参数可以与SQL中的字段名相对应。
2.修改loign.html,使表单提交到 loginServlet 来。
3.编写LoginServlet
4.启动服务器测试
2.用户注册(基本与登录相同,略)
3.SqlSessionFactory工具类抽取
3.1 问题描述
用户登录和用户注册的Servlet需要使用Mybatis来完成数据库的操作,所以对于Mybatis的基础操作就出现了些重复代码,如下
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new
SqlSessionFactoryBuilder().build(inputStream);
这里不仅代码重复,更重要的是,两个Servlet里面重复创建了工厂类SqlSessionFactory,就相当于每次创建一个工厂只创建一个对象消耗了非常大的资源后就不用了,下次再创建一个工厂。
3.2 优化解决——抽取工具类
工具类代码:
public class SqlSessionFactoryUtils {
private static SqlSessionFactory sqlSessionFactory;
static {
//静态代码块会随着类的加载而自动执行,且只执行一次
try {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSessionFactory getSqlSessionFactory(){
return sqlSessionFactory;
}
}
使用静态代码块使工厂类的创建会执行一次。
工具类抽取后,再对Mybatis的SqlSession进行操作步骤:
1.拿到工厂对象
SqlSessionFactory sqlSessionFactory =SqlSessionFactoryUtils.getSqlSessionFactory();
2.获取SqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
3.获取Mapper
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
4.调用方法
5.释放资源