使用jsp+servlet+spwing完成登录和注册功能.且主页面,如果登录成功则显示登录用户的账号名,以及退出登录链接。如果未登录,则显示登录,注册链接。可以使用css进行页面样式优化
时间: 2024-05-08 20:16:20 浏览: 12
对于本题,我们可以分为两个部分来完成,分别是登录和注册功能以及主页面的展示。
1. 登录和注册功能
首先,我们需要建立一个数据库来存储用户信息,包括用户名和密码等。在这里,我们使用MySQL数据库,并建立一个名为`user`的表,包含`id`、`username`和`password`三个字段。
在登录和注册的页面中,我们需要使用表单来接收用户输入的信息,并将其传递给后台的Servlet来处理。对于登录页面,我们需要验证用户输入的用户名和密码是否匹配,如果匹配则登录成功,否则提示用户登录失败。对于注册页面,我们需要判断用户输入的用户名是否已经存在,如果存在则提示用户注册失败,否则将用户名和密码存入数据库中并提示用户注册成功。
下面是登录和注册页面的代码示例:
登录页面(login.jsp):
```
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登录页面</title>
</head>
<body>
<h1>登录页面</h1>
<form action="LoginServlet" method="post">
<label>用户名:</label><input type="text" name="username"><br>
<label>密码:</label><input type="password" name="password"><br>
<input type="submit" value="登录">
</form>
<p>还没有账号?<a href="register.jsp">立即注册</a></p>
</body>
</html>
```
注册页面(register.jsp):
```
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>注册页面</title>
</head>
<body>
<h1>注册页面</h1>
<form action="RegisterServlet" method="post">
<label>用户名:</label><input type="text" name="username"><br>
<label>密码:</label><input type="password" name="password"><br>
<input type="submit" value="注册">
</form>
<p>已有账号?<a href="login.jsp">立即登录</a></p>
</body>
</html>
```
在这里,我们使用了`action`属性来指定表单提交的目标Servlet,以及`method`属性来指定提交方式为POST。
接下来,我们需要编写对应的Servlet来处理用户的请求。对于登录功能,我们需要从数据库中查询用户信息,并进行比对,如果匹配则将用户信息存入Session中,以便后续的操作。对于注册功能,我们需要判断用户输入的用户名是否已经存在,如果存在则提示用户注册失败,否则将用户名和密码存入数据库中并提示用户注册成功。
下面是登录和注册Servlet的代码示例:
登录Servlet(LoginServlet.java):
```
package com.example.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private String jdbcUrl = "jdbc:mysql://localhost:3306/test";
private String jdbcUsername = "root";
private String jdbcPassword = "123456";
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String username = request.getParameter("username");
String password = request.getParameter("password");
try {
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection(jdbcUrl, jdbcUsername, jdbcPassword);
String sql = "SELECT * FROM user WHERE username = ? AND password = ?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, username);
ps.setString(2, password);
ResultSet rs = ps.executeQuery();
if (rs.next()) {
HttpSession session = request.getSession();
session.setAttribute("username", username);
response.sendRedirect("index.jsp");
} else {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<script>alert('用户名或密码错误!');window.location.href='login.jsp'</script>");
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
```
注册Servlet(RegisterServlet.java):
```
package com.example.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class RegisterServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private String jdbcUrl = "jdbc:mysql://localhost:3306/test";
private String jdbcUsername = "root";
private String jdbcPassword = "123456";
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String username = request.getParameter("username");
String password = request.getParameter("password");
try {
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection(jdbcUrl, jdbcUsername, jdbcPassword);
String sql = "SELECT * FROM user WHERE username = ?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, username);
ResultSet rs = ps.executeQuery();
if (rs.next()) {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<script>alert('用户名已存在!');window.location.href='register.jsp'</script>");
} else {
sql = "INSERT INTO user (username, password) VALUES (?, ?)";
ps = conn.prepareStatement(sql);
ps.setString(1, username);
ps.setString(2, password);
ps.executeUpdate();
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<script>alert('注册成功!');window.location.href='login.jsp'</script>");
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
```
在这里,我们使用了`HttpSession`来存储用户信息。如果用户登录成功,我们将用户名存入Session中,并重定向到主页面(index.jsp);如果用户注册成功,我们提示用户注册成功,并重定向到登录页面(login.jsp);如果用户登录失败或注册失败,我们使用JavaScript弹出提示框,并跳转到对应的页面。
2. 主页面的展示
对于主页面,我们需要根据用户是否登录来展示不同的内容。如果用户已经登录,则显示用户名和退出登录链接;如果用户未登录,则显示登录和注册链接。
下面是主页面的代码示例:
主页面(index.jsp):
```
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>主页面</title>
<style>
#login {
float: right;
}
#logout {
float: right;
}
</style>
</head>
<body>
<h1>主页面</h1>
<% String username = (String) session.getAttribute("username"); %>
<% if (username != null) { %>
<p>欢迎,<%= username %>!<a href="LogoutServlet">退出登录</a></p>
<% } else { %>
<p><a href="login.jsp">登录</a> | <a href="register.jsp">注册</a></p>
<% } %>
</body>
</html>
```
在这里,我们使用了JSP的`<% %>`标签来获取Session中存储的用户名,并根据用户名是否为空来判断用户是否登录。如果用户已经登录,则显示用户名和退出登录链接;如果用户未登录,则显示登录和注册链接。同时,我们使用了CSS来进行页面样式优化,将登录和退出登录链接放置在页面的右侧。
最后,我们需要编写一个退出登录的Servlet来清空Session中存储的用户信息,并重定向到登录页面。
退出登录Servlet(LogoutServlet.java):
```
package com.example.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class LogoutServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
HttpSession session = request.getSession();
session.removeAttribute("username");
response.sendRedirect("login.jsp");
}
}
```
在这里,我们使用了`HttpSession`的`removeAttribute`方法来清空Session中存储的用户名,并重定向到登录页面。
至此,我们已经完成了使用JSP、Servlet和Spring框架来实现登录和注册功能,以及主页面的展示,并使用CSS进行页面样式优化。