如何将不带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
如何将不带web.xml的Spring应用程序部署到Tomcat相关推荐
- 将Spring Boot应用程序部署到Tomcat中
"我喜欢编写身份验证和授权代码." 〜从来没有Java开发人员. 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证. 部署应用 ...
- java servlet 部署到tomcat_如何把spring boot项目部署到tomcat容器中
把spring-boot项目按照平常的web项目一样发布到tomcat容器下 一.修改打包形式 在pom.xml里设置 war 二.移除嵌入式tomcat插件 在pom.xml里找到spring-bo ...
- 多个Spring Boot项目部署在一个Tomcat容器无法启动
Tomxin7 Simple, Interesting | 简单,有趣 本文将花费您五分钟时间 业务介绍 最近用Spring Boot开发了一个翻译的小项目,但是服务器上还跑着其他项目,包括一个同样用 ...
- IDEA 开发一个简单的 web service 项目,并打包部署到 Tomcat
文章目录 实现的效果 一.创建 web service 项目 二.测试类运行 web service 服务端 三.IDEA 打包 web service 项目 四.web service 项目部署到 ...
- web.xml初始化spring容器
初始化spring容器
- python程序部署到tomcat服务器_全面解读python web 程序的9种部署方式
源地址:http://www.linuxde.net/2013/03/13097.html 全面解读python web 程序的9种部署方式 web server ---->applicatio ...
- spring boot程序_Spring Boot –现代Java应用程序的基础
spring boot程序 Spring Boot是Spring.io中一个相对较新的项目. 其目的是简化创建新的基于Spring Framework的项目,并通过应用一些约定来统一其配置. 这种关于 ...
- 03)java spi应用 java spring web项目 去除web.xml
上一节 学习完了 原始 java web项目 无web.xml怎么配置servlet 这节学习 java web项目 无web.xml怎么集成spring框架 使用过web.xml集成spring框架 ...
- Spring web.xml详解
web.xml文件是Java Web项目中的一个配置文件,主要用于配置欢迎页.Filter.Listener.Servlet等,但并不是必须的,一个Java Web项目没有web.xml文件也是照样能 ...
最新文章
- 一步步学习SPD2010--第十章节--SP网站品牌化(9)--理解SP的CSS继承
- Appfuse:记录操作日志
- java--面向对象(4)--黑马程序员
- ASP.NET MVC4 微信公众号开发之网页授权(一):搭建基础环境
- java几种多线程_Java多线程实现的几种方式
- android spp传输速度,Android蓝牙SPP连接似乎在几秒后就已经死了
- bzoj4850 [JSOI2016]灯塔
- sql serevr中脚本导出
- 全向移动机器人参数校准对比及流程分析
- Julia : 关于类型的匹配和规范建议
- python时间格式转换format_【参考】Python日期时间转换与格式化
- HTML简单的网页代码编写
- 如何基于Debian部署UBNT Unifi控制器?
- 公钥加密数字签名证书的原理总结
- ASP.NET免费发送邮件|
- 问题 A: Beer Barrels
- 玩转Redis-8种数据淘汰策略及近似LRU、LFU原理
- 12个超好用的配色网站
- 计算机桌面用什么实木板好,实木桌面用什么保护
- Cesium空间数据的加载