web.xml配置详解_如何将不带web.xml的Spring应用程序部署到Tomcat

web.xml配置详解

web.xml配置详解

介绍

由于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 {

  @Bean
  public DataSource dataSource() {
    return new EmbeddedDatabaseBuilder()
      .generateUniqueName(false)
      .setName("testdb")
      .setType(EmbeddedDatabaseType.H2)
      .addDefaultScripts()
      .setScriptEncoding("UTF-8")
      .ignoreFailedDrops(true)
      .build();
  }

  @Bean
  public 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;

  @GetMapping
  public 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 {

  @Bean
  public ClassLoaderTemplateResolver templateResolver() {
    ClassLoaderTemplateResolver templateResolver = 
      new ClassLoaderTemplateResolver();
    templateResolver.setPrefix("templates/");
    templateResolver.setSuffix(".html");
    templateResolver.setTemplateMode(TemplateMode.HTML);
    templateResolver.setCacheable(false);
    return templateResolver;
  }

  @Bean
  public SpringTemplateEngine templateEngine() {
    SpringTemplateEngine templateEngine = 
      new SpringTemplateEngine();
    templateEngine.setTemplateResolver(templateResolver());
    templateEngine.addDialect(new LayoutDialect());
    return templateEngine;
  }

  @Bean
  public ViewResolver viewResolver() {
    ThymeleafViewResolver viewResolver = 
      new ThymeleafViewResolver();
    viewResolver.setTemplateEngine(templateEngine());
    viewResolver.setCharacterEncoding("UTF-8");
    return viewResolver;
  }

}

创建视图控制器

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

@Controller
@RequestMapping("/")
public class ViewController {

  @Autowired PersonDAO personDao;

  @GetMapping
  public 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配置详解

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值