Spring Boot配置外置Tomcat和JSP视图教程(IntelliJ IDEA + Maven)

相信有不少同学跟我一样:

1、相中了Spring Boot强大快捷的配置;

2、项目组及个人的开发习惯选择JSP视图引擎;

3、生产环境基本通过WAR包发布工程(如果使用JSP视图,也只能做成WAR包,Spring Boot内置Tomcat且打成JAR不支持JSP);

4、使用JSP视图,自然,做开发的时候只能使用外置Tomcat了。(如果使用内置Tomcat,就得打JAR包,可JAR包又不支持JSP!)

基于以上几点需求,我们就搭建一个支持外置Tomcat和JSP视图的Spring Boot项目,具体步骤如下。

步骤一:工具及开发环境

1、IntelliJ IDEA(Eclipse类似);

2、构建工具:Maven3(Gradle类似);

3、JDK8

4、Tomcat8

5、Spring Boot 1.5.7.RELEASE

步骤二:搭建Maven WEB工程(如果你熟悉这步,就直接到步骤三)

1、新建工程

2、选择Maven工程,JDK8,通过maven-archetype-webapp创建


3、maven坐标

4、一路next,最后finish

5、finish后,maven就开始帮我们构建工程,直到控制台打印出“BUILD SUCCESS”字样

6、验证Maven是否将工程构建好,如下图所示,打开项目结构对话框,主要验证Artifacts是否生成,

通常都不会生成,如果没生成,不要手工生成,看下一步:(Artifacts就是部署包或者打成部署包包之前的一个目录文件结构)

7、如果Artifacts没生成,打开pom.xml文件,在文件上右键,然后“Maven->Reimport”,

之后再回到项目结构对话框,就能看到Artifacts已经生成了

8、接着,我们按照Maven标准完善一下工程结构,然后在项目结构对话框中配置一下


9、配置tomcat


10、测试Maven web项目


步骤三(重点):集成Spring Boot

1、配置pom.xml文件:其实这个文件中最重要的就是红色标注的地方,

防止外置tomcat和spring boot内置tomcat的jar包冲突。配置好以后,

再在pom.xml文件上右键“Maven->Reimport”一下。

<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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.example.test</groupId>
  <artifactId>helloworld</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>helloworld Maven Webapp</name>
  <url>http://maven.apache.org</url>

  <!-- 继承Spring Boot -->
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.7.RELEASE</version>
    <relativePath/>
  </parent>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
    <druid.version>1.1.3</druid.version>
  </properties>

  <dependencies>
    <!-- Spring Boot web依赖 -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- 运行外部tomcat,打包的时候排除starter-web中依赖的embed tomcat,预防JAR包冲突 -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-tomcat</artifactId>
      <scope>provided</scope>
    </dependency>
    <!-- 运行外部tomcat,打包的时候排除EL表达式依赖,预防JAR包冲突 -->
    <dependency>
      <groupId>org.apache.tomcat.embed</groupId>
      <artifactId>tomcat-embed-el</artifactId>
      <scope>provided</scope>
    </dependency>
    <!-- 运行外部tomcat,打包的时候排除tomcat-jdbc依赖,预防JAR包冲突 -->
    <dependency>
      <groupId>org.apache.tomcat</groupId>
      <artifactId>tomcat-jdbc</artifactId>
      <scope>provided</scope>
    </dependency>
    <!-- 运行外部tomcat,打包的时候排除tomcat-juli依赖,预防JAR包冲突 -->
    <dependency>
      <groupId>org.apache.tomcat</groupId>
      <artifactId>tomcat-juli</artifactId>
      <scope>provided</scope>
    </dependency>
  </dependencies>
  <build>
    <finalName>helloworld</finalName>
    <plugins>
      <!-- spring boot maven打包插件 -->
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>
</project>
2、创建并配置Spring Boot的配置文件,配置JSP视图路径及后缀

3、编写Spring Boot启动类

package com.example.test.helloworld;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;

/**
 * 项目启动入口类,由于是外部tomcat运行项目,所以需要集成SpringBootServletInitializer
 */
@SpringBootApplication
public class Application extends SpringBootServletInitializer {

    /**
     * 外部tomcat运行项目,启动Spring Boot的钩子
     * @param builder
     * @return
     */
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(this.getClass());
    }

    /**
     * Spring Boot本身的Main启动入口
     * @param args
     */
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
3、编写Controller和对应的jsp

package com.example.test.helloworld.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
public class HelloworldController {

    @RequestMapping(value = "/sayHello", method = RequestMethod.GET)
    public String sayHello(Model model) {
        model.addAttribute("name", "Winter");
        return "sayHello";
    }

}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <h2>你好,${name}!</h2>
</body>
</html>
4、启动项目,并访问SyaHello

5、从第4步的结果中,你会发现sayHello.jsp中的EL表达式没有被解释:这主要是由于maven帮我们生成的web.xml的版本是2.3,

2.3默认情况下,jsp中的el表达式会被禁用,2.3以后的版本是默认开启的。如果你依然使用2.3,需要在JSP中做如下设置:

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
不过,我推荐使用Servlet3.1,所以,你的web.xml需要长下面这种样子:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
    <display-name></display-name>

</web-app>
最后再重启项目,刷新一下你的页面:

如果你能在你的机器上看到类似上面那个页面,说明你已经搭建好一个外置tomcat和支持JSP视图的maven spring boot项目。

现在,开始你自己的项目吧,maven中添加jstl依赖等其他依赖。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值