Java如何获取项⽬中的Html⽂件内容
前⾔
在单页⾯应⽤(SPA,Single Page Application)开发中,点击不同的菜单,通常需要动态获取其对应的Html页⾯代码,返回给前端,再将这⼀整块append到主框架页⾯的某个指定div中。所以,Java如何获取Html代码呢?
开发环境中
如在Eclipse中开发⼀个基于SpringBoot的SPA,每次右键-Run As/Debug As主类来运⾏项⽬,那如何到某指定页⾯的html⽂件呢?如下:
/**
* 获取对应pageName的html内容(本地eclipse⾥直接run)
*/
private String getHtmlByPageName(String pageName) {
URL url = Class().getClassLoader().getResource("templates/" + pageName + ".html");
LOGGER.info("pageName : {} - {}", pageName, url);
// File f = new File("E:\\code_svn\\srp_trunk\\target\\classes\\templates\\404.html");
StringBuffer sb = new StringBuffer();
BufferedInputStream bis = null;
try {
File f = new URI());
FileInputStream fis = new FileInputStream(f);
bis = new BufferedInputStream(fis);
int len = 0;
byte[] temp = new byte[1024];
while ((len = ad(temp)) != -1) {
sb.append(new String(temp, 0, len));
}
LOGGER.debug("page content:\n{}...", sb.toString().substring(0, 200));
} catch (Exception e) {
<("Error occurred, cause by: ", e);
} finally {
if (bis != null) {
try {
bis.close();
} catch (IOException e) {
<("Error occurred, cause by: ", e);
}
}
}
String();
}
⽣产环境中
在⽣产环境中,不同于开发环境,我们经常需要java -jar来运⾏⽬标jar包,那在SpringBoot打出来的jar包中,如何到某指定页⾯的html⽂件呢?如下:
/**
* 获取对应pageName的html内容(⽣产环境java -jar直接run)
*/
private String getHtmlByPageName2(String pageName) throws IOException {
// /BOOT-INF/classes/templates/dashboard.html
String path = "/BOOT-INF/classes/templates/" + pageName + ".html";
// 返回读取指定资源的输⼊流
InputStream is = Class().getResourceAsStream(path);
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String s = "";
StringBuffer sb = new StringBuffer();
while ((s = br.readLine()) != null) {
sb.append(s).append("\n");
}java修改html文件
String();
}
注意每次readLine后都别忘了append换⾏符,否则会导致html中的<script>元素⾥的JavaScript,将从第⼀处双斜杠注释的地⽅往后,都作为注释内容的⼀部分(因为整个html都是长长⼀整⾏),最终很神奇地发现为何某些JavaScript代码没运⾏。
所以,我们需要在代码中,判断当前程序所处的环境是开发环境还是⽣产环境,以进⼊不同的获取页⾯代码的逻辑。
SpringBoot多环境配置
⼀般可放置多个application-{profile}.properties⽂件,并在application.properties中设置⼀默认环境,如下:
spring.profiles.active=test
要想改变运⾏环境,可修改上述配置为dev或其他,亦可通过命令⾏参数的⽅式设置,如下:
java -jar xxx.jar --spring.profiles.active=dev
判断SpringBoot运⾏环境
import java.util.Locale;
import org.springframework.beans.BeansException;
import t.ApplicationContext;
import t.ApplicationContextAware;
import org.springframework.stereotype.Component;
@Component
public class SpringContextUtil implements ApplicationContextAware {
private static ApplicationContext context = null;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
}
// 传⼊线程中
public static <T> T getBean(String beanName) {
return (T) Bean(beanName);
}
// 国际化使⽤
public static String getMessage(String key) {
Message(key, null, Default());
}
/// 获取当前环境
public static String getActiveProfile() {
Environment().getActiveProfiles()[0];
}
}
因此,对于Java根据SpringBoot运⾏环境的不同,⽽⾛不同的getHtmlByPageName逻辑,如下:String profile = ActiveProfile();
if ("dev".equals(profile)) {
return getHtmlByPageName(pageName);
} else {
return getHtmlByPageName2(pageName);
}
以上。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论