聶永的博客

          記錄工作/學習的點點滴滴。

          很輕的,Servlet + Freemarker 組合體,沒有那么硬~

          老調重彈。對SSH經典組合有些膩,不再那么輕,重返到若干年前的原始。

          Servlet的輕巧高效,Freemarker的強大簡便,兩者結合將是超輕的組合,即可避免丑陋的Java代碼和HTML代碼雜揉,又可高效基于模板的站點開發。

          閑話少說,項目需要:

          freemarker-2.3.13.jar

          servlet.jar

          定義兩個Servlet:

          HelloAction.java 對應 /hello,借助Freemarker硬編碼輸出

          public class HelloAction extends HttpServlet {
              private static final long serialVersionUID = -6082007726831320176L;

              private Configuration configuration;
              public void init() throws ServletException {
                  configuration = new Configuration();
                  configuration.setServletContextForTemplateLoading(getServletContext(), "WEB-INF/pages");
                  configuration.setEncoding(Locale.CHINA, "UTF-8");
              }

              @SuppressWarnings("unchecked")
              public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                  // 填充數據類型
                  Map map = new HashMap();
                  map.put("userName", "小敏");   
                  Template template = configuration.getTemplate("hello.html");
                  response.setContentType("text/html; charset=" + template.getEncoding());
                  Writer out = response.getWriter();
                  try{
                      template.process(map, out);
                  }catch (TemplateException e) {
                      e.printStackTrace();
                  }
              }

              public void destroy() {
                  super.destroy();
                  if(configuration != null){
                      configuration = null;
                  }
              }
          }

          對應模板:

          <html>
          <head>
          <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
          <title>使用Freemarker渲染2</title>
          </head>
          <body>
          你好, ${userName!} !
          </body>
          </html>

           

          HiAction.java 對應 /hi ,借助Freemrker Servlet的攔截功能,如以往寫代碼方式,感覺不到Freemarker的存在。

          public class HiAction extends HttpServlet {
              private static final long serialVersionUID = 518767483952153077L;

              public void doGet(HttpServletRequest request, HttpServletResponse response)
                      throws ServletException, IOException {

                  request.setAttribute("thename", "小敏");
                  request.getRequestDispatcher("/WEB-INF/pages/hi.html").forward(request, response);
              }
          }

          對應的模板:

          <html>
          <head>
          <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
          <title>使用Freemarker渲染</title>
          </head>
          <body>
          hi ${thename!}~<br />
          </body>
          </html>

          但需要在web.xml 配置文件中定義如下:

          <servlet>
              <servlet-name>freemarker</servlet-name>
              <servlet-class>
                  freemarker.ext.servlet.FreemarkerServlet
              </servlet-class>

              <!-- FreemarkerServlet settings: -->
              <init-param>
                  <param-name>TemplatePath</param-name>
                  <param-value>/</param-value>
              </init-param>
              <init-param>
                  <param-name>NoCache</param-name>
                  <param-value>true</param-value>
              </init-param>
              <init-param>
                  <param-name>ContentType</param-name>
                  <param-value>text/html; charset=UTF-8</param-value>
                  <!-- Forces UTF-8 output encoding! -->
              </init-param>

              <!-- FreeMarker settings: -->
              <init-param>
                  <param-name>template_update_delay</param-name>
                  <param-value>0</param-value><!-- 0 is for development only! Use higher value otherwise. -->
              </init-param>
              <init-param>
                  <param-name>default_encoding</param-name>
                  <param-value>UTF-8</param-value><!-- The encoding of the template files. -->
              </init-param>
              <init-param>
                  <param-name>number_format</param-name>
                  <param-value>0.##########</param-value>
              </init-param>

              <load-on-startup>1</load-on-startup>
          </servlet>

          <servlet-mapping>
              <servlet-name>freemarker</servlet-name>
              <url-pattern>*.html</url-pattern>
          </servlet-mapping>

          使用哪一種組合方式,看您喜好了。

          借助于Freemarker自身的Servlet工具,只是用于攔截Servlet中forward轉向使用到的HTML資源文件。

          很簡陋,但湊合著能看。

          項目源代碼已經打包如下:

          下載源文件

          posted on 2009-11-10 16:52 nieyong 閱讀(1358) 評論(1)  編輯  收藏 所屬分類: Servlet3

          評論

          # re: 很輕的,Servlet + Freemarker 組合體,沒有那么硬~[未登錄] 2009-11-11 15:58 咖啡妝

          效率是提高了 但是沒有jsp那樣好的設計頁面 除非提取出業務部分  回復  更多評論   

          公告

          所有文章皆為原創,若轉載請標明出處,謝謝~

          新浪微博,歡迎關注:

          導航

          <2009年11月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          統計

          常用鏈接

          留言簿(58)

          隨筆分類(130)

          隨筆檔案(151)

          個人收藏

          最新隨筆

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 施秉县| 孟津县| 通海县| 邹平县| 江北区| 治县。| 定州市| 黄陵县| 大余县| 红原县| 班戈县| 广南县| 城步| 安徽省| 通海县| 天等县| 南阳市| 合水县| 德昌县| 白玉县| 烟台市| 潍坊市| 辽阳市| 建水县| 临湘市| 屯留县| 贡嘎县| 汝州市| 西藏| 荆门市| 肥东县| 昭觉县| 响水县| 麟游县| 新巴尔虎右旗| 都兰县| 五寨县| 永丰县| 黄石市| 共和县| 江孜县|