嵌入式Tomcat学习-第三天
写在前面
什么是嵌入式 Tomcat?
嵌入式 Tomcat 是将 Apache Tomcat 服务器作为库文件集成到 Java 应用程序中的技术方案。它允许开发者通过编程方式直接启动、配置和管理 Tomcat,无需依赖独立安装的 Tomcat 服务器,适用于构建轻量级、自包含的 Web 应用或微服务。
版本特性(11.0.3)
- Servlet/JSP 规范支持
支持 Servlet 6.0 和 JSP 4.0 规范(基于 Jakarta EE 10 平台)。 - 轻量级嵌入
通过tomcat-embed-core
等依赖包实现核心功能集成,无需完整 Tomcat 安装。 - Java 版本要求
最低要求 Java 17 及以上版本。 - 性能优化
改进的 HTTP/2 支持、连接器性能调优及内存管理优化。
核心优势
- 简化部署
应用与服务器一体化,直接打包为可执行 JAR 文件,适合云原生场景。 - 灵活配置
通过代码动态配置端口、上下文路径、SSL 等参数,无需server.xml
文件。 - 开发便捷
与 Spring Boot、Micronaut 等框架无缝集成,快速构建独立 Web 服务。 - 资源占用低
仅加载必要的组件,启动速度快,适合资源受限环境。
典型应用场景
- 微服务架构中的独立服务节点
- 快速原型开发或测试环境
- 命令行工具集成 Web 接口
- 需要定制化 Web 容器行为的场景
集成struts2
什么是struts2
Apache Struts 是一款免费、开源的MVC框架,用于构建优雅且现代化的Java Web应用程序。它遵循"约定优于配置"的设计理念,通过插件架构实现高度可扩展性,并自带支持REST、AJAX和JSON等技术的插件。
如何集成到tomcat中
pom.xml添加struts2依赖
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.lhstack.tomcat</groupId>
<artifactId>tomcat-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- 2025-02-16 新增 -->
<!-- https://mvnrepository.com/artifact/org.apache.struts/struts2-core -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>7.0.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.tomcat.embed/tomcat-embed-core -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-core</artifactId>
<version>11.0.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.tomcat.embed/tomcat-embed-jasper -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<version>11.0.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.tomcat.embed/tomcat-embed-websocket -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-websocket</artifactId>
<version>11.0.3</version>
</dependency>
</dependencies>
<repositories>
<repository>
<id>aliyun</id>
<name>阿里云</name>
<url>https://maven.aliyun.com/repository/public</url>
</repository>
</repositories>
</project>
在webapp目录下创建web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>Basic Struts2</display-name>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index</welcome-file>
</welcome-file-list>
</web-app>
在resource目录下面创建struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<constant name="struts.devMode" value="true"/>
<package name="com.lhstack.tomcat.struts" extends="struts-default">
<!-- 访问index路径会渲染WEB-INF/jsp/index.jsp -->
<action name="index">
<result>WEB-INF/jsp/index.jsp</result>
</action>
</package>
</struts>
移动index.jsp到WEB-INF下
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
${pageContext.request.requestURI}
</body>
</html>
启动项目访问
struts2渲染jsp携带参数
创建HelloAction.java
package com.lhstack.tomcat.struts;
import org.apache.struts2.ActionSupport;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Map;
public class HelloAction extends ActionSupport {
private Map<String,String> param;
@Override
public String execute() throws Exception {
param = Map.of("date", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
return SUCCESS;
}
public Map<String, String> getParam() {
return param;
}
}
修改struts.xml配置
新增HelloAction配置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<constant name="struts.devMode" value="true"/>
<package name="com.lhstack.tomcat.struts" extends="struts-default">
<!-- 访问index路径会渲染WEB-INF/jsp/index.jsp -->
<action name="index">
<result>WEB-INF/jsp/index.jsp</result>
</action>
<!-- 新增hello action -->
<action name="hello" class="com.lhstack.tomcat.struts.HelloAction">
<result name="success">WEB-INF/jsp/hello.jsp</result>
</action>
</package>
</struts>
创建hello.jsp
<!DOCTYPE html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Hello World!</title>
</head>
<body>
<h2><s:property value="param.date" /></h2>
</body>
</html>
启动项目,通过浏览器访问
struts返回json内容
pom.xml增加json插件依赖
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.lhstack.tomcat</groupId>
<artifactId>tomcat-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- 2025-02-16 新增 -->
<!-- https://mvnrepository.com/artifact/org.apache.struts/struts2-core -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>7.0.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.struts/struts2-json-plugin -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-json-plugin</artifactId>
<version>7.0.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.tomcat.embed/tomcat-embed-core -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-core</artifactId>
<version>11.0.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.tomcat.embed/tomcat-embed-jasper -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<version>11.0.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.tomcat.embed/tomcat-embed-websocket -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-websocket</artifactId>
<version>11.0.3</version>
</dependency>
</dependencies>
<repositories>
<repository>
<id>aliyun</id>
<name>阿里云</name>
<url>https://maven.aliyun.com/repository/public</url>
</repository>
</repositories>
</project>
修改struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<constant name="struts.devMode" value="true"/>
<package name="com.lhstack.tomcat.struts" extends="struts-default,json-default">
<!-- 访问index路径会渲染WEB-INF/jsp/index.jsp -->
<action name="index">
<result>WEB-INF/jsp/index.jsp</result>
</action>
<action name="hello" class="com.lhstack.tomcat.struts.HelloAction">
<result name="success">WEB-INF/jsp/hello.jsp</result>
</action>
<action name="json" class="com.lhstack.tomcat.struts.JsonAction" method="json">
<!-- type=json -->
<result name="success" type="json">
<!-- data为JsonAction中的data参数 -->
<param name="root">data</param>
</result>
</action>
</package>
</struts>
创建JsonAction.java
package com.lhstack.tomcat.struts;
import org.apache.struts2.action.Action;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Map;
public class JsonAction {
private Map<String, String> data;
public String json() {
data = Map.of("date", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")),"name","lhstack");
return Action.SUCCESS;
}
public Map<String, String> getData() {
return data;
}
}
启动项目并测试
结尾
今天写了如何在嵌入式tomcat中集成struts,并且实现jsp渲染和在jsp中使用strtus的tag标签以及json数据返回
嵌入式Tomcat学习-第三天
https://blog.lhstack.xyz/archives/tomcat-thirdday