下面我就为你介绍一下如何用Servlet实现简单的用户登录功能实例代码的攻略。
下面我就为你介绍一下如何用Servlet实现简单的用户登录功能实例代码的攻略。
一、创建JavaWeb工程
首先,我们需要创建一个JavaWeb工程。你可以选择Eclipse或者Intellij IDEA等开发工具来创建新的JavaWeb工程。并在项目中添加相关的Servlet包。
二、创建登录页面
在Web应用程序中添加一个HTML页面作为登录页面(login.html),该页面应该包含一个表单,该表单应该包含用于输入用户名和密码的文本框。
<!DOCTYPE html>
<html>
<head>
<title>Login Page</title>
</head>
<body>
<h3>Login Form</h3>
<form action="login" method="post">
<label for="username">Username:</label>
<input type="text" id="username" name="username"/><br>
<label for="password">Password:</label>
<input type="password" id="password" name="password"/><br>
<input type="submit" value="Login"/>
</form>
</body>
</html>
三、编写Servlet代码
- 创建一个Servlet来处理登录请求。在上一步中登录表单的action属性指向了login的Servlet,因此我们需要创建一个名为Login的Servlet。
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 获取表单数据
String username = request.getParameter("username");
String password = request.getParameter("password");
// 验证用户
if ("username".equals(username) && "password".equals(password)) {
// 验证通过,重定向到欢迎页面
response.sendRedirect("welcome.jsp");
} else {
// 验证失败,转发回登录页面
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("login.html");
dispatcher.forward(request, response);
}
}
}
该代码获取了登录表单中的用户名和密码参数,并将它们与事先固定好的用户名和密码进行比较。如果用户名和密码匹配,则重定向到“welcome.jsp”页面,否则转发回登录页面。
- 创建一个欢迎页面(welcome.jsp),用于验证成功后显示。
<!DOCTYPE html>
<html>
<head>
<title>Welcome Page</title>
</head>
<body>
<h3>Welcome!</h3>
</body>
</html>
四、部署和运行应用程序
最终,我们需要将应用程序部署到Servlet容器中,并启动容器来测试应用程序,浏览器中访问http://localhost:8080/login.html来进入登录页面,输入正确的用户名和密码,登录后进入欢迎页面。
示例说明:
假设我们需要在登录页面添加验证码,可以添加一段代码生成验证码并将其保存到会话中,进入Servlet后比较验证码,判断是否输入正确。可以参考以下代码:
// 生成验证码
String verifyCode = VerifyCodeUtil.generateVerifyCode(4);
// 设置会话属性,用于校验输入的验证码
request.getSession().setAttribute("verifyCode", verifyCode);
// 生成验证码图片
BufferedImage image = VerifyCodeUtil.getImage(verifyCode, 80, 30);
// 将图片输出给客户端
response.setContentType("image/jpeg");
response.setHeader("Pragma", "no-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", -1);
ImageIO.write(image, "jpeg", response.getOutputStream());
其中,VerifyCodeUtil是一个自定义的工具类,用于生成验证码和验证码图片。
另外,我们还可以使用Filter来控制用户访问页面的权限,例如只允许登录用户访问某个页面。可以参考以下代码:
@WebFilter(filterName = "LoginFilter", urlPatterns = { "*.jsp" })
public class LoginFilter implements Filter {
@Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) resp;
HttpSession session = request.getSession(false);
String uri = request.getRequestURI();
// 判断是否已登录
if (session == null || session.getAttribute("user") == null) {
// 未登录,重定向到登录页面
response.sendRedirect(request.getContextPath() + "/login.html");
} else {
// 已登录,放行请求
chain.doFilter(request, response);
}
}
}
该代码在每次请求jsp页面时判断用户会话是否存在,如果不存在则重定向到登录页面,否则放行请求。需要注意的是,该代码只控制了jsp页面的访问,如果需要控制其他资源的访问,还需要在urlPatterns中添加相应的URL路径。
本文标题为:Servlet实现简单的用户登录功能实例代码
基础教程推荐
- MybatisPlus分页查询与多条件查询介绍及查询过程中空值问题的解决 2023-06-10
- IntelliJ IDEA 2022.2 正式发布新功能体验 2023-03-31
- mybatis对于list更新sql语句的写法说明 2023-04-18
- CentOS 6.4出现Disk sda contains BIOS RAID metadata解决方法 jajavaja的专栏 2023-08-31
- Java 协程 Quasar详解 2023-02-19
- 详解Hibernate cascade级联属性的CascadeType的用法 2023-08-01
- SpringCloud超详细讲解微服务网关Gateway 2023-03-06
- 一文带你搞懂Maven的继承与聚合 2023-02-20
- java – apache derby vs mysql有什么区别 2023-11-09
- Mybatis动态SQL之where标签用法说明 2023-02-04