介绍

由于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相关推荐

  1. 将Spring Boot应用程序部署到Tomcat中

    "我喜欢编写身份验证和授权代码." 〜从来没有Java开发人员. 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证. 部署应用 ...

  2. java servlet 部署到tomcat_如何把spring boot项目部署到tomcat容器中

    把spring-boot项目按照平常的web项目一样发布到tomcat容器下 一.修改打包形式 在pom.xml里设置 war 二.移除嵌入式tomcat插件 在pom.xml里找到spring-bo ...

  3. 多个Spring Boot项目部署在一个Tomcat容器无法启动

    Tomxin7 Simple, Interesting | 简单,有趣 本文将花费您五分钟时间 业务介绍 最近用Spring Boot开发了一个翻译的小项目,但是服务器上还跑着其他项目,包括一个同样用 ...

  4. IDEA 开发一个简单的 web service 项目,并打包部署到 Tomcat

    文章目录 实现的效果 一.创建 web service 项目 二.测试类运行 web service 服务端 三.IDEA 打包 web service 项目 四.web service 项目部署到 ...

  5. web.xml初始化spring容器

    初始化spring容器

  6. python程序部署到tomcat服务器_全面解读python web 程序的9种部署方式

    源地址:http://www.linuxde.net/2013/03/13097.html 全面解读python web 程序的9种部署方式 web server ---->applicatio ...

  7. spring boot程序_Spring Boot –现代Java应用程序的基础

    spring boot程序 Spring Boot是Spring.io中一个相对较新的项目. 其目的是简化创建新的基于Spring Framework的项目,并通过应用一些约定来统一其配置. 这种关于 ...

  8. 03)java spi应用 java spring web项目 去除web.xml

    上一节 学习完了 原始 java web项目 无web.xml怎么配置servlet 这节学习 java web项目 无web.xml怎么集成spring框架 使用过web.xml集成spring框架 ...

  9. Spring web.xml详解

    web.xml文件是Java Web项目中的一个配置文件,主要用于配置欢迎页.Filter.Listener.Servlet等,但并不是必须的,一个Java Web项目没有web.xml文件也是照样能 ...

最新文章

  1. 一步步学习SPD2010--第十章节--SP网站品牌化(9)--理解SP的CSS继承
  2. Appfuse:记录操作日志
  3. java--面向对象(4)--黑马程序员
  4. ASP.NET MVC4 微信公众号开发之网页授权(一):搭建基础环境
  5. java几种多线程_Java多线程实现的几种方式
  6. android spp传输速度,Android蓝牙SPP连接似乎在几秒后就已经死了
  7. bzoj4850 [JSOI2016]灯塔
  8. sql serevr中脚本导出
  9. 全向移动机器人参数校准对比及流程分析
  10. Julia : 关于类型的匹配和规范建议
  11. python时间格式转换format_【参考】Python日期时间转换与格式化
  12. HTML简单的网页代码编写
  13. 如何基于Debian部署UBNT Unifi控制器?
  14. 公钥加密数字签名证书的原理总结
  15. ASP.NET免费发送邮件|
  16. 问题 A: Beer Barrels
  17. 玩转Redis-8种数据淘汰策略及近似LRU、LFU原理
  18. 12个超好用的配色网站
  19. 计算机桌面用什么实木板好,实木桌面用什么保护
  20. Cesium空间数据的加载

热门文章

  1. 2、oracle数据库的用户和权限
  2. 深入分析事务的隔离级别
  3. Hibernate之映射
  4. git合并分支的策略(赞)
  5. hexo部署在码云出现样式问题
  6. 人脸检测的model类facemodel
  7. React中后台管理系统添加广告分类显示不出来
  8. 2018蓝桥杯省赛---java---C---3(字母阵列)
  9. 开发环境 Minio 添加桶的操作流程-页面操作
  10. oracle中闪回和回滚,oracle闪回操作详解