Freemaker整合servlet

今天我们创建一个以servlet为基础的应用,该应用使用Freemarker FTL作为视图,而不是jsp.这会使你看到servlet+freemarker的整合。

这个应用非常简单:
有一个表展示用户信息,比如性和名。
可以添加新用户

在eclipse里建立dynamic web project,然后把freemarker.jar放到lib中。

然后修改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>ISO-8859-1</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>*.ftl</url-pattern>
	</servlet-mapping>



	<servlet>
		<servlet-name>hello_servlet</servlet-name>
		<servlet-class>net.viralpatel.freemarker.HelloServlet</servlet-class>
	</servlet>

	<servlet-mapping>
		<servlet-name>hello_servlet</servlet-name>
		<url-pattern>/hello</url-pattern>
	</servlet-mapping>

	<!--
		Prevent the visiting of MVC Views from outside the servlet container.
		RequestDispatcher.forward/include should and will still work. Removing
		this may open security holes!
	-->
	<security-constraint>
		<web-resource-collection>
			<web-resource-name>FreeMarker MVC Views</web-resource-name>
			<url-pattern>*.ftl</url-pattern>
		</web-resource-collection>
		<auth-constraint>
			<!-- Nobody is allowed to visit these -->
		</auth-constraint>
	</security-constraint>
首先,我们放置了这样一个条目:freemarker.ext.servlet.FreemarkerServlet.我们把所有对*.ftl的访问映射到了这个servlet,这样,所有以.ftl结尾的请求
都会被FreemarkerServlet处理  

除此之外,我们还添加了一些参数,这些参数的意义都是不言自明的。可以看一下注释   

FTL模板文件.ftl放在了webapp文件夹中,为了放置随意访问这些文件,我们在web.xml中加了安全限制。

package net.viralpatel.freemarker;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloServlet extends HttpServlet {
	
	private static final long serialVersionUID = 1L;
	
	private static List<User> userList = new ArrayList<User>();
	
	static {
		userList.add(new User("Bill", "Gates"));
		userList.add(new User("Steve", "Jobs"));
		userList.add(new User("Larry", "Page"));
		userList.add(new User("Sergey", "Brin"));
		userList.add(new User("Larry", "Ellison"));
	}
	
	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		request.setAttribute("users", userList);
		request.getRequestDispatcher("/index.ftl").forward(request, response);

	}
	
	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		
		String firstname = request.getParameter("firstname");
		String lastname = request.getParameter("lastname");
		
		if(null != firstname && null != lastname
				&& !firstname.isEmpty() && !lastname.isEmpty()) {
			
			synchronized (userList) {
				userList.add(new User(firstname, lastname));
			}
			
		}
		
		doGet(request, response);
	}
}
index.ftl

<table class="datatable">
  	<tr>
  		<th>Firstname</th>  <th>Lastname</th>
  	</tr>
    <#list users as user>
  	<tr>
  		<td>${user.firstname}</td> <td>${user.lastname}</td>
  	</tr>
    </#list>
  </table>
原文: http://viralpatel.net/blogs/freemarker-servlet-tutorial-example/

源代码:http://pan.baidu.com/share/link?shareid=2294825673&uk=3878681452



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值