You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Liferay 6.1.1中读取Markdown文本并在JSP渲染的标签库需求

解决方案:Liferay 6.1.1中Markdown转HTML展示

推荐的Markdown解析库

可选用以下两款成熟的Java解析库实现Markdown到HTML的转换:

  • CommonMark Java:轻量且兼容标准Markdown语法,适合基础格式转换场景。
  • Pegdown:支持扩展Markdown语法(如表格、脚注等),适合需要解析复杂格式的场景。

集成步骤

1. 引入库依赖

将对应库的jar包放入项目WEB-INF/lib目录:

  • CommonMark:下载兼容Java 1.6+的commonmark-0.20.0.jar
  • Pegdown:下载pegdown-1.6.0.jar及依赖的parboiled-java-1.1.7.jar、parboiled-core-1.1.7.jar

2. 修改LoginUtil.java,实现Markdown转HTML

在将内容存入session前,完成格式转换:

CommonMark实现示例:

import org.commonmark.node.Node;
import org.commonmark.parser.Parser;
import org.commonmark.renderer.html.HtmlRenderer;

// ... 原有代码 ...
String filePath = PropsUtil.get("TextFilePath");

try {
    String content = readTextFile(filePath);
    String htmlContent;
    if (Validator.isNull(content)) {
        _log.info("Empty text file");
        htmlContent = "No text to show";
    } else {
        // Markdown转HTML
        Parser parser = Parser.builder().build();
        Node document = parser.parse(content);
        HtmlRenderer renderer = HtmlRenderer.builder().build();
        htmlContent = renderer.render(document);
    }
    session.setAttribute("Content", htmlContent);
} catch (Exception e) {
    session.setAttribute("Content", e.getMessage());
    _log.info("File Path either not exist or incorrect file path");
}

Pegdown实现示例:

import org.pegdown.PegDownProcessor;

// ... 原有代码 ...
String filePath = PropsUtil.get("TextFilePath");

try {
    String content = readTextFile(filePath);
    String htmlContent;
    if (Validator.isNull(content)) {
        _log.info("Empty text file");
        htmlContent = "No text to show";
    } else {
        // Markdown转HTML,支持扩展语法
        PegDownProcessor processor = new PegDownProcessor();
        htmlContent = processor.markdownToHtml(content);
    }
    session.setAttribute("Content", htmlContent);
} catch (Exception e) {
    session.setAttribute("Content", e.getMessage());
    _log.info("File Path either not exist or incorrect file path");
}

3. 修改terms_of_use.jsp,安全展示HTML内容

转换后的内容为HTML格式,建议用JSTL标签输出(避免XSS风险,若文件内容可控则无需担心):

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<%
String content = (String) request.getSession().getAttribute("Content");
%>

<div>
    <c:out value="${content}" escapeXml="false" />
</div>

注:若Markdown文件包含不可信内容,需额外添加XSS过滤逻辑。

内容的提问来源于stack exchange,提问作者user18781702

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 11:45:29