千家信息网

SpringBoot 2.x支持jsp使用jar方式部署吗

发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,这篇文章主要介绍"SpringBoot 2.x支持jsp使用jar方式部署吗",在日常操作中,相信很多人在SpringBoot 2.x支持jsp使用jar方式部署吗问题上存在疑惑,小编查阅了各式资料,
千家信息网最后更新 2025年02月01日SpringBoot 2.x支持jsp使用jar方式部署吗

这篇文章主要介绍"SpringBoot 2.x支持jsp使用jar方式部署吗",在日常操作中,相信很多人在SpringBoot 2.x支持jsp使用jar方式部署吗问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"SpringBoot 2.x支持jsp使用jar方式部署吗"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

一 pom.xml文件修改

1 增加tomcat jsp 依赖

                            javax.servlet            javax.servlet-api            provided                                                   javax.servlet.jsp                   javax.servlet.jsp-api                   2.3.1                                            javax.servlet            jstl                                    org.springframework.boot            spring-boot-starter-tomcat            provided                                                   org.apache.tomcat.embed                    tomcat-embed-jasper                    9.0.27                    provided                

2 修改资源打包配置

                                                           src/main/webapp                    META-INF/resources                                            **/**                                                                        src/main/resources                                            **/**                                                            

二 项目目录

增加目录 src/main/webapp,目录中可加入jsp相关文件

application.properties中加入

spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp

#支持jsp debugger

server.servlet.jsp.init-parameters.development=true

三 修改代码

增加转换配置

StaticResourceConfigurer.java

package com.vipkid.configuration;import java.io.File;import java.net.MalformedURLException;import java.net.URL;import org.apache.catalina.Context;import org.apache.catalina.Lifecycle;import org.apache.catalina.LifecycleEvent;import org.apache.catalina.LifecycleListener;import org.apache.catalina.WebResourceRoot.ResourceSetType;import org.springframework.util.ResourceUtils;/** * 资源路径转换配置 * Add main class fat jar/exploded directory into tomcat ResourceSet. *  * @author zouqinghua * @date 2019年10月30日  下午9:44:34 * */public class StaticResourceConfigurer implements LifecycleListener {        private final Context context;        StaticResourceConfigurer(Context context) {                this.context = context;        }        @Override        public void lifecycleEvent(LifecycleEvent event) {                if (event.getType().equals(Lifecycle.CONFIGURE_START_EVENT)) {                        URL location = this.getClass().getProtectionDomain().getCodeSource().getLocation();                        if (ResourceUtils.isFileURL(location)) {                                // when run as exploded directory                                String rootFile = location.getFile();                                if (rootFile.endsWith("/BOOT-INF/classes/")) {                                        rootFile = rootFile.substring(0, rootFile.length() - "/BOOT-INF/classes/".length() + 1);                                }                                if (!new File(rootFile, "META-INF" + File.separator + "resources").isDirectory()) {                                        return;                                }                                try {                                        location = new File(rootFile).toURI().toURL();                                } catch (MalformedURLException e) {                                        throw new IllegalStateException("Can not add tomcat resources", e);                                }                        }                        String locationStr = location.toString();                        if (locationStr.endsWith("/BOOT-INF/classes!/")) {                                // when run as fat jar                                locationStr = locationStr.substring(0, locationStr.length() - "/BOOT-INF/classes!/".length() + 1);                                try {                                        location = new URL(locationStr);                                } catch (MalformedURLException e) {                                        throw new IllegalStateException("Can not add tomcat resources", e);                                }                        }                        this.context.getResources().createWebResourceSet(ResourceSetType.RESOURCE_JAR, "/", location,                                        "/META-INF/resources");                }        }}

增加监听类 TomcatConfiguration.jsp

package com.vipkid.configuration;import org.apache.catalina.Context;import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;import org.springframework.boot.web.embedded.tomcat.ConfigurableTomcatWebServerFactory;import org.springframework.boot.web.embedded.tomcat.TomcatContextCustomizer;import org.springframework.boot.web.server.WebServerFactory;import org.springframework.boot.web.server.WebServerFactoryCustomizer;import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.core.Ordered;import org.springframework.core.annotation.Order;/** * 配置 addLifecycleListener * @author zouqinghua * @date 2019年10月30日  下午9:45:28 * */@Order(Ordered.HIGHEST_PRECEDENCE)@Configuration@ConditionalOnProperty(name = "tomcat.staticResourceCustomizer.enabled", matchIfMissing = true)public class TomcatConfiguration {        /*         *          * SpringBoot 1.x方式配置          @return        @Bean        public EmbeddedServletContainerCustomizer staticResourceCustomizer() {                return new EmbeddedServletContainerCustomizer() {                        @Override                        public void customize(ConfigurableEmbeddedServletContainer container) {                                if (container instanceof TomcatEmbeddedServletContainerFactory) {                                        ((TomcatEmbeddedServletContainerFactory) container)                                                        .addContextCustomizers(new TomcatContextCustomizer() {                                                                @Override                                                                public void customize(Context context) {                                                                        context.addLifecycleListener(new StaticResourceConfigurer(context));                                                                }                                                        });                                }                        }                };        }        */                /**         * SpringBoot 2.x方式配置         * @return         */        @Bean        public WebServerFactoryCustomizer webServerFactoryCustomizerBean(){                                return new WebServerFactoryCustomizer() {                        @Override                        public void customize(ConfigurableTomcatWebServerFactory factory) {                                factory.addContextCustomizers(new TomcatContextCustomizer() {                                                                @Override                                                                public void customize(Context context) {                                                                        context.addLifecycleListener(new StaticResourceConfigurer(context));                                                                }                                                        });                        }                                        };                                                                        }}

四 代码

IndexController和

src/main/webapp/WEB-INF/views/hello.jsp

package com.smc.sys.web;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;@Controllerpublic class IndexController {        @RequestMapping("/hello")    public String index(){                System.out.println("index ==== >>");        return "hello";    }}
<%@ page language="java" contentType="text/html; charset=UTF-8"        pageEncoding="UTF-8"%><%        response.setHeader("Cache-Control", "no-cache");        response.setHeader("Pragma", "no-cache");        response.setHeader("Expires", "0");%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%><%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%><%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%><%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>        

Hello World - ${name}

五 打包 启动

mvn clean package -Dmaven.test.skip=true

java -jar target/xxx.jar

六 访问

http://localhost:8080/hello

到此,关于"SpringBoot 2.x支持jsp使用jar方式部署吗"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

0