Статьи

EE Servlet 3: Генерация вывода HTML в Servlet

Если вам просто нужно обработать несколько URI запросов в вашем веб-модуле EE, то, возможно, будет проще сгенерировать собственный HTML-ответ в коде сервлета, а не использовать полноценную библиотеку шаблонов. В качестве части моих примеров я опробовал очень простой Java DSL, который генерирует вывод html при написании собственного Serlvet. Код выглядит так:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package zemian.servlet3example.web;
 
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
@WebServlet("/index")
public class IndexServlet extends HtmlWriterServlet {
 
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        HtmlWriter html = createHtmlWriter(req, resp);
        String message = getMessage(req, html);
         
        html.header()
            .h(1, "Welcome to Servlet 3 Example")
            .p("Let's explore Java Servlet 3.x Features.")
            .p(message)
            .ul(
                html.link("Index", "/index"),
                html.link("Hello", "/hello"),
                html.link("Form", "/form"),
                html.link("Sys Props (Password needed)", "/sys-props")
            )
            .footer();
    }
}

Я написал базовый класс HtmlWriterServlet, который предоставляет метод, в котором вы можете получить экземпляр компоновщика HtmlWriter. Преимущество создания HTML-подобного компоновщика состоит в том, что его легче читать и он помогает генерировать правильные теги правильной формы. Например, «ul» и «table» принимают объект Java List или Map и генерируют правильные HTML-теги.

Вот еще один пример того, как я генерирую табличное представление страницы свойств системы Java с несколькими строками кода:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
package zemian.servlet3example.web;
 
import java.io.IOException;
import java.util.TreeMap;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
@WebServlet("/sys-props")
public class SysPropsServlet extends HtmlWriterServlet {
 
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        HtmlWriter html = createHtmlWriter(req, resp);
        TreeMap sysProps = new TreeMap(System.getProperties());
        html.header()
            .h(1, "Java System Properties")
            .table(sysProps)
            .footer();
    }
}

Простой класс HtmlWriter предоставляет несколько методов построения HTML и может помочь генерировать HTML-ссылки с относительными контекстными путями. Вы можете легко улучшить его, чтобы помочь генерировать больше HTML-кода, такого как теги форм и т. Д.

Также обратите внимание, что объект ServletResponse позволяет полностью контролировать написание пользовательских ответов, поэтому вы не ограничены только возвратом HTML. Вы можете записать двоичный вывод, такой как PDF или даже файлы MP3. Вам просто нужно контролировать Response Writer и правильный соответствующий тип и размер mime контента, который будет возвращаться.

Ссылка: EE Serlvet 3: Генерация вывода HTML в Servlet от нашего партнера JCG Земьяна Дена в блоге A Programmer’s Journal .