jsp 模板引擎。无需 tomcat,只需一个 jar 包直接根据 jsp 源文件渲染得到 html 页面。

背景

说到模板引擎,大家能想到的一般都是 freemarker、thymeleaf 之类的。

而说到 jsp 估计大家会一致的说 jsp 本质就是一个 servlet。的确,jsp 本质确实是 servlet,但是单单从 jsp 来说,它支持各种标签来渲染数据,其他的模板引擎也都有自己的专属标签去渲染数据。所以我觉得 jsp 从某种意义上,可以说是由 servlet 实现的模板引擎,我觉得是没问题的。

但是问题来了,jsp 渲染为 html,必须先转换为 servlet java 代码,然后再编译为 class 字节码,接着再由 jvm 装载运行,最后直接向客户端输出 html。

可见,如果说 jsp 是一款模板引擎,但我们却没办法直接获取它渲染生成的 html。我觉得这是绝对不允许的。

我网上找了很多资料,但大部分都是编写一个包装类,利用 include 方法拦截 html,而且还需要启动 tomcat 服务器,在浏览器中发请求或者模拟请求才可以,甚是麻烦。

因此,我决定,探索 jsp 的奥秘,并试图找到一种方式,直接将 jsp 源文件渲染为 html !

代码示例

其实这个想法很早之前就产生了,但是一直没有付诸行动。

不知道今天那根线搭错了,突然心血来潮的要去研究它,还真让我搞成功了!

先看使用示例:
首先 pom.xml 引用依赖(需要自行下载安装):

        <dependency><groupId>com.kfyty</groupId><artifactId>k-jte</artifactId><version>1.0-SNAPSHOT</version></dependency>

然后在 resources 文件夹下创建 template 文件夹,接着在其中创建 jsp 文件:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE HTML>
<html>
<head><jsp:include page="include/title.jsp"><jsp:param name="title" value="jsp 模板引擎" /></jsp:include>
</head>
<body><h1>${content}</h1><c:forEach begin="1" end="5" step="1" var="index"><span>index: ${index}</span></c:forEach>
</body>
</html>

在 template 文件夹下创建 include 文件夹并创建 title.jsp:

<title>${title}</title>

编写示例代码并运行:

package com.kfyty.demo;import com.kfyty.kjte.JstlRenderEngine;
import com.kfyty.kjte.JstlTemplateEngine;
import com.kfyty.kjte.config.JstlTemplateEngineConfig;import java.util.List;public class Main {public static void main(String[] args) throws Exception {String savePath = "C:\\Users\\fyty\\Desktop";JstlTemplateEngineConfig config = new JstlTemplateEngineConfig(savePath, "/template");// 模板变量config.putVar("title", "test");// 模板引擎JstlTemplateEngine engine = new JstlTemplateEngine(config);// 渲染引擎JstlRenderEngine renderEngine = new JstlRenderEngine(engine, engine.load());renderEngine.doRenderTemplate();}
}

得到的 html 如下:

<!DOCTYPE HTML>
<html>
<head><title>jsp 模板引擎</title>
</head>
<body><h1>test</h1><span>index: 1</span><span>index: 2</span><span>index: 3</span><span>index: 4</span><span>index: 5</span></body>
</html>

好了,终于得到了心心念的结果了。

研究了一天,好累,大家有兴趣了直接去看源码吧。
github 地址:https://github.com/kfyty/k-jte

PS:(目前支持了 jstl 标签,jsp:include、jsp:param 指令)

jsp 模板引擎。无需 tomcat,只需一个 jar 包直接根据 jsp 源文件渲染得到 html 页面相关推荐

  1. Java实现word文档转pdf(无需插件,仅需一个jar包)

    实现功能 docx文档转换为PDF 转换之后排版不混乱 依赖 aspose-words-15.8.0-jdk16.jar包提取路径(用于PDF转换 ) 链接:https://pan.baidu.com ...

  2. deepin efi 启动u盘_如何安装Deepin国产操作系统?只需一个U盘就够了,超简单

    2019年快结束了,距离微软对Win7系统停止服务的日期也是越来越近了.与此同时,人们对国产操作系统的热度和期望值也是越来越高.在诸多国产操作系统中,Deepin系统是目前知名度最高的一个,而且无论在 ...

  3. 华为云计算机访问手机软件,华为云电脑来了,只需一个APP就能让手机秒变Windows电脑...

    你能想象手机变成电脑,手机使用电脑操作系统吗,近日华为就用Mate10实现了这一神奇功能.只需一个APP就能在M10上体验熟悉的Windows操作,实现作做表格写文档等办公功能,就算没带电脑出门,也能 ...

  4. 如何用u盘安装深度linux系统,如何安装Deepin国产操作系统?只需一个U盘就够了,超简单...

    2019年快结束了,距离微软对Win7系统停止服务的日期也是越来越近了.与此同时,人们对国产操作系统的热度和期望值也是越来越高.在诸多国产操作系统中,Deepin系统是目前知名度最高的一个,而且无论在 ...

  5. 只需一个快捷键!!超快速的编辑公式,并实现公式编号自动更新(特别实用建议点赞收藏)

    只需一个快捷键!!超快速的编辑公式,并实现公式编号自动更新(特别实用建议点赞收藏) 直接上干货!!! (您需要通过链接下载word文档才能方便您完成以下步骤,其中带有详细原理讲解) (链接https: ...

  6. 不需要自己录音也能做好短视频配音,只需一个小技巧,get逼真配音

    不需要自己录音也能做好短视频配音,只需一个小技巧,get逼真配音 在做短视频的时候,很多小伙伴都会遇到需要为短视频配音的情况.有的小伙伴天生嗓音条件不错,或者声音比较有特色,于是他们就更愿意自己配音, ...

  7. “我只需一个周末就可以构建出这个应用!”

    ‍‍ 作者 | JOÃO ALVES 译者 | 弯月 出品 | CSDN(ID:CSDNnews) 以下为译文: 每次人们购买新房.新车或新电视时,都会对新买的产品赞不绝口,这时他们与新买的产品还处于 ...

  8. javaul材质包下载_只需一个水桶包 你就能装满时髦

    如果要列一份2015年春夏的it bag清单,水桶包必居其中.从一直断货的Mansur Gavriel到超智能的Ralph Lauren Ricky水桶包,无一不是明星潮人们的挚爱.麂皮.流苏70年代 ...

  9. 【百度地图API】发布静态图API啦!只需一个网址,即可展示定制百度地图!

    [百度地图API]发布静态图API啦!只需一个网址,即可展示定制百度地图! 原文:[百度地图API]发布静态图API啦!只需一个网址,即可展示定制百度地图! 摘要: 百度地图静态图API!您无须执行任 ...

最新文章

  1. Git忽略文件方法【转】
  2. 从追MM谈23种设计模式
  3. key_t IPC键和ftok函数详解和剖析
  4. 史上最全提升GPU的tricks合集
  5. C# 打印机功能打印图表
  6. 校园失物招领小程序 开题报告(基于微信小程序毕业设计题目选题课题)
  7. 整理一个将qq音乐的歌单导入到苹果音乐中的方法
  8. 爱普生R330打印机 win10下 打印照片出现打一半的情况
  9. 什么是“沙箱”技术?
  10. Java操作ffmpeg为视频添加音乐
  11. 为什么“公有云”在中国落地那么难?
  12. FreeSWITCH权威指南 -- 1.PSTN与VoIP基础(笔记)
  13. laraverl框架房源管理
  14. 企业办公模式转型,OA系统进入常态化
  15. Eclipse安装SVN插件及使用详细步骤
  16. 【超图+CESIUM】【基础学习使用】01、前置学习资料
  17. 使用uniapp开发微信小程序的微信支付流程
  18. Abaqus+Ncode振动疲劳分析视频教程
  19. Xilinx Microblaze使用
  20. 高性能MySQL实战第12讲:海量数据MySQL项目实战

热门文章

  1. LinuxC语言 目录操作
  2. Linux操作系统(Centos7)零基础入门,超详细!
  3. Python建模常用代码
  4. 数字电视条件接收系统(原理图)
  5. 安大计算机学院李炜教授,自动化系年度人物候选 | 李炜
  6. php start 五
  7. springboot+vue+elementui实现前后端分离的网上商城购物系统
  8. VC2012下MFC程序各控件的常用方法
  9. 利用云服务器部署论坛网站系统discuz
  10. 激战2电信服务器哪个最多,激战2服务器