JSP页面如何静态化
Posted 自学编程吧
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JSP页面如何静态化相关的知识,希望对你有一定的参考价值。
页面静态化的好处是
缓存网页,提高访问速度
更容易让搜索引擎收录
ajax技术加载的网页,搜索引擎是不会收录的,还有URL里面#后面的都会去掉,因为会视为同一个页面的不同位置。
thymeleaf这个开源项目可以满足,这个单词的意思竟然是胸腺嘧啶,不知道老外怎么想的。thymeleaf是一个前端框架,它可以完成jsp的事情,也是通过标签,但是我觉得它不怎么方便,不过为了静态化就硬着头皮用了。
首先我们需要一个模板:
这是一个html文件,首先要注意,如果你的项目不是maven的(这年头还有人不用maven的?有,我就是一个),那么这个模板文件,应该放在src源文件夹下,编译后确保它(或者包含它的文件夹)在classes文件夹下。
然后这个html文件的html标签,要换成:
<html xmlns:th="http://www.thymeleaf.org">
循环的用法:
<li th:each="chapter : ${chapters}" th:id="'li_'+${chapter.code}">
条件的用法:
<ul th:if="${chapter.code==code or chapter.code==parentCode}">
文本替换,生成html代码后,测试两个字就被th:text部分的chapter.name替换掉了。还支持字符串拼接
<a th:href="${courseId}+'_'+${chapter.code}+'.html'"
th:text="${chapter.name}">测试</a>
它其实就是一种标签,使用的时候,遵循它的标准来,这是完整的文档:
https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html
现在看看后台java怎么写的,也就是上面的chapters这些数据
List<Chapter> fristClassChapters = chapterDao.queryFirstClassChapter(i);
//取得章节
List<Chapter> chapters = chapterDao.queryAllChapter(i);
for (Chapter chapter : chapters) {
String pageName = new StringBuilder().append(i).append("_").append(chapter.getCode()).append(".html")
.toString();
//准备写入模板的
ClassLoaderTemplateResolver resolver = new ClassLoaderTemplateResolver();
//模板所在的目录
resolver.setPrefix("/htmls/");
//模板的后缀
resolver.setSuffix(".html");
TemplateEngine templateEngine = new TemplateEngine();
templateEngine.setTemplateResolver(resolver);
Context context = new Context();
//下面都是设置页面的数据,也就是html模板里面的 ${}
context.setVariable("code", chapter.getCode());
context.setVariable("parentCode", chapter.getParentCode());
context.setVariable("chapters", fristClassChapters);
context.setVariable("upchapters1", upchapters1);
context.setVariable("upchapters2", upchapters2);
context.setVariable("content", chapter.getContent());
context.setVariable("title",
ChapterHelper.getChapterName(chapter.getCode()) + " " + chapter.getName());
context.setVariable("courseId", i);
try {
//pageName是要生成的模板文件的名字
FileWriter writer = new FileWriter(filePath + pageName);// "/Users/zebra/test.html"
//最后写入文件,study是模板文件,综合起来就是study.html放在htmls的文件夹下,这个文件夹在src源代码目录
templateEngine.process("study", context, writer);
} catch (IOException e) {
e.printStackTrace();
}
}
然后定时运行这段代码,就可以定时生成HTML文件啦!
以上是关于JSP页面如何静态化的主要内容,如果未能解决你的问题,请参考以下文章
大数据学习总结记录—页面静态化技术(Freemarker/velocity)& 网站伪静态(UrlRewriteFilter)