SpringBoot:web开发

web开发demo:点击查看 LearnSpringBoot05Web

点击查看更多的SpringBoot教程

技术摘要

  1. webjars
  2. Bootstrap
  3. 模板引擎thymeleaf
  4. 嵌入式Servlet容器
  5. 注册web三大组件

一、webjars

webjars官网
简介
在这里插入图片描述

简介翻译
WebJars 是打包到 JAR(Java Archive)文件中的客户端 Web 库(例如 jQuery 和 Bootstrap)。 显式且轻松地管理基于 JVM 的 Web 应用程序中的客户端依赖项 使用基于 JVM 的构建工具(例如 Maven、Gradle、sbt…)下载客户端依赖项 了解您正在使用哪些客户端依赖项 传递依赖项会自动解析并通过 RequireJS 选择性加载 部署在 Maven 中心 公共 CDN。

pom.xml添加webjars依赖
在这里插入图片描述

pom.xml添加webjars依赖代码

    <!--https://www.webjars.org/WebJars介绍 https://blog.csdn.net/Adrian_Dai/article/details/80505076http://localhost:8084/webjars/jquery/3.6.4/jquery.js  访问webjars的jquery静态资源注意:http://localhost:8084/crud访问地址后面加/crud,因为在application.properties里配置了访问路径: server.servlet.context-path=/crudhttp://localhost:8084/crud/webjars/jquery/3.6.4/jquery.js  访问webjars的jquery静态资源--><dependency><groupId>org.webjars</groupId><artifactId>jquery</artifactId><version>3.6.4</version></dependency><!--https://www.webjars.org/ 里找到 bootstrapbootstrap官网:https://getbootstrap.com/bootstrap中文网:https://www.bootcss.com/https://github.com/twbs/bootstraphttp://localhost:8084/webjars/bootstrap/4.0.0/js/bootstrap.js  访问webjars的bootstrap静态资源注意:http://localhost:8084/crud访问地址后面加/crud,因为在application.properties里配置了访问路径: server.servlet.context-path=/crudhttp://localhost:8084/crud/webjars/bootstrap/4.0.0/js/bootstrap.js  访问webjars的bootstrap静态资源--><dependency><groupId>org.webjars</groupId><artifactId>bootstrap</artifactId>
<!--            <version>5.3.1</version>--><version>4.0.0</version></dependency>

项目启动后,访问webjars的jquery的jquery.js静态资源
在这里插入图片描述

项目启动后,访问webjars的bootstrap的js/bootstrap.js静态资源
在这里插入图片描述

二、Bootstrap

Bootstrap官网
Bootstrap中文网
Github里的Bootstrap
Bootstrap是美国Twitter公司的设计师Mark Otto和Jacob Thornton合作基于HTML、CSS、JavaScript 开发的简洁、直观、强悍的前端开发框架,使得 Web 开发更加快捷。Bootstrap提供了优雅的HTML和CSS规范,它即是由动态CSS语言Less写成。

三、模板引擎thymeleaf

thymeleaf官网
Github里thymeleaf
简介
在这里插入图片描述

简介翻译
Thymeleaf是一个现代的服务器端Java模板引擎,适用于web和独立环境。
Thymeleaf的主要目标是为您的开发工作流程带来优雅的自然模板——HTML可以在浏览器中正确显示,也可以作为静态原型工作,允许开发团队之间更强的协作。
有了Spring框架的模块,与你最喜欢的工具的大量集成,以及插入你自己的功能的能力,Thymeleaf是现代HTML5 JVM web开发的理想选择——尽管它还有更多的功能。

添加spring-boot-starter-thymeleaf依赖
Spring-Boot的starters文档找到spring-boot-starter-thymeleaf在这里插入图片描述

在这里插入图片描述

pom.xml添加spring-boot-starter-thymeleaf依赖代码

        <!--spring-boot-starter-thymeleafhttps://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#using.build-systems.startershttps://github.com/thymeleaf/thymeleafTemplateEngineConfigurationsorg.springframework.boot.autoconfigure.thymeleaf把html页面放在 classpath:/templates/ ,thymeleaf就可以自动渲染了--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency>

把html页面放在 classpath:/templates/ ,thymeleaf就可以自动渲染了
在这里插入图片描述

四、嵌入式Servlet容器

MyServeltConfig.java类里配置嵌入式的servlet容器在这里插入图片描述

查看支持嵌入其他servlet
在这里插入图片描述

MyServeltConfig.java代码

package com.example.learnspringboot05web.config;import com.example.learnspringboot05web.filter.MyFilter;
import com.example.learnspringboot05web.listener.Mylistener;
import com.example.learnspringboot05web.servlet.Myservlet;
import org.springframework.boot.web.embedded.jetty.ConfigurableJettyWebServerFactory;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import java.lang.management.MemoryUsage;
import java.lang.reflect.Array;
import java.util.Arrays;@Configuration
public class MyServeltConfig {//注册三大组件@Beanpublic ServletRegistrationBean myServlet() {//http://localhost:8084/crud/myServletServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new Myservlet(), "/myServlet");return servletRegistrationBean;}@Beanpublic FilterRegistrationBean filterRegistrationBean() {FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();filterRegistrationBean.setFilter(new MyFilter());filterRegistrationBean.setUrlPatterns(Arrays.asList("/hello", "/myServlet"));return filterRegistrationBean;}@Beanpublic ServletListenerRegistrationBean mylistener(){ServletListenerRegistrationBean<Mylistener> registrationBean = new ServletListenerRegistrationBean<Mylistener>(new Mylistener());return registrationBean;}//配置嵌入式的servlet容器/*https://www.jianshu.com/p/b973476ccfd6   https://blog.csdn.net/qq_43843951/article/details/108049897Spring Boot2.0以上版本EmbeddedServletContainerCustomizer被WebServerFactoryCustomizer替代*/@Beanpublic WebServerFactoryCustomizer<ConfigurableJettyWebServerFactory> webServerFactoryWebServerFactoryCustomizer() {return new WebServerFactoryCustomizer<ConfigurableJettyWebServerFactory>() {//定制嵌入式的servlet容器相关规则@Overridepublic void customize(ConfigurableJettyWebServerFactory factory) {factory.setPort(8082);}};}
}

五、注册web三大组件

web三大组件分别是:

  1. Servlet
  2. Filter: 过滤器
  3. Listener :监听器

对应的Bean类

  1. ServletRegistrationBean
  2. FilterRegistrationBean
  3. ServletListenerRegistrationBean

在MyServeltConfig.java类里注册三大组件
在这里插入图片描述

Myservlet.java代码

package com.example.learnspringboot05web.servlet;import com.sun.source.util.DocSourcePositions;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;import java.io.IOException;public class Myservlet extends HttpServlet {//http://localhost:8084/crud/myServlet//处理get请求@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doPost(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.getWriter().write("hello Myservlet");}
}

Mylistener.java代码

package com.example.learnspringboot05web.listener;import jakarta.servlet.ServletContextEvent;
import jakarta.servlet.ServletContextListener;public class Mylistener implements ServletContextListener {@Overridepublic void contextInitialized(ServletContextEvent sce) {System.out.println("Mylistener 执行了 contextInitialized web应用启动");}@Overridepublic void contextDestroyed(ServletContextEvent sce) {System.out.println("Mylistener 执行了 contextDestroyed web项目销毁");}
}

MyFilter.java代码

package com.example.learnspringboot05web.filter;import jakarta.servlet.*;import java.io.IOException;public class MyFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {Filter.super.init(filterConfig);}@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {System.out.println("MyFilter 执行了 doFilter ");chain.doFilter(request, response );}@Overridepublic void destroy() {Filter.super.destroy();}
}

Mylistener组件监听结果
在这里插入图片描述

Servlet和MyFilter组件回调
项目启动后,在浏览器地址栏访问:http://localhost:8084/crud/myServlet
在这里插入图片描述
web获取到Servlet组件写入的数据在这里插入图片描述
MyFilter组件回调在这里插入图片描述

六、bootstrap和thymeleaf配合使用的效果

项目启动后,在浏览器地址栏里访问http://localhost:8084/crud/
账户:admin;密码:123456
在这里插入图片描述

登录成功进入主页
在这里插入图片描述

员工管理页面
在这里插入图片描述

编辑页面
在这里插入图片描述

添加员工页面
在这里插入图片描述

application.properties代码


#查看 ServerProperties 源码server.port=8084
#spring.web.resources.static-locations=classpath:/hello, classpath:/test# 禁止混存, 修改后 按住 commd + f9 重新编译
spring.thymeleaf.cache=false# 访问路径必须是 crud ? http://localhost:8084/crud/
server.servlet.context-path=/crud
# 绑定国际化 从 i18n文件里读取
spring.messages.basename=i18n.login#默认的格式:dd/MM/yyyy
spring.mvc.format.date=yyyy-MM-dd#SpringBoot-RuntimeException缺少exception和message问题解决方法,  这个问题是由于SpringBoot2.0以上版本,需要在配置文件中指定server的异常对象和异常信息
# https://blog.csdn.net/qq_40898909/article/details/126346500     https://blog.csdn.net/qq_33879627/article/details/106621563
# 查看 ErrorProperties 源码 private IncludeAttribute includeMessage = IncludeAttribute.NEVER;  includeException 默认 false
server.error.include-exception=true
server.error.include-message=always

pom.xml代码

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.1.1</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.example</groupId><artifactId>LearnSpringBoot05Web</artifactId><version>0.0.1-SNAPSHOT</version><name>LearnSpringBoot05Web</name><description>LearnSpringBoot05Web</description><properties><java.version>17</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--引入其他servletjetty启动java.lang.ClassNotFoundException: jakarta.servlet.http.HttpSessionContext解决方法:pom文件中添加依赖jakarta.servletjakarta.servlet-api5.0.0原因:此时的jetty是11.x版本的,不支持jakarta.servlet-api 6,改成5即可原文链接:https://blog.csdn.net/weixin_44866139/article/details/132006996-->
<!--        <dependency>-->
<!--            <groupId>org.springframework.boot</groupId>-->
<!--            <artifactId>spring-boot-starter-web</artifactId>-->
<!--            <exclusions>-->
<!--                <exclusion>-->
<!--                    <groupId>org.springframework.boot</groupId>-->
<!--                    <artifactId>spring-boot-starter-tomcat</artifactId>-->
<!--                </exclusion>-->
<!--            </exclusions>-->
<!--        </dependency>--><!--        <dependency>-->
<!--            <groupId>org.springframework.boot</groupId>-->
<!--            <artifactId>spring-boot-starter-undertow</artifactId>-->
<!--&lt;!&ndash;            <artifactId>spring-boot-starter-jetty</artifactId>&ndash;&gt;-->
<!--                                    undertow  和 jetty 二选一                   -->
<!--        </dependency>--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!--https://www.webjars.org/WebJars介绍 https://blog.csdn.net/Adrian_Dai/article/details/80505076http://localhost:8084/webjars/jquery/3.6.4/jquery.js  访问webjars的jquery静态资源注意:http://localhost:8084/crud访问地址后面加/crud,因为在application.properties里配置了访问路径: server.servlet.context-path=/crudhttp://localhost:8084/crud/webjars/jquery/3.6.4/jquery.js  访问webjars的jquery静态资源--><dependency><groupId>org.webjars</groupId><artifactId>jquery</artifactId><version>3.6.4</version></dependency><!--https://www.webjars.org/ 里找到 bootstrapbootstrap官网:https://getbootstrap.com/bootstrap中文网:https://www.bootcss.com/https://github.com/twbs/bootstraphttp://localhost:8084/webjars/bootstrap/4.0.0/js/bootstrap.js  访问webjars的bootstrap静态资源注意:http://localhost:8084/crud访问地址后面加/crud,因为在application.properties里配置了访问路径: server.servlet.context-path=/crudhttp://localhost:8084/crud/webjars/bootstrap/4.0.0/js/bootstrap.js  访问webjars的bootstrap静态资源--><dependency><groupId>org.webjars</groupId><artifactId>bootstrap</artifactId>
<!--            <version>5.3.1</version>--><version>4.0.0</version></dependency><!--spring-boot-starter-thymeleafhttps://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#using.build-systems.startershttps://github.com/thymeleaf/thymeleafTemplateEngineConfigurationsorg.springframework.boot.autoconfigure.thymeleaf把html页面放在 classpath:/templates/ ,thymeleaf就可以自动渲染了--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/673180.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ACK One Argo工作流:实现动态 Fan-out/Fan-in 任务编排

作者&#xff1a;庄宇 什么是 Fan-out Fan-in 在工作流编排过程中&#xff0c;为了加快大任务处理的效率&#xff0c;可以使用 Fan-out Fan-in 任务编排&#xff0c;将大任务分解成小任务&#xff0c;然后并行运行小任务&#xff0c;最后聚合结果。 由上图&#xff0c;可以使…

在 Docker 中启动 ROS2 里的 rivz2 和 rqt 出现错误的解决方法

1. 出现错误&#xff1a; 运行 ros2 run rivz2 rivz2 &#xff0c;报错如下 &#xff1a; No protocol specified qt.qpa.xcb: could not connect to display :1 qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was f…

Java Swing实现简易版项目代码统计

尝试用AI生成日常方便使用的代码程序 用文心一言生成的可用代码 (1)提示1 假如你是一个java程序员&#xff0c;请用java swing创建一个JFrame&#xff0c;显示一个JTextField显示路径&#xff0c;Jtextfield右侧添加一个JButton&#xff0c;下面添加一个JTextArea&#xff0c…

文档协作技术——Operational Transformations简单了解

OT是支持协作软件系统的一种广泛使用的技术。 OT通常使用副本文档储存&#xff0c;每个客户端都拥有对文档的副本。客户端在本地副本以无锁非堵塞方式操作&#xff0c;并将改变传递到其他客户端。当客户端收到其他客户端传播的改变之后&#xff0c;通过转换应用更改&#xff0…

【前端web入门第四天】03 显示模式+综合案例热词与banner效果

文章目录: 1. 显示模式 1.1 块级元素,行内元素,行内块元素 1.2 转换显示模式 综合案例 综合案例一 热词综合案例二 banner效果 1. 显示模式 什么是显示模式 标签(元素)的显示方式 标签的作用是什么? 布局网页的时候&#xff0c;根据标签的显示模式选择合适的标签摆放内容。…

揭秘备忘录模式:打造灵活高效的状态管理解决方案

备忘录模式&#xff08;Memento Pattern&#xff09;是一种行为设计模式&#xff0c;它允许在不暴露对象内部状态的情况下捕获和恢复对象的内部状态。这种模式主要用于实现撤销操作。 在 Java 中&#xff0c;备忘录模式通常包括以下三个角色&#xff1a; 发起人&#xff08;O…

vue3:25—其他API

目录 1、shallowRef和shallowReactive 2、readonly与shallowReadonly readonly shallowReadonly 3、toRaw和markRaw toRaw markRaw 4、customRef 1、shallowRef和shallowReactive shallowRef 1.作用:创建一个响应式数据&#xff0c;但只对顶层属性进行响应式处理。2…

Windows 安装 MySQL 最新最简教程

Windows 安装 MySQL 最新最简教程 官网地址 https://dev.mysql.com/downloads/mysql/下载 MySQL zip 文件 配置 MySQL1、解压文件 2、进入 bin 目录 搜索栏输入 cmd 回车进入命令行 C:\Users\zhong\Desktop\MySQL\mysql-8.3.0-winx64\mysql-8.3.0-winx64\bin 注意这里是你自己…

JUnit实践教程——Java的单元测试框架

前言 大家好&#xff0c;我是chowley&#xff0c;最近在学单元测试框架——JUnit&#xff0c;写个博客记录一下&#xff01; 在软件开发中&#xff0c;单元测试是确保代码质量和稳定性的重要手段之一。JUnit作为Java领域最流行的单元测试框架&#xff0c;为开发人员提供了简单…

(2)(2.14) SPL Satellite Telemetry

文章目录 前言 1 本地 Wi-Fi&#xff08;费用&#xff1a;30 美元以上&#xff0c;范围&#xff1a;室内&#xff09; 2 蜂窝电话&#xff08;费用&#xff1a;100 美元以上&#xff0c;范围&#xff1a;蜂窝电话覆盖区域&#xff09; 3 手机卫星&#xff08;费用&#xff…

IT行业顶级证书:助力职业生涯的制胜法宝

IT行业顶级证书&#xff1a;助力职业生涯的制胜法宝 在IT行业&#xff0c;拥有一系列高含金量的证书是事关职业生涯发展的关键。这些证书不仅是技能的象征&#xff0c;更是在激烈的市场竞争中脱颖而出的法宝。让我们一起揭晓在中国IT行业中&#xff0c;哪些证书是最具含金量的…

仰暮计划|“​爷爷说这些话的时候眼睛都红着,他那变形的脊柱和瘸拐的双腿都证明他曾为这个家付出了血汗拼尽了全力”

赴一场拾光之旅&#xff0c;集往年回忆碎片 爷爷生于1952年&#xff0c;今年已有七十一了&#xff0c;是河南焦作沁阳北金村的一位地道农民&#xff0c;劳苦一生&#xff0c;如今终于得以颐养天年。许是早年经历过于难忘&#xff0c;爷爷如今与我讲起仍是记忆犹新&#xff0c;…

百卓Smart管理平台 uploadfile.php 文件上传漏洞【CVE-2024-0939】

百卓Smart管理平台 uploadfile.php 文件上传漏洞【CVE-2024-0939】 一、 产品简介二、 漏洞概述三、 影响范围四、 复现环境五、 漏洞复现手动复现小龙验证Goby验证 免责声明&#xff1a;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工…

uniapp 本地存储的方式

1. uniapp 本地存储的方式 在uniapp开发中&#xff0c;本地存储是一个常见的需求。本地存储可以帮助我们在客户端保存和管理数据&#xff0c;以便在应用程序中进行持久化存储。本文将介绍uniapp中本地存储的几种方式&#xff0c;以及相关的代码示例。 1.1. 介绍 在移动应用开发…

瑞_力扣LeetCode_二叉树相关题

文章目录 说明题目 144. 二叉树的前序遍历题解 题目 94. 二叉树的中序遍历题解 题目 145. 二叉树的后序遍历题解 题目 105. 从前序与中序遍历序列构造二叉树题解 题目 106. 从中序与后序遍历序列构造二叉树题解 &#x1f64a; 前言&#xff1a;本文章为瑞_系列专栏之《刷题》的…

【深度学习】Softmax实现手写数字识别

实训1&#xff1a;Softmax实现手写数字识别 相关知识点: numpy科学计算包&#xff0c;如向量化操作&#xff0c;广播机制等 1 任务目标 1.1 简介 本次案例中&#xff0c;你需要用python实现Softmax回归方法&#xff0c;用于MNIST手写数字数据集分类任务。你需要完成前向计算…

python将Word页面纸张方向设置为横向

通过python-docx的章节属性&#xff0c;就可以更改纸张方向、纸张尺寸。 import docx from docx.enum.section import WD_ORIENT from docx.shared import Cmdocument docx.Document() section document.sections[0]# 设置纸张大小为A4大小 section.page_width Cm(21) sect…

2023年全国职业院校技能大赛软件测试赛题第3套

2023年全国职业院校技能大赛 软件测试赛题第3套 赛项名称&#xff1a; 软件测试 英文名称&#xff1a; Software Testing 赛项编号&#xff1a; GZ034 归属产业&#xff1a; 电子与信息大类 …

语雀·教育邮箱现在提供免费一年会员资格!

作为一位深度使用电子笔记的用户&#xff0c;我曾长期使用印象笔记&#xff0c;后来发现有道云笔记也非常适合我的需求。然而&#xff0c;我最近发现语雀和飞书等云笔记服务越来越出色。&#xff08;相比之下&#xff0c;有道云笔记的启动速度较慢&#xff0c;而且存在各种广告…

JVM 性能调优- 五种内存溢出(5)

在介绍之前先简单介绍下 直接内存(Direct Memory)和堆内存(Heap Memory): 关系: 直接内存并不是Java虚拟机的一部分,它是通过Java的NIO库中的ByteBuffer来分配和管理的。直接内存通常由操作系统的本地内存(Native Memory)提供支持。堆内存是Java虚拟机的一部分,用于存…