文章目录
一、创建项目
该项目为了简单,就不连接数据库了。
1.项目大纲
2.接口和类
User类:用户实体类(存数据啥的)
IUserDao 接口:用户 数据层(接口规范)
UserDaoImpl 类:用户 数据层实现(数据层具体的实现)
IUserService 接口:用户 服务层(接口规范)
UserServiceImpl 类:用户 服务层实现(业务的具体实现)
LoginPageServlet 类:登录页面(请求/LoginServlet只是返回一个页面)
LoginServlet 类:处理点击登录按钮登录功能(登录按钮功能)
3.示例代码
User类:用户实体类
package com.changsheng.login.pojo;
/**
* 用户实体类
*
* @author changsheng
*/
public class User {
/** 用户名 */
private String username;
/** 密码 */
private String password;
public User() {
super();
}
public User(String username, String password) {
super();
this.username = username;
this.password = password;
}
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;
}
@Override
public String toString() {
return "User [username=" + username + ", password=" + password + "]";
}
}
IUserDao 接口:用户 数据层
package com.changsheng.login.dao;
import java.util.List;
import com.changsheng.login.pojo.User;
/**
* 用户 数据层
*
* @author changsheng
*/
public interface IUserDao {
/**
* 查询用户列表
*
* @param user 用户信息
* @return 用户集合
*/
public List<User> selectUserList(User user);
}
UserDaoImpl 类:用户 数据层实现
package com.changsheng.login.dao.impl;
import java.util.ArrayList;
import java.util.List;
import com.changsheng.login.dao.IUserDao;
import com.changsheng.login.pojo.User;
/**
* 用户 数据层实现
*
* @author changsheng
*/
public class UserDaoImpl implements IUserDao{
/**
* 查询用户列表
*
* @param user 用户信息
* @return 用户集合
*/
@Override
public List<User> selectUserList(User user) {
// 这里我为了简单起见,就不连接数据库了
// 只要用户名为admin密码是123456那么则查询成功
if ("admin".equals(user.getUsername()) && "123456".equals(user.getPassword())) {
// 假装查询到了,放入list中
List list = new ArrayList();
list.add(user);
return list;
}
// 如果不是admin和123456,那么返回null
return null;
}
}
IUserService 接口:用户 服务层
package com.changsheng.login.service;
import java.util.List;
import com.changsheng.login.pojo.User;
/**
* 用户 服务层
*
* @author changsheng
*/
public interface IUserService {
/**
* 查询用户列表
*
* @param user 用户信息
* @return 用户集合
*/
public List<User> selectUserList(User user);
}
UserServiceImpl 类:用户 服务层实现
package com.changsheng.login.service.impl;
import java.util.List;
import com.changsheng.login.dao.IUserDao;
import com.changsheng.login.dao.impl.UserDaoImpl;
import com.changsheng.login.pojo.User;
import com.changsheng.login.service.IUserService;
/**
* 用户 服务层实现
*
* @author changsheng
*/
public class UserServiceImpl implements IUserService{
IUserDao ud = new UserDaoImpl(); // 用于查询数据
/**
* 查询用户列表
*
* @param user 用户信息
* @return 用户集合
*/
@Override
public List<User> selectUserList(User user) {
List<User> list = ud.selectUserList(user);
return list;
}
}
LoginPageServlet 类:登录页面
package com.changsheng.login.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 登录页面
*
* @author changsheng
*/
@WebServlet("/LoginPageServlet")
public class LoginPageServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 设置响应编码格式,返回html
resp.setHeader("content-type", "text/html;charset=utf-8");
// 下面是即将响应的html代码(等后面学JSP后就不会这样写了)
StringBuilder html = new StringBuilder();
html.append("<html>")
.append("<body>")
.append("<h1>登录页面</h1>")
.append("<form method=\"post\" action=\"/LoginServlet\">") // 引号需要使用 \ 转换。action="另一个Servlet的URI路径"。使用post请求,你可不想使用get请求在浏览器上显示你的账号密码吧。
.append("用户名:<input type=\"text\" name=\"username\"><br>")
.append("密码:<input type=\"text\" name=\"password\"><br>")
.append("<input type=\"submit\" value=\"登录\">")
.append("</form>")
.append("</body>")
.append("</html>");
// 设置响应实体
resp.getWriter().write(html.toString());
}
}
LoginServlet 类:处理点击登录按钮登录功能
package com.changsheng.login.servlet;
import java.io.IOException;
import java.util.List;
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 com.changsheng.login.pojo.User;
import com.changsheng.login.service.IUserService;
import com.changsheng.login.service.impl.UserServiceImpl;
/**
* 处理点击登录按钮登录功能
*
* @author changsheng
*/
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
IUserService us = new UserServiceImpl();
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 1.设置请求编码格式
req.setCharacterEncoding("utf-8");
// 2.设置响应编码格式
resp.setHeader("content-type", "text/html;charset=utf-8");
// 3.获取请求信息
String username = req.getParameter("username"); // 获取用户名
String password = req.getParameter("password"); // 获取密码
System.out.println("输入的用户名为:"+username+" 密码:"+password);
// 4.处理请求信息
User user = new User(); // 创建User对象,存放值
user.setUsername(username); // 这边获取的信息在控制台打印时没有乱码,所以就不转换编码格式了。如果出现乱码需要转换编码!
user.setPassword(password);
List<User> list = us.selectUserList(user); // 查询该用户对象是否存在
// 5.响应处理结果
if (list == null || list.isEmpty()) { // 如果查询到的list为null或者为空,说明登录失败
// 登录失败
System.out.println("登录失败!\n"+user);
// 重定向到登录页Servlet
resp.sendRedirect(req.getContextPath() + "/LoginPageServlet");
} else {
// 登录成功
resp.getWriter().write("登录成功!");
}
}
}
二、调用流程图
三、演示
1.访问登录页面
2.输入错误账号密码登录
3.登录失败
重定向到了LoginPageServlet页面(重定向代码为:resp.sendRedirect("/LoginPageServlet");)
4.输入正确的账号密码
5.点击登录,登录成功!
(这句向浏览器输出了一句话:resp.getWriter().write(“登录成功!”);)
源码链接
源码下载链接分享:https://pan.baidu.com/s/1kKNaNiZFSGUBUm-84GcUNw
提取码:f6aw
相关链接:
当前篇:Java EE基础(10):Servlet登录练习 - 超详细
下一篇:Java EE基础(11):Servlet的请求重发与重定向
我的Java EE学习路线:我的Java EE学习路线