SpringBoot创建JSP登录页面功能实例代码

下面我来详细讲解一下“SpringBoot创建JSP登录页面功能实例代码”的完整攻略。

环境准备

在开始前,我们需要先准备好以下环境:

  1. JDK 1.8 及以上
  2. Spring Boot 2.0.0 及以上
  3. IntelliJ IDEA 或 Eclipse 等开发工具
  4. Tomcat 8.5 及以上

创建 Spring Boot 项目

先使用你喜欢的开发工具创建一个 Spring Boot 项目,稍加配置即可,这里不再赘述。我使用的是 IntelliJ IDEA。

引入依赖

在项目的 pom.xml 文件中添加以下依赖:

<dependencies>
    <!-- Spring Boot Web 依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- Spring Boot JSP 依赖 -->
    <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-jasper</artifactId>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
    </dependency>
</dependencies>

其中第二个依赖用于支持 JSP 页面的渲染,第三个依赖则是 JSP 页面必须的标准标签库。

配置视图解析器

在 Spring Boot 中,视图解析器是通过 Thymeleaf 引擎实现的。但我们这里需要使用 JSP 模板引擎,因此需要进行如下配置:

@Configuration
public class MvcConfig implements WebMvcConfigurer {

    @Bean
    public InternalResourceViewResolver viewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setSuffix(".jsp");
        resolver.setViewClass(JstlView.class);
        return resolver;
    }
}

这里使用 @Configuration 注解表示这是一个配置文件,同时实现了 WebMvcConfigurer 接口,覆盖其中的 configureViewResolvers 方法。在方法中定义一个 InternalResourceViewResolver 类型的 bean,作为视图解析器。其中:

  • Prefix 表示 JSP 文件的存放路径,这里选择 WEB-INF/views 目录下。
  • Suffix 表示 JSP 文件的后缀名,这里是 .jsp。
  • ViewClass 表示使用 JSTL 标准标签库。

编写登录页面

在 WEB-INF/views 目录下创建 login.jsp 文件,输入以下页面代码:

<%@ page contentType="text/html;charset=UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>登录</title>
    <style>
        body {
            background-color: #f4f4f4;
            font-family: Arial, sans-serif;
        }

        input {
            width: 100%;
            padding: 12px 20px;
            margin: 8px 0;
            display: inline-block;
            border: 1px solid #ccc;
            box-sizing: border-box;
        }

        button {
            background-color: #4CAF50;
            color: white;
            padding: 14px 20px;
            margin: 8px 0;
            border: none;
            cursor: pointer;
            width: 100%;
        }

        button:hover {
            opacity: 0.8;
        }

        .container {
            padding: 16px;
            background-color: white;
            text-align: center;
        }

        .error-msg {
            color: red;
        }
    </style>
</head>
<body>

<div class="container">
    <h1>欢迎登录</h1>
    <form action="/login" method="post">
        <label for="username"><b>用户名</b></label>
        <input type="text" placeholder="请输入用户名" name="username" required>

        <label for="password"><b>密码</b></label>
        <input type="password" placeholder="请输入密码" name="password" required>

        <button type="submit">登录</button>
        <c:if test="${not empty error}">
            <div class="error-msg">${error}</div>
        </c:if>
    </form>
</div>

</body>
</html>

这里使用了 HTML 和 CSS 样式来美化页面,使用表单输入框来获取用户输入的用户名和密码,使用 JSTL 的 c:if 标签来判断是否有错误提示信息。

编写控制器和服务

创建一个 LoginController 类,用于处理登录相关的请求:

@Controller
public class LoginController {

    @Autowired
    private UserService userService;

    @GetMapping("/login")
    public String login() {
        return "login";
    }

    @PostMapping("/login")
    public String doLogin(HttpServletRequest request, HttpSession session) {
        String username = request.getParameter("username");
        String password = request.getParameter("password");

        User user = userService.getUser(username);

        if (user != null && password.equals(user.getPassword())) {
            session.setAttribute("user", user);
            return "redirect:/index";
        } else {
            request.setAttribute("error", "用户名或密码错误!");
            return "login";
        }
    }
}

其中:

  • @Controller 表示这是一个控制器类。
  • @GetMapping 和 @PostMapping 用于处理 GET 和 POST 请求。
  • @Autowired 用于自动注入 UserService 类。
  • login 方法用于返回 login.jsp 页面。
  • doLogin 方法用于处理登陆请求。首先获取用户输入的用户名和密码,然后调用 UserService 类的 getUser 方法,查询数据库中是否有对应的用户信息,如果有则将用户信息存储到 HttpSession 中,并跳转到 /index 页面;否则将错误提示信息存储到 HttpServletRequest 中,返回 login.jsp 页面。

创建一个 UserService 接口及其实现类,用于查询数据库中的用户信息:

public interface UserService {
    User getUser(String username);
}

@Service
public class UserServiceImpl implements UserService {

    private Map<String, User> users;

    public UserServiceImpl() {
        users = new HashMap<>();
        users.put("admin", new User("admin", "admin123"));
        users.put("user", new User("user", "user123"));
    }

    @Override
    public User getUser(String username) {
        return users.get(username);
    }
}

其中:

  • UserService 接口只有一个方法,用于获取用户信息。
  • UserServiceImpl 类实现了 UserService 接口,同时模拟了一个用户存储 Map。

运行项目

以上代码完成后,就可以启动 Spring Boot 项目,访问 localhost:8080/login 地址,即可进入登录页面。输入正确的用户名和密码,会跳转到 /index 页面;如果输入错误,则会显示相应的错误信息。

示例代码:https://github.com/grace789456/springboot-login-page

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot创建JSP登录页面功能实例代码 - Python技术站

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

相关文章

  • 文件格式有哪些,常见文件格式种类大全(中英对照)

    文件格式有哪些,常见文件格式种类大全(中英对照) 在计算机中,不同的文件格式对应着不同的数据类型。每种数据类型所使用的文件格式也会不同。本文将列举一些常见的文件格式并进行简要介绍和中英对照。 图片文件格式 JPEG (.jpg, .jpeg) JPEG全名为Joint Photographic Experts Group,是一种带有损压缩的图像格式,被广泛应…

    Java 2023年6月15日
    00
  • MyBatis中的JdbcType映射使用详解

    1. 什么是JdbcType映射 在MyBatis中,默认情况下,MyBatis会自动根据JavaBean属性的类型来映射到对应的JdbcType数据类型。但是在某些情况下,根据JavaBean属性的类型无法满足实际需求,这个时候你可以通过手动进行JdbcType映射。 2. 如何进行JdbcType映射 在MyBatis中可以通过两种方式进行JdbcTyp…

    Java 2023年5月19日
    00
  • SpringBoot详解执行过程

    Spring Boot是一种基于Spring框架的轻量级开发框架,它可以使Spring应用的开发更快、更容易,更有生产力。在了解Spring Boot的执行过程之前,我们需要了解Spring Boot的主要特点: 简化了Spring应用的开发过程,减少了开发人员的配置工作。 自动配置Spring环境,包括数据库、缓存等。 提供了一组开箱即用的功能,比如:监控…

    Java 2023年5月15日
    00
  • Java软件生产监控工具Btrace使用方法详解

    Java软件生产监控工具Btrace使用方法详解 什么是Btrace Btrace是一款Java生产环境下的轻量级无侵入式动态追踪工具,它可以通过对Java字节码进行插桩来实现对Java程序的监控和调试。Btrace不会对Java应用程序代码进行任何修改,同时也不会影响程序的正常运行。 Btrace的安装与配置 下载Btrace 在Btrace的官网http…

    Java 2023年5月26日
    00
  • Java14发布了,再也不怕NullPointerException了

    Java14发布了,再也不怕NullPointerException了 自从Java诞生以来,空指针异常NullPointerException就一直是开发者最常见的错误之一。但是,随着Java版本的更新,我们终于迎来了一次改变。Java14发布了,它带来了一系列的特性和改进,其中最引人注目的就是JDK Enhancement Proposal 358(JE…

    Java 2023年5月20日
    00
  • Java中Collection集合常用API之 Collection存储自定义类型对象的示例代码

    让我来详细讲解一下“Java中Collection集合常用API之 Collection存储自定义类型对象的示例代码”的完整攻略。 1. Collection集合常用API 在开始讲解如何存储自定义类型对象之前,我们先简要介绍一下Java中Collection集合常用的API。Collection接口是Java中的集合类中的基本接口,它提供了一系列操作集合的…

    Java 2023年5月26日
    00
  • Java实例化类详解

    Java实例化类详解 在Java中,实例化类是创建类对象的过程。当我们创建一个类对象的时候,就可以使用该类所定义的方法和属性。 实例化类的基础知识 我们可以使用 new 关键字来创建一个类的实例,其基本语法如下: ClassName obj = new ClassName(); 其中,ClassName 是需要创建实例的类名,obj 是创建的对象名。在创建对…

    Java 2023年5月26日
    00
  • Java char[]数组转成String类型详细介绍

    下面是“Java char[]数组转成String类型详细介绍”的完整攻略。 1. String构造函数 在Java中,String类提供了一个构造函数,可以将字符数组转换为字符串。这个构造函数的语法为: String(char[] value) 其中,value是要转换的字符数组。下面是一个示例: char[] myCharArray = {‘H’, ‘e…

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