下面是“JavaWeb登录功能实现代码”的完整攻略:
1.准备工作
要实现登录功能,需要如下准备工作:
- 开发工具:建议使用Eclipse或IDEA等JavaWeb开发工具
- 数据库:建议使用MySQL等关系型数据库
- 服务器:Tomcat等JavaWeb服务器
2.创建用户表
登录需要依赖用户表,因此需要创建用户表。可以使用如下SQL语句创建一个简单的用户表:
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(20) NOT NULL,
`password` varchar(20) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
3.实现登录页面
登录页面通常包含用户名和密码两个输入框以及登录按钮。可以使用HTML和CSS创建一个简单的登录页面,如下所示:
<!DOCTYPE html>
<html>
<head>
<title>登录</title>
<meta charset="UTF-8">
<style>
form { margin: 0 auto; width: 300px; }
input { padding: 10px; margin-bottom: 10px; width: 100%; }
button { background-color: #00bf00; color: #fff; padding: 10px; border: none; width: 100%; }
</style>
</head>
<body>
<form action="login" method="post">
<input type="text" name="username" placeholder="用户名">
<input type="password" name="password" placeholder="密码">
<button type="submit">登录</button>
</form>
</body>
</html>
4.实现登录功能
实现登录功能需要使用Servlet来接收用户的登录请求并进行处理。可以使用如下代码实现一个简单的登录Servlet:
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private static final String DB_DRIVER = "com.mysql.jdbc.Driver";
private static final String DB_URL = "jdbc:mysql://localhost:3306/test";
private static final String DB_USER = "root";
private static final String DB_PASSWORD = "root";
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String username = request.getParameter("username");
String password = request.getParameter("password");
String sql = "SELECT * FROM user WHERE username = ? AND password = ?";
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
try {
Class.forName(DB_DRIVER);
conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);
stmt = conn.prepareStatement(sql);
stmt.setString(1, username);
stmt.setString(2, password);
rs = stmt.executeQuery();
if (rs.next()) {
// 登录成功
request.getSession().setAttribute("username", username);
response.sendRedirect("index.jsp");
} else {
// 登录失败
response.sendRedirect("login.jsp?error=1");
}
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
response.sendRedirect("login.jsp?error=2");
} finally {
try { rs.close(); } catch (Exception ex) {}
try { stmt.close(); } catch (Exception ex) {}
try { conn.close(); } catch (Exception ex) {}
}
}
}
在这段代码中,首先从HttpServletRequest对象中获取用户名和密码,然后构造一条查询语句,并将用户名和密码设置为查询语句中的参数。接着使用JDBC API执行查询,并根据查询结果判断登录是否成功,如果登录成功则将用户名存储到Session中,并重定向到index.jsp页面。如果登录失败,则重定向到login.jsp页面,同时添加一个名为“error”的请求参数,用于在页面中显示错误信息。
5.添加登录拦截器
为了保护某些不希望被未授权用户访问的页面,可以添加一个登录拦截器,如果用户未登录,则拦截访问,并重定向到登录页面。可以使用如下代码实现一个简单的登录拦截器:
@WebFilter("/*")
public class LoginFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {}
@Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) resp;
String uri = request.getRequestURI();
if (uri.endsWith(".css") || uri.endsWith(".js") || uri.endsWith(".jpg") || uri.endsWith(".png")
|| uri.endsWith("login.jsp") || uri.endsWith("login")) {
// 不需要登录的页面
chain.doFilter(request, response);
} else {
// 需要登录的页面
HttpSession session = request.getSession();
String username = (String) session.getAttribute("username");
if (username != null) {
// 已登录,放行
chain.doFilter(request, response);
} else {
// 未登录,重定向到登录页面
response.sendRedirect("login.jsp");
}
}
}
@Override
public void destroy() {}
}
在这段代码中,首先从ServletRequest对象中获取请求的URI,然后判断是否为不需要登录的页面,如果是,则放行;如果不是,则获取Session中存储的用户名,如果存在,则放行,否则重定向到登录页面。注意,在这里还需要排除一些不需要登录的静态资源,比如样式、脚本和图片等。
示例说明
下面给出两个示例说明:
示例一
假设网站有一个受保护的资源,只有登录用户才可以访问,可以按照以下步骤实现:
- 创建一个名为“protected.jsp”的JSP页面,这个页面需要登录才能访问。
- 创建一个名为“ProtectedServlet”的Servlet,用于处理对“protected.jsp”的请求。
- 在LoginServlet的“登录成功”分支中,添加如下代码:
java
response.sendRedirect("protected.jsp");
- 在LoginFilter的“需要登录的页面”分支中,添加如下代码:
java
} else if (uri.endsWith("protected.jsp") || uri.endsWith("ProtectedServlet")) {
// 受保护的资源
chain.doFilter(request, response);
}
这样就可以保证只有登录用户才能访问“protected.jsp”页面和“ProtectedServlet”Servlet了。
示例二
假设网站有一个名为“logout”的功能,用于注销当前登录用户,可以按照以下步骤实现:
- 在登录页面下方添加一个“注销”按钮,代码如下:
```html
```
- 创建一个名为“LogoutServlet”的Servlet,用于处理对“logout”的请求,代码如下:
```java
@WebServlet("/logout")
public class LogoutServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
HttpSession session = request.getSession();
session.removeAttribute("username");
response.sendRedirect("login.jsp");
}
}
```
在这段代码中,首先获取当前Session对象,然后从中删除存储的用户名,并重定向到登录页面。
- 在login.jsp页面中添加如下代码,用于在页面上提示错误信息:
html
<c:if test="${param.error == 1}">
<div style="color: red;">用户名或密码错误!</div>
</c:if>
<c:if test="${param.error == 2}">
<div style="color: red;">系统错误,请稍后重试!</div>
</c:if>
在这段代码中,使用JSTL标签
这样就可以实现注销功能了。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaWeb登陆功能实现代码 - Python技术站