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專案可以配置資源處理:
2) main()方法裡面拷貝資源到外部檔案<!-- 打包時將jsp檔案拷貝到META-INF目錄下 --> <resource> <directory>src/main/webapp</directory> <targetPath>META-INF/resources</targetPath> <includes> <include>**/**</include> </includes> </resource>
拷貝的方法,利用 spring 的 resource 神器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); }
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