SpringBoot2.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
 

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

三 修改代码

增加转换配置

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;

@Controller
public 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方式部署吗”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!


文章标题:SpringBoot2.x支持jsp使用jar方式部署吗
网站路径:http://scyanting.com/article/pecpce.html