1. 程式人生 > >SpringBoot JSP 支援

SpringBoot JSP 支援

      SpringBoot 目標是簡化開發和部署,web方面則使用嵌入式web容器來替代依賴外部容器的部署方式。

      在JavaWeb 領域,現在有了多種頁面渲染技術可選,如velocity,freemarker等。並且還有絕對的前後端分離思想的影響,多年過去了,JSP技術的應用雖然有所下降,但仍然廣泛。許多遺留系統還是JSP開發的。JSP的支援還是tomcat做的比較好,其他如jetty啥的要麼不支援jsp要麼Springboot沒支援他們,SpringBoot對內嵌web容器的支援預設也是用tomcat。但tomcat對web資源的處理上寫死了要使用檔案目錄,對於打包成jar包的SpringBoot應用來說,顯然不行,也有的人打包成war,然後還是部署到tomcat上,這樣我認為違反了SpringBoot的初衷,這樣一來,等於否定了嵌入式容器,而且程式設計師還要處理嵌入式環境和外部tomcat環境的不同帶來的問題。

 本文目地是為使用jar包部署帶有jsp的SpringBoot應用提供一個解決方案。

思路也很簡單,就是把資源打包進jar,然後main方法裡面執行應用之前把資源拷貝到外部檔案。

1) 把web資源目錄打包進jar

  其實就是放在classpath目錄, 如果是普通java應用,可以放在src目錄。如果是maven專案可以配置資源處理:

<!-- 打包時將jsp檔案拷貝到META-INF目錄下 -->
            <resource>
                <directory>src/main/webapp</directory>
                <targetPath>META-INF/resources</targetPath>
                <includes>
                    <include>**/**</include>
                </includes>
            </resource>
2) main()方法裡面拷貝資源到外部檔案
public static void main(String[] args) {
		// 為了讓SpringBoot支援jsp,在jar包環境下需要把jsp解壓到src/main/webapp/目錄下
		boolean override = "true".equals(System.getProperty("cleanOnstart", "true"));
                Class<?> bootClass = MyApplication.class;// main()方法所在的類
               copyResourceIfInJar(bootClass,"META-INF/resources","src/main/webapp",override);
		SpringApplication.run(bootClass, args);
	}
拷貝的方法,利用 spring 的 resource 神器
private static void copyResourceIfInJar(Class<?> clazz, String resPreffix, String targetDir, boolean override) {
		String cls = clazz.getSimpleName() + ".class";
		URL url = clazz.getResource(cls);
		if (url == null) {
			System.err.println("不可思議的可能.");
			return;
		}
		if ("file".equals(url.getProtocol())) {
			// 本地開發環境,忽略
			System.out.println("ignore when local dev.");
			return;
		}
		File webRootFile = new File(targetDir);
		if (webRootFile.exists()) {
			File oldFolder;
			if (!webRootFile.isDirectory()) {
				webRootFile.delete();
				webRootFile.mkdir();
			} else if (override && webRootFile.renameTo(oldFolder = new File(targetDir + "-" + UUID.randomUUID()))) {
				webRootFile.mkdirs();
				oldFolder.deleteOnExit();
			} else if (!override) {
				System.out.println("lazy return when not override.");
				return;
			}
		} else {
			webRootFile.mkdirs();
		}
		// 目錄準備完畢,開始解壓和複製
		PathMatchingResourcePatternResolver searcher = new PathMatchingResourcePatternResolver(clazz.getClassLoader());
		try {
			Resource[] webResources = searcher.getResources(resPreffix + (resPreffix.endsWith("/") ? "**" : "/**"));
			if (webResources != null && webResources.length > 0) {
				for (Resource resource : webResources) {
					String desc = resource.getDescription();
					String uri = desc.substring(desc.indexOf(resPreffix) + resPreffix.length(), desc.lastIndexOf(']'));
					File tar = new File(targetDir, uri);
					if (uri.endsWith("/")) {
						tar.mkdirs();
						continue;
					}
					if (!tar.getParentFile().exists()) {
						tar.getParentFile().mkdirs();
					}
					FileCopyUtils.copy(resource.getInputStream(), new FileOutputStream(tar));
				}
			} else {
				System.err.println("Resource Not Found in path:" + resPreffix);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}


相關推薦

SpringBoot JSP 支援

      SpringBoot 目標是簡化開發和部署,web方面則使用嵌入式web容器來替代依賴外部容器的部署方式。       在JavaWeb 領域,現在有了多種頁面渲染技術可選,如velocity,freemarker等。並且還有絕對的前後端分離思想的影響,多年過

springboot jsp支援以及轉發配置

一、jsp支援 springboot 預設是不支援jsp的; 1.pom.xml中新增依賴 三個依賴:servlet,jstl,jasper <!-- 1.servlet依賴--> <dependency> <g

springboot 同時支援jsp 和freemaker

pom.xml <!-- springboot web開發相關jar包的引入 -->         <dependency>         &n

Springboot專案新增jsp支援部署到tomcat

Springboot專案新增jsp支援部署到tomcat tomcat版本 :9.0.13 1.修改pom.xml,新增以下依賴  修改以下依賴   2.修改application.yml ,新增一下配置  3.在專案的src下新建以

SpringBoot實現支援jsp

pom檔案  <dependencies> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jas

9、SpringBoot 新增JSP支援

SpringBoot 新增JSP支援 專案結構 在pom.xml檔案新增依賴 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"

SpringBoot專案支援JSP模板

spring-boot-starter-web包含了spring-boot-starter-tomcat,這個包裡有tomcat-embed-core、tomcat-embed-el,前者包含servlet-api和內建servlet容器,後者為el表示式包。如果不指定s

springboot開發支援JSP,併發布為war包執行

<!--springboot tomcat jsp 支援開啟--> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId&g

SpringBoot新增jsp支援

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

idea啟動springboot+jsp項目出現404

分享 最好的 lips 步驟 -s work scope alt 自己 場景:用IntelliJ IDEA 啟動 springBoot項目訪問出現404,很皮,因為我用eclipse開發時都是正常的,找了很久,什麽加註釋掉<scope>provided</

SpringBoot_web開發-使用外部Servlet容器&JSP支援

        還沒有web.xml,生                          

neo4j圖形資料庫第六彈——整合springboot支援新增節點關係)

正經學徒,佛系記錄,不搞事情 基於上文:https://blog.csdn.net/qq_31748587/article/details/84392092 的專案 這裡舉例四種常用的新增方法: 建立單個節點 建立多個節點 根據已有節點建立關係 同時

neo4j圖形資料庫第五彈——整合springboot支援查詢屬性)

正經學徒,佛系記錄,不搞事情 基於上文:https://blog.csdn.net/qq_31748587/article/details/84308573 的專案 可以獲取節點的屬性值  或者統計返回的具體值 工具類方法相對更簡單些 工具類&

neo4j圖形資料庫第四彈——整合springboot支援查詢路徑)

正經學徒,佛系記錄,不搞事情 基於上文:https://blog.csdn.net/qq_31748587/article/details/84286411 的專案 普通的neo4j查詢路徑的cql語法如下: match l=(m)-[]-(n) return l

neo4j圖形資料庫第三彈——整合springboot支援查詢多節點)

正經學徒,佛系記錄,不搞事情 官網結合java的使用方式:https://neo4j.com/developer/java/ 這裡使用springboot 第一步:引入pom <dependency> <groupId>org.neo4j.driv

Spring Boot 初級入門教程(九) —— 新增 JSP 支援

大多數 WEB 開發,都還是用的 JSP 頁面,所以如何讓 SpringBoot 專案支援 JSP,這篇簡單說一下。 一、需要引入依賴的 jar 包。 檢視 pom.xml 檔案中是否引入下面的 jar 包,如果沒有引用,則需要引用才行。 <!-- 該依賴包提供了MVC、A

Spring Boot 初體驗(11)新增JSP支援

第一步:配置 application.properties ######################################################## ### JSP的支援 ############################################

SpringBoot配置支援HTTPS

讓自己的網站支援HTTPS 獲取證書 用Java自帶的keytools工具生成證書 keytool -genkey -alias tomcat -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12

IDEA 基於Maven的springboot+jsp搭建web專案完整流程

話不多說直接上乾貨(本文章適合新手快速上手)。 一丶新建maven spring boot 專案 next 下一步 選擇 web 建立完的目錄如下,新建一個webapp資料夾然後建一個pages包用來放jsp檔案 配置pox.xml <

springboot webapi 支援跨域 CORS

1.建立corsConfig 配置檔案 @Configuration public class corsConfig { @Autowired varModel varModel_; @Bean public WebMvcConfigurer corsConf