From 2ef1bbe443b09bbc8f5ceac7c90f4514746d8892 Mon Sep 17 00:00:00 2001 From: ulrich <not disclosed> Date: Thu, 28 Dec 2017 18:18:28 +0000 Subject: [PATCH] Filter fuer Markdown funbktioniert. Aber drei verschiedene Markdown-Libraries geben allesamt keine vollstaendige HTML-Seite aus. Hier muss noch herausgefunden werden, woran das liegen kann. Vielleicht ein Encoding-Problem. Oder ein unvollstaendiger Stream... --- src/de/uhilger/wbx/web/GenericResponseWrapper.java | 6 ++- src/de/uhilger/wbx/web/MyGenericFilter.java | 1 src/de/uhilger/wbx/web/MarkdownFilter.java | 91 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 96 insertions(+), 2 deletions(-) diff --git a/src/de/uhilger/wbx/web/GenericResponseWrapper.java b/src/de/uhilger/wbx/web/GenericResponseWrapper.java index 99f6503..1ccf9ea 100644 --- a/src/de/uhilger/wbx/web/GenericResponseWrapper.java +++ b/src/de/uhilger/wbx/web/GenericResponseWrapper.java @@ -42,11 +42,13 @@ } public ServletOutputStream getOutputStream() { - return new FilterServletOutputStream(output); + FilterServletOutputStream f = new FilterServletOutputStream(output); + return f; } public PrintWriter getWriter() { - return new PrintWriter(getOutputStream(),true); + PrintWriter pw = new PrintWriter(getOutputStream(),true); + return pw; } public void setContentLength(int length) { diff --git a/src/de/uhilger/wbx/web/MarkdownFilter.java b/src/de/uhilger/wbx/web/MarkdownFilter.java new file mode 100644 index 0000000..390b771 --- /dev/null +++ b/src/de/uhilger/wbx/web/MarkdownFilter.java @@ -0,0 +1,91 @@ +/* + WebBox - Dein Server. + Copyright (C) 2017 Ulrich Hilger, http://uhilger.de + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package de.uhilger.wbx.web; + +import com.github.rjeschke.txtmark.Processor; +import java.io.IOException; +import java.io.OutputStream; +import java.util.logging.Logger; +import javax.servlet.FilterChain; +import javax.servlet.FilterConfig; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import org.markdown4j.Markdown4jProcessor; + + +/** + * Ein Filter zur Verwandlung von Markdown-Text in HTML + * + * @author ulrich + */ +public class MarkdownFilter implements javax.servlet.Filter { + + private static final Logger logger = Logger.getLogger(MarkdownFilter.class.getName()); + private static final String EXT_MD = ".md"; + public FilterConfig filterConfig; + + @Override + public void doFilter(final ServletRequest request, + final ServletResponse response, + FilterChain chain) + throws IOException, ServletException { + response.setCharacterEncoding("UTF-8"); + HttpServletRequest hr = (HttpServletRequest) request; + String servletPath = hr.getServletPath(); + if(servletPath.toLowerCase().endsWith(EXT_MD)) { + OutputStream out = response.getOutputStream(); + //out.write(new String("<HR>PRE<HR>").getBytes()); + GenericResponseWrapper wrapper + = new GenericResponseWrapper((HttpServletResponse) response); + wrapper.setCharacterEncoding("UTF-8"); + //wrapper.setContentLength(100000); + chain.doFilter(request, wrapper); + + String responseContent = new String(wrapper.getData(), "UTF-8"); + + String html = new Markdown4jProcessor().process(responseContent); + //String result = Processor.process(responseContent); + + out.write(html.getBytes()); + //out.write(new String("<HR>POST<HR>").getBytes()); + out.close(); + } else { + chain.doFilter(request, response); + } + /* + logger.info("requestURL: " + hr.getRequestURL().toString()); + logger.info("ContextPath: " + hr.getContextPath()); + logger.info("ServletPath: " + hr.getServletPath()); + logger.info("PathInfo: " + hr.getPathInfo()); + */ + } + + @Override + public void init(FilterConfig filterConfig) throws ServletException { + this.filterConfig = filterConfig; + } + + @Override + public void destroy() { + // .. + } + +} diff --git a/src/de/uhilger/wbx/web/MyGenericFilter.java b/src/de/uhilger/wbx/web/MyGenericFilter.java index 34b2c1e..6948819 100644 --- a/src/de/uhilger/wbx/web/MyGenericFilter.java +++ b/src/de/uhilger/wbx/web/MyGenericFilter.java @@ -35,6 +35,7 @@ final ServletResponse response, FilterChain chain) throws java.io.IOException, javax.servlet.ServletException { + response.setCharacterEncoding("UTF-8"); chain.doFilter(request,response); } -- Gitblit v1.9.3