springboot整合JSP以及發布項目到獨立的tomcat中與打成jar包使用


  之前研究了springboot整合freemarker與thymeleaf的使用。也研究了springboot發布到獨立的tomcat的使用以及使用自帶的tomcat打成jar包的使用,下面研究集成JSP之后的使用。

  建議還是使用官方提倡的thymeleaf模板。而且thymeleaf與html很好的集成,便於前后端人員開發。

1.集成JSP

pom.xml添加JSP相關依賴:

        <!-- 使用jsp引擎,springboot內置tomcat沒有此依賴 -->
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <scope>provided</scope>
        </dependency>
        <!-- 添加servlet依賴模塊 -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <scope>provided</scope>
        </dependency>
        <!-- 添加jstl標簽庫依賴模塊 -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
        </dependency>

 

application.properties文件中配置相關信息:

############################################################
#
# JSP 配置
#
############################################################
spring.mvc.view.suffix=.jsp
spring.mvc.view.prefix=/WEB-INF/jsp/

注意:如果項目中集成了thymeleaf,需要關掉thymeleaf,否則會將jsp作為thymleaf解析,如下:

# 關閉緩存, 即時刷新
spring.thymeleaf.cache=false
#關閉thymeleaf引擎
spring.thymeleaf.enabled=false

 

對應的目錄結構:

 

后台Controller測試:

package cn.qlq.action;

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

@RequestMapping("JSP")
@Controller
public class JSPController {
    @RequestMapping("index")
    public String index(ModelMap map) {
        map.addAttribute("name", "testname");
        return "index";
    }
}

訪問測試:

 

2.測試項目發布到獨立的tomcat運行

 如果發布到獨立的tomcat運行的話,與之前的的一樣

(1)繼承SpringBootServletInitializer,重寫configure方法。

package cn.qlq.config;

import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

// 發布到獨立的Tomcat需要繼承SpringBootServletInitializer類並重寫configure方法

@Configuration // 通過該注解來表明該類是一個Spring的配置,相當於一個xml文件
@ComponentScan(basePackages = "cn.qlq") // 配置掃描包
public class SpringConfig extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        // 設置啟動類,用於獨立tomcat運行的入口
        return builder.sources(SpringConfig.class);
    }

}

 

 (2)pom.xml打包的方式改為war包,將對應的jsp和servlet的包依賴改為provided即可。

<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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>cn.qlq</groupId>
    <artifactId>springboot-ssm</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.2.RELEASE</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- 設置Tomcat打包的時候不打包下面配置 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
        <!-- 使用jsp引擎,springboot內置tomcat沒有此依賴 -->
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <scope>provided</scope>
        </dependency>
        <!-- 添加servlet依賴模塊 -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <scope>provided</scope>
        </dependency>
        <!-- 添加jstl標簽庫依賴模塊 -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>

        <!-- spring-boot整合mybatis -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.1.1</version>
        </dependency>
        <!-- mysql驅動 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.6</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>4.3.7.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>5.1.2</version>
        </dependency>

        <!-- 引入 freemarker 模板依賴 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-freemarker</artifactId>
        </dependency>

        <!-- 引入 thymeleaf 模板依賴 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
    </dependencies>

<build> <!-- 配置了很多插件 --> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.5.1</version> <configuration> <source>1.7</source> <target>1.7</target> <encoding>UTF-8</encoding> </configuration> </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>

 (3)執行clean package打包即可

(4)將打的war包拷貝到tomcat的webapps目錄下運行即可

(5)查看tomcat啟動解壓后的目錄結構:(與之前研究的一樣,加了springboot的東西,而且provided依賴的jar包也會打到一個目錄中)

 

 

 

 

3.打成war包運行並以java -jar的方式運行war包

(1) pom.xml打包的方式仍然未war包,將對應的jsp和servlet的包依賴改為compile(默認就是)即可。繼成SpringBootServletInitializer,與上面一樣。這里打包方式仍然是war包的原因是如果打的是jar包不會打WEB-INF目錄,也就是沒有jsp頁面,所以導致訪問報錯。

(2)pom.xml將jsp與servlet與tomcat的包依賴改為默認的compile

<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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>cn.qlq</groupId>
    <artifactId>springboot-ssm</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.2.RELEASE</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- 設置Tomcat打包的時候不打包下面配置 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <!-- <scope>provided</scope> -->
        </dependency>
        <!-- 使用jsp引擎,springboot內置tomcat沒有此依賴 -->
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <!-- <scope>provided</scope> -->
        </dependency>
        <!-- 添加servlet依賴模塊 -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <!-- <scope>provided</scope> -->
        </dependency>
        <!-- 添加jstl標簽庫依賴模塊 -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>

        <!-- spring-boot整合mybatis -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.1.1</version>
        </dependency>
        <!-- mysql驅動 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.6</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>4.3.7.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>5.1.2</version>
        </dependency>

        <!-- 引入 freemarker 模板依賴 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-freemarker</artifactId>
        </dependency>

        <!-- 引入 thymeleaf 模板依賴 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
    </dependencies>

    <distributionManagement>
        <repository>
            <id>releases</id>
            <url>http://192.168.0.133:8081/repository/maven-releases/</url>
        </repository>
        <snapshotRepository>
            <id>snapshots</id>
            <url>http://192.168.0.133:8081/repository/maven-snapshots/</url>
        </snapshotRepository>
    </distributionManagement>

    <build>
        <!-- 配置了很多插件 -->
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.5.1</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

(3)執行clean package打包即可

(4)運行測試:(以jar包的方式運行war包即可)

$ java -jar ./springboot-ssm-0.0.1-SNAPSHOT.war

 dP"Yb  88      dP"Yb
dP   Yb 88     dP   Yb
Yb b dP 88  .o Yb b dP
 `"YoYo 88ood8  `"YoYo

2019-02-20 18:23:27.212  INFO 16632 --- [           main] cn.qlq.MySpringBootApplication           : Starting MySpringBootApplication v0.0.1-SNAPSHOT on MicroWin10-1535 with PID 16632 (C:\Users\Administrator\Desktop\Springboot\springboot-ssm-0.0.1-SNAPSHOT.war started by Administrator in C:\Users\Administrator\Desktop\Springboot)
2019-02-20 18:23:27.218  INFO 16632 --- [           main] cn.qlq.MySpringBootApplication           : No active profile set, falling back to default profiles: default
2019-02-20 18:23:30.006  INFO 16632 --- [           main] o.apache.catalina.core.StandardService   : Starting service Tomcat
2019-02-20 18:23:30.007  INFO 16632 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/8.5.11
2019-02-20 18:23:32.746  INFO 16632 --- [ost-startStop-1] org.apache.jasper.servlet.TldScanner     : At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
2019-02-20 18:23:33.173  INFO 16632 --- [ost-startStop-1] o.a.c.c.C.[.[localhost].[/MySpringboot]  : Initializing Spring embedded WebApplicationContext
2019-02-20 18:23:35.957  INFO 16632 --- [           main] cn.qlq.MySpringBootApplication           : Started MySpringBootApplication in 9.312 seconds (JVM running for 9.909)
2019-02-20 18:23:42.666  INFO 16632 --- [nio-8088-exec-1] o.a.c.c.C.[.[localhost].[/MySpringboot]  : Initializing Spring FrameworkServlet 'dispatcherServlet'
=========enter filter===========

 (5)解壓war包查看目錄:(與上面的目錄一樣,只是沒有provided的jar包所以沒有對應的目錄)

 

 

   也就是發布到獨立的tomcat與獨立運行war包的區別就是是否將JSP以及tomcat依賴的jar包打包出來,如果打的包里面有tomcat以及jsp相關包就可以獨立運行war包,否則依賴tomcat容器。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM