如何将不带web.xml的Spring应用程序部署到Tomcat

介绍

由于Servlet 3规范不再需要web.xml来配置Web应用程序,因此已通过使用注释代替。 在本文中,我们将研究如何在不使用web.xml情况下将简单的基于Spring的应用程序部署到Tomcat 8.5。*。

创建一个空的应用程序

使用以下命令使用maven webapp原型创建一个空的Web应用程序:

mvn archetype:generate -DgroupId=info.sanaulla -DartifactId=spring-tomcat-sample -Dversion=1.0 -DarchetypeArtifactId=maven-archetype-webapp

删除在src\main\webapp\WEB-INF创建的web.xml ,然后我们需要更新maven-war-plugin以便在缺少web.xml不会失败,这可以通过更新build的插件信息来完成标签,如下所示:

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId><version>3.1.0</version><executions><execution><id>default-war</id><phase>prepare-package</phase><configuration><failOnMissingWebXml>false</failOnMissingWebXml></configuration></execution></executions>
</plugin>

设置依赖

我们需要将以下依赖项添加到pom.xml

<dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.0</version><scope>provided</scope>
</dependency>
<dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version>
</dependency>
<dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>${spring.version}</version>
</dependency>
<dependency><groupId>org.thymeleaf</groupId><artifactId>thymeleaf-spring5</artifactId><version>${thymeleaf.version}</version>
</dependency>
<dependency><groupId>nz.net.ultraq.thymeleaf</groupId><artifactId>thymeleaf-layout-dialect</artifactId><version>${thymeleaf-layout-dialect.version}</version>
</dependency>
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>${jackson.version}</version>
</dependency>
<dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><version>${h2.version}</version>
</dependency>
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional><version>${lombok.version}</version>
</dependency>

以及它们相应的版本属性如下:

<properties><maven.compiler.target>1.8</maven.compiler.target><maven.compiler.source>1.8</maven.compiler.source><java.version>1.8</java.version><apache.commons.version>3.6</apache.commons.version><h2.version>1.4.196</h2.version><jackson.version>2.9.2</jackson.version><lombok.version>1.16.18</lombok.version><spring.version>5.0.0.RELEASE</spring.version><thymeleaf.version>3.0.9.RELEASE</thymeleaf.version><thymeleaf-layout-dialect.version>2.2.1</thymeleaf-layout-dialect.version>
</properties>

配置H2嵌入式数据库

让我们创建一个配置Bean来配置嵌入式H2的DataSource ,并创建一个NamedParameterJdbcTemplate类型的Bean

@Configuration
public class DBConfiguration {@Beanpublic DataSource dataSource() {return new EmbeddedDatabaseBuilder().generateUniqueName(false).setName("testdb").setType(EmbeddedDatabaseType.H2).addDefaultScripts().setScriptEncoding("UTF-8").ignoreFailedDrops(true).build();}@Beanpublic NamedParameterJdbcTemplate namedParamJdbcTemplate() {NamedParameterJdbcTemplate namedParamJdbcTemplate = new NamedParameterJdbcTemplate(dataSource());return namedParamJdbcTemplate;}
}

然后,我们需要一个SQL脚本schema.sql ,该脚本将设置表,而data.sql将在每次运行应用程序时为它们添加数据。 让我们在src/main/resources创建相应的文件:

-- schema.sql
DROP TABLE IF EXISTS person;CREATE TABLE person(id NUMERIC IDENTITY PRIMARY KEY,first_name VARCHAR(512) NOT NULL,last_name VARCHAR(512) NOT NULL,date_of_birth TIMESTAMP NOT NULL,place_of_birth VARCHAR(512)
);-- data.sql
INSERT INTO person(first_name, last_name, date_of_birth, place_of_birth) 
VALUES ('First', 'Last', DATE '1990-02-21', 'Bangalore');
INSERT INTO person(first_name, last_name, date_of_birth, place_of_birth) 
VALUES ('First2', 'Last2', DATE '1987-02-21', 'Mumbai');
INSERT INTO person(first_name, last_name, date_of_birth, place_of_birth) 
VALUES ('First3', 'Last3', DATE '1996-02-21', 'Chennai');
INSERT INTO person(first_name, last_name, date_of_birth, place_of_birth) 
VALUES ('First4', 'Last4', DATE '1978-02-21', 'Delhi');

创建一个API控制器

让我们创建一个模型类Person

@Data
public class Person {private Integer id;private String firstName;private String lastName;private Date dateOfBirth;private String placeOfBirth;
}

以及相应的DAO类PersonDAO

@Service
public class PersonDAO {@Autowired NamedParameterJdbcTemplate jdbcTemplate;public List<Person> getPersons(){return jdbcTemplate.query("SELECT * FROM person", (ResultSet rs, int rowNum) -> {Person p = new Person();p.setId(rs.getInt("id"));p.setFirstName(rs.getString("first_name"));p.setLastName(rs.getString("last_name"));p.setDateOfBirth(rs.getDate("date_of_birth"));p.setPlaceOfBirth(rs.getString("place_of_birth"));return p;});}
}

API控制器如下所示:

@RestController
@RequestMapping("/api/persons")
public class ApiController {@Autowired PersonDAO personDao;@GetMappingpublic ResponseEntity<?> getPersons(){return ResponseEntity.ok(personDao.getPersons());}
}

将应用程序部署到Tomcat

我假设您已经下载了Tomcat并解压缩到文件系统中。 出于开发目的,我更喜欢更新server.xml来配置上下文并指向爆炸的war目录,如下所示:

<Context path="/sample" reloadable="true" docBase="G:\samples\spring-tomcat-sample\target\spring-tomcat-sample" />

对于与生产相关的部署,您可以将战争上传到服务器上。

因此,一旦启动服务器,就可以通过在浏览器中访问API URL http:// localhost:8080 / sample / api / persons来验证应用程序是否已正确部署,如下所示:

配置Thymeleaf

现在,让我们将Thymeleaf配置为模板引擎,以为应用程序提供UI。 配置它需要以下bean定义:
–解决模板的技术。 有很多可能性,我们将使用基于类路径的模板解析器
–创建SpringTemplateEngine的实例并设置模板解析器技术 –设置Spring的ViewResolver以使用SpringTemplateEngine

@Configuration
public class ViewConfiguration {@Beanpublic ClassLoaderTemplateResolver templateResolver() {ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver();templateResolver.setPrefix("templates/");templateResolver.setSuffix(".html");templateResolver.setTemplateMode(TemplateMode.HTML);templateResolver.setCacheable(false);return templateResolver;}@Beanpublic SpringTemplateEngine templateEngine() {SpringTemplateEngine templateEngine = new SpringTemplateEngine();templateEngine.setTemplateResolver(templateResolver());templateEngine.addDialect(new LayoutDialect());return templateEngine;}@Beanpublic ViewResolver viewResolver() {ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();viewResolver.setTemplateEngine(templateEngine());viewResolver.setCharacterEncoding("UTF-8");return viewResolver;}}

创建视图控制器

让我们创建一个简单的控制器,它将为我们的UI模板提供服务:

@Controller
@RequestMapping("/")
public class ViewController {@Autowired PersonDAO personDao;@GetMappingpublic String index(Model model) {model.addAttribute("persons", personDao.getPersons());return "index";}
}

创建基于Thymeleaf的模板

我们需要创建一个模板index.html ,它是从上述控制器返回的:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"><head><link rel="stylesheet" href="https://bootswatch.com/4/cerulean/bootstrap.min.css" /></head><body><nav class="navbar navbar-expand-lg navbar-dark bg-primary"><a class="navbar-brand" href="#">Spring on Tomcat</a></nav><div class="container"><div class="page-header"><h1>Spring on Tomcat</h1></div><div class="row"><div class="col"><ul class="list-group"><li class="list-group-item" th:each="p : ${persons}">[[${p.firstName}]] [[${p.lastName}]], Date Of Birth: [[${#dates.format(p.dateOfBirth, 'dd/MMM/yyyy')}]]Place: [[${p.placeOfBirth}]]</li></ul></div></div></div><script src="https://bootswatch.com/_vendor/jquery/dist/jquery.min.js"></script><script src="https://bootswatch.com/_vendor/popper.js/dist/umd/popper.min.js"></script><script src="https://bootswatch.com/_vendor/bootstrap/dist/js/bootstrap.min.js"></script></body>
</html>

结论

在本文中,我们研究了如何在不使用web.xml情况下(不使用Spring Boot)配置一个基于Spring MVC的简单应用程序,并将其部署到Tomcat。 我们还配置了Thymeleaf来呈现我们的UI模板。 完整的代码可以在这里找到

翻译自: https://www.javacodegeeks.com/2017/11/deploy-spring-application-without-web-xml-tomcat.html

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

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

相关文章

Python和Java结合的项目实战_[项目实战] Python高级教程项目实战篇 Python和Java结合的项目实战 视频教程 [...

资源介绍课程简介:xa0xa0Python高级教程项目实战篇 Python和Java结合的项目实战 视频教程 教学视频----------------------课程目录Python项目实战篇[初级项目&#xff1a;图片社交电商导购漂流瓶]项目实现功能&#xff1a; 用户注册&#xff0c;登录&#xff0c;登出图片的多种…

设计模式 建造者模式_设计模式:建造者

设计模式 建造者模式有时需要在应用程序中创建一个复杂的对象。 一种解决方案是Factory模式&#xff0c;另一种是Builder设计模式。 在某些情况下&#xff0c;您甚至可以结合使用这两种模式。 但是在本文中&#xff0c;我想研究一下Builder设计模式 。 我需要说的第一件事是创造…

在MongoDB和Spring Batch中将XML转换为JSON和原始使用

总览 为什么将XML转换为JSON以在MongoDB中原始使用&#xff1f; 由于MongoDB使用JSON文档存储记录&#xff0c;就像表和行将记录存储在关系数据库中一样&#xff0c;我们自然需要将XML转换为JSON。 某些应用程序可能需要存储原始&#xff08;未修改的&#xff09;JSON&#xf…

java 垃圾回收手动回收_Java垃圾回收(1)

java 垃圾回收手动回收这是有关垃圾收集&#xff08;GC&#xff09;的系列文章中的第一篇。 我希望能够涵盖整个系列过程中的理论知识以及热点虚拟机中的所有主要收集器。 这篇文章仅说明什么是垃圾回收以及不同回收器共有的元素。 我为什么要在乎&#xff1f; 您的Java虚拟机…

使用Apache Isis快速进行SEMAT应用程序开发

TL; DR这篇文章谈论我使用Apache Isis创建并部署到此处的OpenShift Online的SEMAT宠物项目&#xff1a; http&#xff1a; //semat.ofbizian.com Apache Isis 作为主要在后端系统上工作的Java开发人员&#xff0c;我讨厌创建用户界面和处理Java脚本。 幸运的是&#xff0c;有J…

java 对象锁定_少锁定Java对象池

java 对象锁定自从我写任何东西以来已经有一段时间了&#xff0c;我一直在忙于我的新工作&#xff0c;其中涉及在性能调优方面做一些有趣的工作。 挑战之一是减少应用程序关键部分的对象创建。 尽管Java随着时间的推移已改进了GC算法&#xff0c;但垃圾回收打ic一直是Java的主…

Oracle JDBC中的PreparedStatement占位符过多

使用Oracle数据库时&#xff0c;导致ORA-01745&#xff08;“无效的主机/绑定变量名称错误”&#xff09;错误的原因有多种。 关于错误ORA-01500到ORA-02098的Oracle 9i文档提供了有关ORA-01745的更多详细信息。 它指出&#xff0c;“原因”是“绑定变量或INTO规范中的冒号后跟…

webview加载php文件,HYWebview下载自定义文件教程

车机版 HYWebview升级到1.3了多增加了一个进度条多增加了自定义下载URL功能使用教程。浏览器打开DNS地址&#xff1a;103.44.248.95可见 底部有一个 下载链接 和 提货密码 可以输入&#xff01;比如 我们去应用宝官网复制下载链接出来&#xff1a;https://download.sj.qq.com/u…

设计模式 原型模式_设计模式:原型

设计模式 原型模式创新设计模式之一是原型设计模式 。 尽管原型是创造模式&#xff0c;但它在概念上与其他模式有所区别。 我的意思是原型在某种意义上创造了自己。 我将在下面解释。 原型模式的所有魔力都基于Java Object的clone&#xff08;&#xff09;方法。 因此&#x…

Packt和Java Code Geeks提供的$ 5 Java编程书籍!

您好极客&#xff01; 今天&#xff0c;我们为您带来一些激动人心的消息&#xff01; Java Code Geeks和Packt联手为您提供广泛的书籍库每周折扣。 对于开发人员来说&#xff0c;Java仍然是最强大的选择之一&#xff0c;它是定义企业和移动设备的语言。 本周&#xff0c;我们…

源码时代php中级项目,0526PHP班中级项目评比圆满落幕

为了充分发掘同学们开发项目的成功经验&#xff0c;全面提升学员的综合素质&#xff0c;锻炼学员的解说与问题处理能力&#xff0c;源代码教育(源码时代)重庆校区进行了PHP就业班的中级项目评比。项目评比分为演讲、质询、点评及投票评分几个环节&#xff0c;每个环节都精彩纷呈…

qt linux 添加库文件路径,linux下qt使用第三方库的那些事

开发库查看工具&#xff1a;$sudo apt-get install pkg-config很多时候我们并不知道自己电脑有没有这个库&#xff0c;所以我们可以使用这个工具来查看自己有哪些工具&#xff0c;或者哪些工具没有。同时&#xff0c;qmake是对这个工具配置支持的&#xff0c;所以我们很多时候很…

xp系统上安装linux系统教程,XP系统如何安装fedora linux双系统?WinXP安装fedora linux双系统的方法...

有位朋友因为想在linux中熟悉下hadoop的配置开发环境&#xff0c;所以就开始于WinXP系统中安装fedora linux双系统&#xff0c;可是操作了很久都没成功。这该如何怎么办呢&#xff1f;接下来&#xff0c;小编就给大家介绍WinXP安装fedora linux双系统的具体方法。1.下载Fedora-…

pae扩展内存 linux,Linux内核-内存管理-PAE(物理地址扩展)

Intel 通过在处理器上把管脚数从 32 增加到 36&#xff0c;以提高处理器的寻址能力&#xff0c;使其达到 2^3664GB&#xff0c;然而线性地址的位数仍然是 32 位&#xff0c;为此&#xff0c;需引入一种新的分页机制。从pentium pro 处理器开始&#xff0c;intel引入一种叫做 PA…

java嵌入式db_Java DB嵌入式模式

java嵌入式dbJava DB是基于Java编程语言和SQL的关系数据库管理系统。 这是Apache软件基金会的开源Derby项目的Oracle版本。 Java SE 7 SDK中包含Java DB。 Java DB有两个部署选项&#xff1a; Embedded和Network Server 。 这篇文章是关于嵌入式部署或模式的。 1.嵌入式 在嵌…

群晖备份linux分区,数据丢失的后悔药,群晖NAS备份方案详解

“秒速开机”——据说90%的人都是因为这句话而知道的SSD固态硬盘。相比于机械硬盘&#xff0c;SSD固态硬盘开机快、关机快、打开软件快、载入数据快、拷贝快、删除也快——既快乐、又爽快&#xff0c;更是大块人心!然而&#xff0c;SSD固态硬盘已经可以完全取代机械硬盘了吗&am…

tg3269c网卡驱动linux,TP-Link3269C网卡驱动官方版

TG-3269C驱动是一款能够安装于由普联发布的无线网卡驱动&#xff0c;通过此安装驱动我们手机和其他无线设备才能连接上无线网卡并进行上网&#xff0c;同时如果你的网卡经常出现断开和重连、网络不稳定等情况可以通过重新安装驱动&#xff0c;查看是否是硬件的问题&#xff0c;…

使用Spring Security,Thymeleaf和Okta保护Java应用程序的安全

永不再构建身份验证 –喜欢构建用户管理&#xff1f; 使用Okta&#xff0c;您可以在几分钟内为您的应用程序添加社交登录&#xff0c;多因素身份验证和OpenID Connect支持。 立即创建一个免费的开发者帐户。 在构建Java应用程序时&#xff0c;用户管理是至关重要的考虑因素。 …

红旗linux添加usb无线网卡,在Ubuntu 8.10中安装无线网卡RTL8187SE驱动

本人的笔记本是微星的Wind U90&#xff0c;自带的无线网卡是RTL8187SE。这款无线网卡在一般的Linux下是没有驱动的&#xff0c;微星的官方也仅仅提供在OpenSUSE下的驱动。为了在我的Ubuntu下使用这个网卡&#xff0c;只能自己动手了。还好&#xff0c;有了互联网上各位大侠和微…

将Google reCaptcha与Spring Boot应用程序结合使用

介绍 Google的reCaptcha是一个用于防止漫游器向您的公共表单提交数据或访问您的公共数据的库。 在本文中&#xff0c;我们将研究如何将reCaptcha与基于Spring Boot的Web应用程序集成 设置验证码 您应该从管理面板创建API密钥。 您必须创建一个示例应用程序&#xff0c;如下所…