SpringBoot日记本系统全程直播02:登录页面搞起来撒~~

本文主要是介绍SpringBoot日记本系统全程直播02:登录页面搞起来撒~~,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

上一节地址:SpringBoot日记本系统全程直播01:先把框架搞起来撒~~

那么大家晚上好,我是今天晚上的主讲老师,我是兔哥。

上一讲,我们已经完成了项目的搭建,那么这一讲,咱就把登录页面给造了。

登录页面如下图:

算是一种小清新风格,当然,本项目的重点还是SpringBoot项目开发。

因为是前后端一体的项目,所以我们采用模板引擎的方式,我个人非常不喜欢thymeleaf,那就用jsp吧。经典,不容易出错。

打开配置文件,添加视图解析器,和DataSource同级

spring:#视图解析器mvc:view:prefix: /WEB-INF/jsp/suffix: .jsp

 

贴在这个位置,别弄错了。

在main下面创建一个新的目录:webapp

 创建的时候会提醒你的

选择 下面的webapp,我们要保证文件夹的右下角有一个黄色的标记,这个代表资源目录。

接下来,在里面创建WEB-INF(大写)目录

接下来是jsp目录

然后,我们需要在这个目录创建JSP文件。

idea默认没法直接右键创建JSP,我们需要做一点操作。

点开这个:

 

然后就可以新建JSP了

创建login.jsp

 

 HTML代码如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no"><title>剽悍一小兔-日记本系统</title><style>*{margin: 0;padding: 0;}body{min-height: 100vh;/* 弹性布局 居中 */display: flex;justify-content: center;align-items: center;background-color: #94bfb560;}.container{background-color: #222;width: 350px;height: 550px;border-radius: 15px;overflow: hidden;position: relative;}.container::after{content: "";position: absolute;/* inset为0,相当于top、left、bottom、right都为0的缩写 */inset: 0;background: url("images/bg.jpg") no-repeat;background-size: 500px;background-position: left bottom;opacity: 0.8;}/* 注册区域(登录区域很多样式和注册区域的一样,故而一些统一的样式写在了一起) */.register-box{width: 70%;position: absolute;z-index: 1;top: 50%;left: 50%;transform: translate(-50%,-50%);transition: 0.3s ease;}.register-title,.login-title{color: #fff;font-size: 27px;text-align: center;}.register-title span,.login-title span{color: rgba(0,0,0,0.4);display: none;}.register-box .input-box,.login-box .input-box{background-color: #fff;border-radius: 15px;overflow: hidden;margin-top: 50px;opacity: 1;visibility: visible;transition: 0.6s ease;}.register-box input,.login-box input{width: 100%;height: 30px;border: none;border-bottom: 1px solid rgba(0,0,0,0.1);font-size: 12px;padding: 8px 0;text-indent: 15px;outline: none;}.register-box input:last-child,.login-box input:last-child{border-bottom: none;}.register-box input::placeholder,.login-box input::placeholder{color: rgba(0,0,0,0.4);}.register-box button,.login-box button{width: 100%;padding: 15px 45px;margin: 15px 0;background: rgba(0,0,0,0.4);border: none;border-radius: 15px;color: rgba(255,255,255,0.8);font-size: 13px;font-weight: bold;cursor: pointer;opacity: 1;visibility: visible;transition: 0.3s ease;}.register-box button:hover,.login-box button:hover{background-color: rgba(0,0,0,0.8);}/* 登录区域 */.login-box{position: absolute;inset: 0;top: 20%;z-index: 2;background-color: #fff;transition: 0.3s ease;}.login-box::before{content: "";background-color: #fff;width: 200%;height: 250px;border-radius: 50%;position: absolute;top: -20px;left: 50%;transform: translateX(-50%);}.login-box .center{width: 70%;position: absolute;z-index: 3;left: 50%;top: 40%;transform: translate(-50%,-50%);}.login-title{color: #000;}.login-box .input-box{border: 1px solid rgba(0,0,0,0.1);}.login-box button{background-color: #75a297;}/* 注册、登录区域收起 */.login-box.slide-up{top: 90%;}.login-box.slide-up .center{top: 10%;transform: translate(-50%,0%);}.login-box.slide-up .login-title,.register-box.slide-up .register-title{font-size: 16px;cursor: pointer;}.login-box.slide-up .login-title span,.register-box.slide-up .register-title span{margin-right: 5px;display: inline-block;}.login-box.slide-up .input-box,.login-box.slide-up .button,.register-box.slide-up .input-box,.register-box.slide-up .button{opacity: 0;visibility: hidden;}.register-box.slide-up{top: 6%;transform: translate(-50%,0%);}</style>
</head><body><div class="container"><div class="register-box"><h2 class="register-title"><span>没有账号,去</span>注册日记本</h2><div class="input-box"><input type="text" placeholder="用户名"><input type="password" placeholder="密码"><input type="password" placeholder="确认密码"></div><button>注册</button></div><div class="login-box slide-up"><div class="center"><h2 class="login-title"><span>已有账号,去</span>登录日记本</h2><div class="input-box"><input type="text" placeholder="用户名"><input type="password" placeholder="密码"></div><button>登录</button></div></div></div><script>// 获取要操作的元素let login_title=document.querySelector('.login-title');let register_title=document.querySelector('.register-title');let login_box=document.querySelector('.login-box');let register_box=document.querySelector('.register-box');// 绑定标题点击事件login_title.addEventListener('click',()=>{// 判断是否收起,收起才可以点击if(login_box.classList.contains('slide-up')){register_box.classList.add('slide-up');login_box.classList.remove('slide-up');}})register_title.addEventListener('click',()=>{if(register_box.classList.contains('slide-up')){login_box.classList.add('slide-up');register_box.classList.remove('slide-up');}})</script>
</body></html>

JSP准备好了,接下来,就是我们得用控制器去访问它。

创建PageController,专门用来访问某些页面

package com.rabbit.diary.web;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;@Controller
public class PageController {@RequestMapping("login")public String login(){return "login";}
}

 login方法返回一个字符串,因为我们配置了视图解析器,所以返回字符串login,实际上找到的就是WEB-INF/jsp/login.jsp。

还有一个地方需要注意,就是SpringBoot访问jsp,还需要一个依赖,让我们加到pom.xml

<dependency><groupId>org.apache.tomcat.embed</groupId><artifactId>tomcat-embed-jasper</artifactId>
</dependency>

ok了,现在重启项目,访问http://localhost/login

发现背景怎么黑不溜秋的,这是因为背景图片没有引入。

对于这种静态资源,我们需要配置一下静态资源路径,因为我们这边使用的是SpringBoot(2.6.4)的版本,可能跟你之前看到的写法不一样,这一点需要注意。还是yml文件,我们加上:

web:resources:static-locations: classpath:static/

web和mvc是同级的,如果实在不知道加在哪里也不要紧,回头下载源代码就行了。源代码获取方式:关注最下方的公众号,回复【日记本】即可!

这个配置表示,以后你可以直接访问static目录下的资源。

比如,现在有这样的目录结构,找到bg.jpg

我们要访问它,直接 http://localhost/images/bg.jpg 即可!

接着,我们修改下login.jsp

添加项目根路径:

<c:set var="basePath" value="${pageContext.request.contextPath}"></c:set>

这句代码的作用是获取项目的根,比如以后项目的根改为 diary,那么basePath就是diary,我们访问后台就得在localhost后面加上diary。

找到css中获取背景图片的地方,改为:

.container::after{content: "";position: absolute;/* inset为0,相当于top、left、bottom、right都为0的缩写 */inset: 0;background: url("${basePath}/images/bg.jpg") no-repeat;background-size: 500px;background-position: left bottom;opacity: 0.8;
}

OK,重启。

访问 http://localhost/login

大功告成啦! 

总结

这一讲,我们整合了jsp,学会了springboot访问jsp,以及springboot2.6版本如何访问静态资源的方法。

这篇关于SpringBoot日记本系统全程直播02:登录页面搞起来撒~~的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/814865

相关文章

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

Security OAuth2 单点登录流程

单点登录(英语:Single sign-on,缩写为 SSO),又译为单一签入,一种对于许多相互关连,但是又是各自独立的软件系统,提供访问控制的属性。当拥有这项属性时,当用户登录时,就可以获取所有系统的访问权限,不用对每个单一系统都逐一登录。这项功能通常是以轻型目录访问协议(LDAP)来实现,在服务器上会将用户信息存储到LDAP数据库中。相同的,单一注销(single sign-off)就是指

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

Spring Security--Architecture Overview

1 核心组件 这一节主要介绍一些在Spring Security中常见且核心的Java类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。 1.1 SecurityContextHolder SecurityContextHolder用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境