New file |
| | |
| | | /* |
| | | WebBox - Dein Server. |
| | | Copyright (C) 2020 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 java.io.BufferedReader; |
| | | import java.io.File; |
| | | import java.io.FileInputStream; |
| | | import java.io.IOException; |
| | | import java.io.InputStreamReader; |
| | | import java.io.PrintWriter; |
| | | import javax.servlet.ServletException; |
| | | import javax.servlet.http.HttpServlet; |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.util.Map; |
| | | |
| | | import static org.asciidoctor.AttributesBuilder.attributes; |
| | | import static org.asciidoctor.OptionsBuilder.options; |
| | | import static org.asciidoctor.Asciidoctor.Factory.create; |
| | | import org.asciidoctor.Asciidoctor; |
| | | |
| | | |
| | | |
| | | /** |
| | | * Das AdocServlet wandelt AsciiDoc-Inhalte (*.adoc) |
| | | * zu HTML-Seiten |
| | | * |
| | | */ |
| | | public class AdocServlet extends HttpServlet { |
| | | |
| | | private static final String DOT = "."; |
| | | private static final String HTMLEXT = ".html"; |
| | | |
| | | /** |
| | | * Processes requests for both HTTP <code>GET</code> and <code>POST</code> |
| | | * methods. |
| | | * |
| | | * @param request servlet request |
| | | * @param response servlet response |
| | | * @throws ServletException if a servlet-specific error occurs |
| | | * @throws IOException if an I/O error occurs |
| | | */ |
| | | protected void processRequest(HttpServletRequest request, HttpServletResponse response) |
| | | throws ServletException, IOException |
| | | { |
| | | response.setContentType("text/html;charset=UTF-8"); |
| | | try (PrintWriter out = response.getWriter()) { |
| | | |
| | | // Asciidoc-Quelldatei aus HTTP-Request ermitteln |
| | | String vPath = request.getServletPath(); |
| | | String absname = getServletContext().getRealPath(vPath); |
| | | File adocfile = new File(absname); |
| | | |
| | | // HTML-Datei ermitteln |
| | | String nameext = adocfile.getName(); |
| | | String fname = nameext.substring(0, nameext.lastIndexOf(DOT)); |
| | | File htmlfile = new File(adocfile.getParentFile(), fname + HTMLEXT); |
| | | |
| | | /* |
| | | transformieren, wenn die Quelle sich geandert hat oder |
| | | die HTML-Datei noch nicht existiert |
| | | */ |
| | | if(!htmlfile.exists() || adocfile.lastModified() > htmlfile.lastModified()) { |
| | | transform(absname); |
| | | } |
| | | |
| | | FileInputStream in = new FileInputStream(htmlfile); |
| | | BufferedReader reader = new BufferedReader(new InputStreamReader(in)); |
| | | String line; |
| | | while ((line = reader.readLine()) != null) { |
| | | out.println(line); |
| | | } |
| | | } |
| | | } |
| | | |
| | | private void transform(String absoluteFileName) { |
| | | Asciidoctor asciidoctor = create(); |
| | | Map<String, Object> attributes = attributes() |
| | | .noFooter(false) |
| | | //.tableOfContents(true) |
| | | //.sectionNumbers(true) |
| | | .asMap(); |
| | | Map<String, Object> options = options().inPlace(false) |
| | | .attributes(attributes) |
| | | .asMap(); |
| | | asciidoctor.convertFile(new File(absoluteFileName), options); |
| | | } |
| | | |
| | | private void test(HttpServletRequest request, HttpServletResponse response) |
| | | throws IOException |
| | | { |
| | | response.setContentType("text/html;charset=UTF-8"); |
| | | try (PrintWriter out = response.getWriter()) { |
| | | /* TODO output your page here. You may use following sample code. */ |
| | | out.println("<!DOCTYPE html>"); |
| | | out.println("<html>"); |
| | | out.println("<head>"); |
| | | out.println("<title>Servlet AdocServlet</title>"); |
| | | out.println("</head>"); |
| | | out.println("<body>"); |
| | | out.println("<h1>Servlet AdocServlet at " + request.getContextPath() + "</h1>"); |
| | | |
| | | out.println("<p>request.getRequestURI(): " + request.getRequestURI() + "</p>"); |
| | | out.println("<p>request.getRequestURL(): " + request.getRequestURL() + "</p>"); |
| | | out.println("<p>request.getServletPath(): " + request.getServletPath() + "</p>"); |
| | | out.println("<p>request.getPathInfo(): " + request.getPathInfo() + "</p>"); |
| | | |
| | | String vPath = request.getServletPath(); |
| | | out.println("<p>vPath: " + vPath); |
| | | out.println("<p>getServletContext().getRealPath(vPath): " + |
| | | getServletContext().getRealPath(vPath) + "</p>"); |
| | | |
| | | out.println("</body>"); |
| | | out.println("</html>"); |
| | | } |
| | | |
| | | } |
| | | |
| | | // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code."> |
| | | /** |
| | | * Handles the HTTP <code>GET</code> method. |
| | | * |
| | | * @param request servlet request |
| | | * @param response servlet response |
| | | * @throws ServletException if a servlet-specific error occurs |
| | | * @throws IOException if an I/O error occurs |
| | | */ |
| | | @Override |
| | | protected void doGet(HttpServletRequest request, HttpServletResponse response) |
| | | throws ServletException, IOException { |
| | | processRequest(request, response); |
| | | } |
| | | |
| | | /** |
| | | * Handles the HTTP <code>POST</code> method. |
| | | * |
| | | * @param request servlet request |
| | | * @param response servlet response |
| | | * @throws ServletException if a servlet-specific error occurs |
| | | * @throws IOException if an I/O error occurs |
| | | */ |
| | | @Override |
| | | protected void doPost(HttpServletRequest request, HttpServletResponse response) |
| | | throws ServletException, IOException { |
| | | processRequest(request, response); |
| | | } |
| | | |
| | | /** |
| | | * Returns a short description of the servlet. |
| | | * |
| | | * @return a String containing servlet description |
| | | */ |
| | | @Override |
| | | public String getServletInfo() { |
| | | return "AdocServlet"; |
| | | }// </editor-fold> |
| | | |
| | | } |