您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
11-案例-用户登录-准备环境&代码实现(mybatis+servlet的完整示例应用)
发布时间:2024-12-01 18:12:03编辑:雪饮阅读()
-
用mybatis(mapper代理形式)+HttpServlet实现完整的一个登录流程。
建立一个项目/Module名称假定为LoginRegisterCaseModule
首先一个简单的登录的login.html不必说
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>login</title>
<link href="css/login.css" rel="stylesheet">
</head>
<body>
<div id="loginDiv">
<form action="/LoginRegisterCaseModule/loginServlet" id="form">
<h1 id="loginMsg">LOGIN IN</h1>
<p>Username:<input id="username" name="username" type="text"></p>
<p>Password:<input id="password" name="password" type="password"></p>
<div id="subDiv">
<input type="submit" class="button" value="login up">
<input type="reset" class="button" value="reset">
<a href="register.html">没有账号?点击注册</a>
</div>
</form>
</div>
</body>
</html>
该文件放置于webapp目录下。
这里假定了未来的servlet的访问路径相对于项目域名是/LoginRegisterCaseModule/loginServlet
在mybatis的配置中的mapper映射中我这里为判断用户是否登录所用到的POJO的用户实体类,则可以先随便定义(这里目前仅仅只是为了判断是否有符号用户名和密码要求的用户,所以其实哪怕只有一个用户id属性即可),那么我这里的示例如:
package com.POJO;
public class User {
private Integer id;
private String username;
private String password;
private String gender;
private String addr;
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 getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
", gender='" + gender + '\'' +
", addr='" + addr + '\'' +
'}';
}
}
那么对应的关于用户的查询的mapper接口类实现如
package com.mapper;
import com.POJO.User;
import org.apache.ibatis.annotations.Param;
public interface UserMapper {
User select(@Param("username") String username,@Param("password") String password);
}
由于mapper接口必须要和mapper定义文件位于“同一目录”,所以这里mapper定义文件位于如resources\com\mapper\UserMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mapper.UserMapper">
<select id="select" resultType="User">
select * from tb_user where username=#{username} and password=#{password};
</select>
</mapper>
这里的resultType直接写了User。所以需要在mybatis-config.xml中environments定义之前先定义别名。则mybatis-config.xml定义如:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<typeAliases>
<package name="com.POJO"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://192.168.217.132/mybatis?useSSL=false&userServerPrepStmts=true"/>
<property name="username" value="root"/>
<property name="password" value="1448169a3cb137d7"/>
</dataSource>
</environment>
</environments>
<mappers>
<package name="com.mapper"/>
</mappers>
</configuration>
该mybatis.xml中jdbc的url链接里面注意到userServerPrepStmts前面的参数分隔符并不是用&而是&的实体引用&,因为这样xml的识别才不会有问题。
那么接下来在main/java下实现servlet如
package com.servlet;
import com.POJO.User;
import com.mapper.UserMapper;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
@WebServlet("/loginServlet")
public class HttpServlet1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String resource="mybatis-config.xml";
InputStream inputStream= Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession=sqlSessionFactory.openSession();
UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
String username=req.getParameter("username");
byte[] bytes=username.getBytes(StandardCharsets.ISO_8859_1);
username=new String(bytes,StandardCharsets.UTF_8);
String password=req.getParameter("password");
User user=userMapper.select(username,password);
sqlSession.close();
resp.setContentType("text/html;charset=utf-8");
if(user==null){
resp.getWriter().write("登录失败!");
}
else{
resp.getWriter().write("登录成功!");
}
}
}
当然,pom.xml中的servlet、mybatis、mysql这几个依赖/驱动是不可少的,还有就是场景的junit单元测试这个算是可选吧,不过一般也还是要有比较好,以及最后还有maven的tomcat插件也是必不可少,除非你手动定义到IntelliJ IDEA关联系统的tomcat上,如果有安装。
所以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">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>LoginRegisterCaseModule</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>LoginRegisterCaseModule Maven Webapp</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.1</version>
<scope>test</scope>
</dependency>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.5</version>
</dependency>
<!-- mysql 驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.32</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
</plugin>
</plugins>
</build>
</project>
最后可以访问如:
http://localhost:8080/LoginRegisterCaseModule/login.html
进行测试。
关键字词:mybatis,servlet,登录
相关文章
- 07-Request请求转发(servlet转发及webapp目录下的资源
- 04-Idea模板创建Servlet(快速创建servlet及快速创建se
- 03-Request通用方式获取请求参数(servlet在get请求与p
- 16-XML配置Servlet(路由)
- 15-urlPattern配置(WebServlet注解配置各种url访问路
- 14-Servlet方法介绍
- 13-Servlet方法介绍&体系结构(HttpServlet的使用)
- 12-Servlet执行流程&生命周期(init、service、destroy
- 11-Servlet简介&快速入门
- 08-查询-查看详情(mybatis的mapper接收参数的处理)