登录功能总结
用户登录
-
流程:
- 用户填写用户名和密码,提交到LoginServlet
- 在LoginServlet中使用MyBtis查询数据库,验证用户名密码是否正确
- 如果正确,响应登陆成功,错误则登陆失败
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>
<!--起别名-->
<typeAliases>
<package name="com.spernxl.pojo"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"></property>
<property name="url" value="${jdbc.password}"></property>
<property name="username" value="${jdbc.password}"></property>
<property name="password" value="${jdbc.password}"></property>
</dataSource>
</environment>
</environments>
<!--加载映射文件-->
<mappers>
<package name="com.spernxl.mapper"/>
</mappers>
</configuration>
LoginSerlet:
@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1.接收用户名和密码
String username=req.getParameter("username");
String password=req.getParameter("password");
//2.调用MyBatis完成查询
//2.1获取SqlSession对象
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//2.2获取SqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//2.3获取Mapper
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//2.4调用方法
User user = userMapper.select(username, password);
//2.5释放资源
sqlSession.close();
//获取字符输出流,并设置content type
resp.setContentType("text/html;charset=utf-8");
PrintWriter writer = resp.getWriter();
//判断
if(user!=null){
writer.write("登陆成功");
}else {
writer.write("登录失败");
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req,resp);
}
}
userMapper接口:
package com.itheima.mapper;
import com.itheima.pojo.User;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
public interface UserMapper {
/**
* 用户登录:根据用户名和密码查询用户对象
* @param username
* @param password
* @return
*/
@Select("select * from tb_user where username = #{username} and password = #{password}")
User select(@Param("username") String username,@Param("password") String password);
}
踩坑记录:
- 点击登陆后,出现状态码 500,且数据库连接失败
原因:版本错误,查询mysql版本如下
- 登录mysql:
mysql -u root -p
输入密码登录 - 输入status查询版本
在maven中导入相应版本的mysql
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.30</version>
</dependency>
-
mysql8.x版本的数据库在连接的时候报错java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowed
只要在url的后边加上allowPublicKeyRetrieval=true即可<property name="url" value="jdbc:mysql:///spernxl?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC"></property>
roperty name=“url” value=“jdbc:mysql:///spernxl?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC”>