使用JSP实现简单的登录注册功能,并且使用了Session来跟踪用户的登录信息,这个是用纯JSP来实现此功能的,由于没有连接数据库,所以使用List来模拟数据库。
第一步:创建web项目
实现登录注册功能,用到以下7个jsp文件和两个类。
- login.jsp是登录页面;
- register.jsp是注册页面;
- doLogin.jsp是在login.jsp页面的表单提交后在doLogin.jsp页面做效验,如果输入的用户名和密码能在List集合中找到,那么就是登录成功,否则,登录失败;
- doRegister.jsp是在register.jsp页面的表单提交后向List中添加;
- error.jsp是在doLogin.jsp页面做效验时,如果输入的用户名和密码在List集合中找不到或者账号和密码输入错误,就会跳转到error.jsp页面;
- index.jsp页面是首页,登录成功后就会跳到index.jsp页面;
- session.jsp页面主要是用来将设置的session失效,来实现跟踪用户的登录信息功能;
User类是创建的实体类,其中的属性与用户输入的信息所对应;
UserService是写的业务层,进行具体的业务操作。
第二步: 编写User类,有用户名和密码两个属性
public class User {
private String username;
private String password;
@Override
public String toString() {
return "User{" +
"username='" + username + '\'' +
", 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;
}
public User() {
}
public User(String username, String password) {
this.username = username;
this.password = password;
}
}
第三步:编写UserService类
public class UserService {
private static Set<User> userList = new HashSet<>();
static{
//初始化用户,模拟数据库数据
userList.add(new User("zhang","123456"));
userList.add(new User("wang","123456"));
}
// 注册
public void register(User user){
userList.add(user);
}
// 登录
public User login(User user){
String username = user.getUsername(); // 获取用户输入的username和password
String password = user.getPassword();
if(username == null || password == null){ // 如果有一个为空,就返回null
return null;
}
for (User user1 : userList) { // 如果用户输入的username和password和List中的所对应,那么就返回该user
if(username.equals(user1.getUsername()) && password.equals(user1.getPassword())){
return user1;
}
}
return null;
}
}
第四步:编写登录页面 login.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登录</title>
<style>
label{
font-size: 25px;
margin-top: 20px;
}
#username,#password{
width: 200px;
height: 25px;
margin-top: 20px;
}
#submit{
width: 50px;
height: 25px;
margin-top: 20px;
}
a{
font-size: 20px;
margin-left: 50px;
}
</style>
<script>
</script>
</head>
<body>
<div style="text-align: center">
<form action="doLogin.jsp" method="post"> <%-- 提交请求到doLogin页面--%>
<label>用户名:</label><input id="username" type="text" name="username"><br/>
<label>密码:</label><input id="password" type="password" name="password"><br/>
<input id="submit" type="submit" name="登录">
<a href="register.jsp">注册</a>
</form>
</div>
</body>
</html>
第五步:编写doLogin.jsp页面,来对login.jsp页面提交的数据做效验
<%@ page import="com.wdzl.pojo.User" %>
<%@ page import="com.wdzl.service.UserService" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
request.setCharacterEncoding("utf8"); // 设置字符集,避免出现乱码
String username = request.getParameter("username"); // 获取用户输入的username
String password = request.getParameter("password"); // 获取用户输入的password
User user = new User();
user.setUsername(username);
user.setPassword(password);
UserService userService = new UserService();
User loginUser = userService.login(user); // 在业务层中做处理,如果找到,返回user,未找到,返回null
if(loginUser != null){
// 通过session实现会话跟踪
session.setAttribute("username",loginUser.getUsername());
// 登录成功,使用重定向跳转页面
response.sendRedirect("index.jsp");
}else{
// 登录失败,向作用域中存错误信息,便于在error.jsp中获取
request.setAttribute("msg","您输入的账号或密码错误");
// 这里用转发的目的就是为了在error.jsp页面获取request存储的信息
request.getRequestDispatcher("error.jsp").forward(request,response);
}
%>
</body>
</html>
第六步:编写error.jsp页面,在doLogin.jsp页面做效验,如果效验失败则跳转到此页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title></title>
</head>
<body>
<p style="color: red;font-size: 30px;text-align: center">登录失败:<%=request.getAttribute("msg")%></p> //在作用域中取值
</body>
</html>
第七步:编写register.jsp页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>注册</title>
<style>
label{
font-size: 25px;
margin-top: 20px;
}
#username,#password{
width: 200px;
height: 25px;
margin-top: 20px;
}
#submit{
width: 50px;
height: 25px;
margin-top: 20px;
}
a{
font-size: 20px;
margin-left: 50px;
}
</style>
</head>
<body>
<div style="text-align: center">
<form action="doRegister.jsp" method="post"><%-- 提交请求到doRegister.jsp页面--%>
<label>用户名:</label><input id="username" type="text" name="username"><br/>
<label>密码:</label><input id="password" type="password" name="password"><br/>
<input id="submit" type="submit" name="提交">
</form>
</div>
</body>
</html>
第八步:编写doRegister.jsp页面,主要处理register.jsp页面提交的表单信息,添加到List中
<%@ page import="com.wdzl.pojo.User" %>
<%@ page import="com.wdzl.service.UserService" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
request.setCharacterEncoding("utf8");
String username = request.getParameter("username");
String password = request.getParameter("password");
User user = new User();
user.setUsername(username);
user.setPassword(password);
UserService userService = new UserService();
userService.register(user);
%>
<div style="text-align: center">
<h1 >注册成功!用户名为<%=username%></h1>
<a href="login.jsp" style="font-size: 30px">去登录</a>
</div>
</body>
</html>
第九步:编写index.jsp页面,这里可以实现用户登录信息的跟踪。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>首页</title>
</head>
<body>
<div style="text-align: center;font-size: 25px">
<%-- 判断session中取的用户名是否为空,若为空,则显示去登录,
若不为空,则可以在session中取到用户名,并且可以注销,注销后,用户名不在显示--%>
<%if(session.getAttribute("username") != null){
%>
<%=session.getAttribute("username")%>
来到首页
<br>
<a href="session.jsp" οnclick="return confirm('您确定注销么?')" >注销</a>
<%
}else{
%>
<br/>
<a href="login.jsp">去登录</a>
<%
}
%>
</div>
</body>
</html>
第十步:编写session.jsp,主要来清空session的,也是实现会话跟踪必不可少的元素。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>注销</title>
</head>
<body>
<%
session.invalidate(); // 清空session
// 重定向
response.sendRedirect("index.jsp");
%>
</body>
</html>
以上就是使用jsp简单实现的登录注册功能,这个做的这个就是简单的练练手,之后会使用servlet来重写写登录注册功能,与现在写的登录注册作对比。