用户登录和注册功能是我们平时在门户网站中最常见的功能之一,本文采用servlet结合mybatis完成用户登录的注册功能的简单实现(也可以使用JDBC实现dao层)。
视图层
登录页
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="/web2/login.do" method="post">
用户名:<input type="text" name="userName"><br/>
密 码:<input type="password" name="password"><br/>
<span style="color: red">${error}</span><br>
<a href="register.jsp" style="color: darkgrey;font-size: small">还未注册?请点击这里</a><input type="submit" value="登录">
</form>
</body>
</html>
页面效果
注册页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="/web2/register.do" method="post">
用户名:<input type="text" name="userName"><br/>
密 码:<input type="password" name="password" ><br/>
年 龄:<input type="text" name="age"><br/>
性 别:男:<input type="radio" name="sex" value="男">
女:<input type="radio" name="sex" value="女"><br>
<input type="submit" value="注册">
</form>
</body>
</html>
页面效果
登陆完成后的主页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
你好!${user.userName}
</body>
</html>
控制层
登录的servlet
import com.openlab.mapper.UserMapper;
import com.openlab.pojo.User;
import com.openlab.utils.MybatisUtil;
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 javax.servlet.http.HttpSession;
import java.io.IOException;
@WebServlet(name = "LoginServlet",value = "/login.do")
public class LoginServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
String userName = request.getParameter("userName");
String password = request.getParameter("password");
UserMapper mapper = MybatisUtil.getMapper(UserMapper.class);
User user = mapper.queryByLogin(userName, password);
if (user!=null){
HttpSession session = request.getSession();
session.setAttribute("user",user);
response.sendRedirect("main.jsp");
}else {
request.setAttribute("error","用户名密码不正确");
request.getRequestDispatcher("login.jsp").forward(request,response);
}
}
}
注册的servlet
@WebServlet(name = "RegisterServlet",value = "/register.do")
public class RegisterServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
String userName = request.getParameter("userName");
String password = request.getParameter("password");
String age = request.getParameter("age");
String sex = request.getParameter("sex");
UserMapper mapper = MybatisUtil.getMapper(UserMapper.class);
User user = new User();
user.setUserName(userName);
user.setPassword(password);
user.setAge(Integer.valueOf(age));
user.setSex(sex);
int i = mapper.insertForRegister(user);
if (i > 0){
request.getSession().setAttribute("user",user);
response.sendRedirect("main.jsp");
}
}
}
模型层
user类
public class User {
private String userName;
private String password;
private Integer age;
private String sex;
public User() {
}
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 Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
数据链路层
接口
public interface UserMapper {
User queryByLogin(@Param("userName") String userName,@Param("password") String password);
int insertForRegister(@Param("user") User user);
}
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.openlab.mapper.UserMapper">
<select id="queryByLogin" resultType="User">
SELECT * FROM user WHERE userName=#{userName} AND password=#{password}
</select>
<insert id="insertForRegister" parameterType="User">
INSERT INTO user (userName,password,age,sex)
VALUES (#{user.userName},#{user.password},#{user.age},#{user.sex})
</insert>
</mapper>
mybatis配置文件
<?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="jdbc.properties"></properties>
<typeAliases>
<package name="com.openlab.pojo"></package>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${driverClassName}"></property>
<property name="url" value="${url}"></property>
<property name="username" value="${username}"></property>
<property name="password" value="${password}"></property>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/openlab/mapper/UserMapper.xml"></mapper>
</mappers>
</configuration>
jdbc配置文件
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/day01
username=root
password=密码
业务逻辑层
为了简单起见该层省略
工具类
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
public class MybatisUtil {
private static SqlSessionFactory factory = null;
static {
try {
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
factory = new SqlSessionFactoryBuilder().build(is);
} catch (IOException e) {
e.printStackTrace();
}
}
public static <T> T getMapper(Class<T> clazz){
return factory.openSession().getMapper(clazz);
}
}
结果测试
登录成功结果
登录失败结果
注册结果测试