JavaWeb登陆功能实现代码

yizhihongxing

下面是“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中存储的用户名,如果存在,则放行,否则重定向到登录页面。注意,在这里还需要排除一些不需要登录的静态资源,比如样式、脚本和图片等。

示例说明

下面给出两个示例说明:

示例一

假设网站有一个受保护的资源,只有登录用户才可以访问,可以按照以下步骤实现:

  1. 创建一个名为“protected.jsp”的JSP页面,这个页面需要登录才能访问。
  2. 创建一个名为“ProtectedServlet”的Servlet,用于处理对“protected.jsp”的请求。
  3. 在LoginServlet的“登录成功”分支中,添加如下代码:

java
response.sendRedirect("protected.jsp");

  1. 在LoginFilter的“需要登录的页面”分支中,添加如下代码:

java
} else if (uri.endsWith("protected.jsp") || uri.endsWith("ProtectedServlet")) {
// 受保护的资源
chain.doFilter(request, response);
}

这样就可以保证只有登录用户才能访问“protected.jsp”页面和“ProtectedServlet”Servlet了。

示例二

假设网站有一个名为“logout”的功能,用于注销当前登录用户,可以按照以下步骤实现:

  1. 在登录页面下方添加一个“注销”按钮,代码如下:

```html


```

  1. 创建一个名为“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对象,然后从中删除存储的用户名,并重定向到登录页面。

  1. 在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标签判断请求参数“error”的值是否为1或2,如果是,则在页面上显示错误信息。

这样就可以实现注销功能了。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaWeb登陆功能实现代码 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • Java封装数组之改进为泛型数组操作详解

    Java封装数组之改进为泛型数组操作详解 在Java程序开发中,经常会使用数组来存储和处理数据,但是传统的数组存储方式存在类型不安全、代码冗长等问题,为了解决这些问题,Java提供了泛型数组,即封装数组。本文将详细介绍Java封装数组的概念,封装原理以及如何改进为泛型数组的操作步骤和技巧。 一、概念 Java封装数组是指在类中定义数组变量,封装了数组的属性和…

    Java 2023年5月26日
    00
  • 浅析Java单例设计模式(自写demo)

    浅析Java单例设计模式(自写demo) 1. 什么是单例模式? 单例模式是常用的一种设计模式,它的主要思想是保证在整个应用程序中只存在唯一的一个实例对象。 通常情况下,在实际开发的过程中,我们希望一个类只存在一个实例对象,这个时候就可以考虑使用单例模式,实际上单例模式是一种可重用的面向对象设计。 2. 如何实现单例模式? 单例模式的实现有多种方式,这里介绍…

    Java 2023年5月19日
    00
  • Java编程Retry重试机制实例详解

    Java编程Retry重试机制实例详解 在实际工作中,我们经常会遇到一些不稳定的网络或服务,如果我们在请求时遇到了异常,通常需要进行重试。这时,Retry重试机制能够有效保证我们的请求能够成功返回。这篇文章就来详细讲解Java编程Retry重试机制的实例。 Retry重试机制是什么 Retry重试机制是指我们在请求某个服务时,如果第一次请求失败了,我们可以再…

    Java 2023年5月27日
    00
  • 分享Java性能调优的11个实用技巧

    首先,我们需要明确一下Java性能调优的目标:提高应用程序的处理能力、降低资源占用率、提高用户体验和稳定性。为达成此目标,我们可以使用以下11个实用技巧: 1.使用最新的JDK版本 尽可能地使用最新的JDK版本,因为它们通常具有更好的性能和更高效的垃圾回收器。 2.使用本地变量 使用本地变量可以减少对垃圾回收器的压力,因此可以提高性能。例如,可以将对象引用存…

    Java 2023年5月26日
    00
  • SpringMVC配置404踩坑记录

    SpringMVC配置404踩坑记录 在使用SpringMVC开发Web应用程序时,我们经常会遇到404错误。本文将介绍如何在SpringMVC中配置404错误,并提供两个示例说明。 步骤一:配置web.xml 首先,我们需要在web.xml文件中配置SpringMVC的DispatcherServlet。可以通过添加以下配置来实现: <servlet…

    Java 2023年5月17日
    00
  • 详解Docker学习笔记之搭建一个JAVA Tomcat运行环境

    详解Docker学习笔记之搭建一个JAVA Tomcat运行环境 准备工作 要搭建一个Java Tomcat运行环境,我们需要先安装Docker。在安装过程中,请确保您的设备的硬件和系统满足Docker的最低要求。 拉取Java镜像 我们需要一个Java镜像来搭建我们的运行环境。可以在Docker Hub上搜索java,然后拉取您需要的版本的镜像。 例如,我…

    Java 2023年6月2日
    00
  • 几种常用DB驱动和DB连接串小结

    关于“几种常用DB驱动和DB连接串小结”的攻略,以下是详细的介绍和示例说明。 1. 常见的DB驱动 在Java中常用的DB驱动主要有以下几种: 1.1 MySQL驱动 MySQL驱动目前最常用的是Connector/J,它是MySQL官方提供的Java驱动程序。可以从MySQL官网下载到最新的MySQL驱动。 1.2 Oracle驱动 Oracle官方提供的…

    Java 2023年6月16日
    00
  • 如何在jsp界面中插入图片

    在JSP界面中插入图片,可以使用HTML标签来实现。下面是详细的步骤: 1. 在JSP页面中使用标签 在JSP页面中,使用以下代码追加标签到对应的位置: <img src="图片地址"> 其中,src属性指定了图片的路径。图片可以是相对路径或者绝对路径。如: 相对路径: <img src="../assets/…

    Java 2023年6月15日
    00
合作推广
合作推广
分享本页
返回顶部