WebBox Klassenbibliothek
ulrich
2017-12-28 2ef1bbe443b09bbc8f5ceac7c90f4514746d8892
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...
2 files modified
1 files added
98 ■■■■■ changed files
src/de/uhilger/wbx/web/GenericResponseWrapper.java 6 ●●●●● patch | view | raw | blame | history
src/de/uhilger/wbx/web/MarkdownFilter.java 91 ●●●●● patch | view | raw | blame | history
src/de/uhilger/wbx/web/MyGenericFilter.java 1 ●●●● patch | view | raw | blame | history
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) { 
src/de/uhilger/wbx/web/MarkdownFilter.java
New file
@@ -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() {
    // ..
  }
}
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);
  }