IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> SpringBoot日记本系统全程直播02:登录页面搞起来撒~~ -> 正文阅读

[Java知识库]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版本如何访问静态资源的方法。

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-03-22 20:22:50  更:2022-03-22 20:22:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:12:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码