在Servlet代碼中輸出HTML響應
如果你的企業級WEB應用中只是需要對大量的請求URI進行處理的話,那么在Servlet代碼里面直接生成HTML響應貌似要更簡單一些,而不必使用一套完整成熟的模板庫。在下面的例子中,我在Servlet代碼里用了一個非常簡單的Java DSL來生成HTML的輸出。代碼如下:
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系統屬性的表格視圖頁:
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(); } }
這個簡單的HtmlWriter提供了一些html的生成器方法,它可以根據上下文的相對路徑來生成HTML鏈接。你還可以完善下它,以便能生成更多的HTML代碼,比方說表單等。
還有一點需要注意的是,ServletResponse對象讓你能夠自由地定制輸出的響應結果,因此你不一定要返回HTML。你還可以生成二進制的輸出流,譬如PDF甚至MP3什么的。你只需控制好響應的寫入器以及內容的MIME類型及大小就好了。
上述代碼可以從這里獲取到。
原創文章轉載請注明出處:在Servlet代碼中輸出HTML響應
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!