Spring 全家桶之 Spring Boot 2.6.4(八)- 嵌入式 Servlet 容器(Part B)

简介: Spring 全家桶之 Spring Boot 2.6.4(八)- 嵌入式 Servlet 容器(Part B)

三、使用其他Spring Boot内置的Servlet容器

Spring Boot除了支持内嵌的Tomcat Servlet容器,还支持Jetty和Undertow两种Servlet容器

69f32ec3eded428a9eb6fa6a4a5dc65f_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

Jetty基于Java语言编写的一个开源servlet容器,为Jsp和servlet提供了运行环境,可以迅速为一些独立运行的Java应用提供网络和web连接,Jetty的应用更加快速,修改简单,对新的Servlet规范的支持较好。

Undertow是Red Hat公司的开源产品, 它完全采用Java语言开发,是一款灵活的高性能Web服务器,支持阻塞IO和非阻塞IO。由于Undertow采用Java语言开发,可以直接嵌入到Java项目中使用。同时, Undertow完全支持Servlet和Web Socket,在高并发情况下表现非常出色。

使用Jetty Servlet容器

引入其他Servlet容器方式,首先排除默认的Tomcat,再引入其他的,使用exclusion标签来排除依赖,不需要添加版本号,再通过dependency标签引入需要的依赖

<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>
<!--引入其他的Servlet容器-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
复制代码

重新启动应用

9183b404a7e445cf99cba9f2207761dd_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

控制台已经打印出Jetty已经启动,并且在8083端口启动,通过WebServerFactoryCustomizer做的配置依然有效

浏览器中访问已经注册的Servlet

e891a42a55654296baba7bd5f39b9f01_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

d021ff5d8c9a4df381cfb82edc5ee200_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

f62045755def4ea2984207453e9cc6cf_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

自定义的Filter、Servlet、Listener依然有效

四、使用外置的Servlet容器

由于使用内置Servlet容器默认不支持JSP并且优化定制比较复杂,Spring Boot也支持使用外部的Servlet容器,在IDEA创建新的项目spring-boot-tomcat,打成war包形式

image.png

相比jar包形式多了一个类,但是该项目没有webapp目录和web.xml文件文件,通过查看项目结构Project Structure -> Modules

image.png

点击ok会自动创建webapp目录

image.png

点击+号在webapp目录下生成web.xml文件

image.png

webapp目录和web.xml生成之后,就可以整合本地Tomcat,点击Configuration,添加一个Local Tomcat Server

image.png

进入到Deployment,点击Fix,选择部署的war包

image.png

设置访问路径

image.png

点击apply之后启动tomcat

image.png

首页能正常显示,说明应用部署成功。在webapp目录下添加index.jsp页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>INDEX</title>
</head>
<body>
    <h1>James, This is Vulture Team</h1>
</body>
</html>
复制代码

重新启动应用

image.png

刚刚webapp目录下创建的index.jsp能够正常显示

新增CobraController

@Controller
public class CobraController {
    @RequestMapping("/cobra")
    public String cobra(Model model){
        model.addAttribute("msg","Copy, This is Cobra Team!");
        return "success";
    }
}
复制代码

在webapp下新建pages目录并增加success.jsp页面,在该页面中取出cobra()方法中保存的msg信息

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Sucess</title>
</head>
<body>
    <h1>${msg}</h1>
</body>
</html>
复制代码

index.jsp页面中的body标签下增加/cobra超链接

<h2><a href="/cobra">Call Cobra Team</a></h2>
复制代码

Spring MVC配置文件中这样配置视图解析器

<!--配置试图解析器,自动拼接页面地址,自动在jsp页面前增加/WEB-INF/pages/-->
<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/pages/"></property>
    <property name="suffix" value=".jsp"></property>
</bean>
复制代码

Spring Boot中在application.properties中配置视图解析器

spring.mvc.view.prefix=/WEB-INF/pages/
spring.mvc.view.suffix=.jsp
复制代码

重启应用并点击首页超链接

image.png

success页面中能成功取出msg信息

使用外置Tomcat步骤

  1. 将项目打包方式改为war
<packaging>war</packaging>
复制代码
  1. 增加Tomcat依赖,scope为provided
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</dependency>
复制代码
  1. 在主程序类同级目录下增加ServletInitializer类,用来启动主程序类
public class ServletInitializer extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(LilithApplication.class);
    }
}
复制代码
  1. 配置Tomcat,启动应用即可


相关文章
|
2月前
|
XML Java 应用服务中间件
【SpringBoot(一)】Spring的认知、容器功能讲解与自动装配原理的入门,带你熟悉Springboot中基本的注解使用
SpringBoot专栏开篇第一章,讲述认识SpringBoot、Bean容器功能的讲解、自动装配原理的入门,还有其他常用的Springboot注解!如果想要了解SpringBoot,那么就进来看看吧!
446 2
|
3月前
|
人工智能 Java 机器人
基于Spring AI Alibaba + Spring Boot + Ollama搭建本地AI对话机器人API
Spring AI Alibaba集成Ollama,基于Java构建本地大模型应用,支持流式对话、knife4j接口可视化,实现高隐私、免API密钥的离线AI服务。
2868 1
基于Spring AI Alibaba + Spring Boot + Ollama搭建本地AI对话机器人API
存储 JSON Java
540 0
|
4月前
|
监控 Java API
Spring Boot 3.2 结合 Spring Cloud 微服务架构实操指南 现代分布式应用系统构建实战教程
Spring Boot 3.2 + Spring Cloud 2023.0 微服务架构实践摘要 本文基于Spring Boot 3.2.5和Spring Cloud 2023.0.1最新稳定版本,演示现代微服务架构的构建过程。主要内容包括: 技术栈选择:采用Spring Cloud Netflix Eureka 4.1.0作为服务注册中心,Resilience4j 2.1.0替代Hystrix实现熔断机制,配合OpenFeign和Gateway等组件。 核心实操步骤: 搭建Eureka注册中心服务 构建商品
818 3
|
9月前
|
安全 Java Apache
微服务——SpringBoot使用归纳——Spring Boot中集成 Shiro——Shiro 身份和权限认证
本文介绍了 Apache Shiro 的身份认证与权限认证机制。在身份认证部分,分析了 Shiro 的认证流程,包括应用程序调用 `Subject.login(token)` 方法、SecurityManager 接管认证以及通过 Realm 进行具体的安全验证。权限认证部分阐述了权限(permission)、角色(role)和用户(user)三者的关系,其中用户可拥有多个角色,角色则对应不同的权限组合,例如普通用户仅能查看或添加信息,而管理员可执行所有操作。
503 0
|
9月前
|
安全 Java 数据安全/隐私保护
微服务——SpringBoot使用归纳——Spring Boot中集成 Shiro——Shiro 三大核心组件
本课程介绍如何在Spring Boot中集成Shiro框架,主要讲解Shiro的认证与授权功能。Shiro是一个简单易用的Java安全框架,用于认证、授权、加密和会话管理等。其核心组件包括Subject(认证主体)、SecurityManager(安全管理员)和Realm(域)。Subject负责身份认证,包含Principals(身份)和Credentials(凭证);SecurityManager是架构核心,协调内部组件运作;Realm则是连接Shiro与应用数据的桥梁,用于访问用户账户及权限信息。通过学习,您将掌握Shiro的基本原理及其在项目中的应用。
364 0
|
9月前
|
消息中间件 Java 微服务
微服务——SpringBoot使用归纳——Spring Boot中集成ActiveMQ——发布/订阅消息的生产和消费
本文详细讲解了Spring Boot中ActiveMQ的发布/订阅消息机制,包括消息生产和消费的具体实现方式。生产端通过`sendMessage`方法发送订阅消息,消费端则需配置`application.yml`或自定义工厂以支持topic消息监听。为解决点对点与发布/订阅消息兼容问题,可通过设置`containerFactory`实现两者共存。最后,文章还提供了测试方法及总结,帮助读者掌握ActiveMQ在异步消息处理中的应用。
440 0
|
9月前
|
消息中间件 网络协议 Java
微服务——SpringBoot使用归纳——Spring Boot中集成ActiveMQ——ActiveMQ集成
本文介绍了在 Spring Boot 中集成 ActiveMQ 的详细步骤。首先通过引入 `spring-boot-starter-activemq` 依赖并配置 `application.yml` 文件实现基本设置。接着,创建 Queue 和 Topic 消息类型,分别使用 `ActiveMQQueue` 和 `ActiveMQTopic` 类完成配置。随后,利用 `JmsMessagingTemplate` 实现消息发送功能,并通过 Controller 和监听器实现点对点消息的生产和消费。最后,通过浏览器访问测试接口验证消息传递的成功性。
633 0