Servlet3.0 + Freemarker + Dbutils零配置整合

Spring框架越来越臃肿,Servlet3.0很强大了,@WebServlet注解基本可以替代Spring MVC的功能,至于数据库事务我们可以手动实现,所以我们开发web可以放弃Spring框架了。

Servlet3.0 + Freemarker + Dbutils这种轻量级的组合才是我们喜欢的。

废话少说,先上代码。配置一个Freemarker的控制器,用以解析html页面。这里控制器为TemplateController.java 文件:

import freemarker.ext.servlet.FreemarkerServlet;
import freemarker.template.Configuration;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;

/**
* Freemarker模板配置
*
* @author yongchao
*/
@WebServlet(urlPatterns = { "*.html" }, // 需要定义Freemarker解析的页面后缀类型
asyncSupported = false, loadOnStartup = 0, name = "templateController", displayName = "TemplateController", initParams = {
@WebInitParam(name = "TemplatePath", value = "/"),
@WebInitParam(name = "NoCache", value = "true"),// 定义是否缓存
@WebInitParam(name = "ContentType", value = "text/html; charset=UTF-8"),// 定义内容类型
@WebInitParam(name = "template_update_delay", value = "0"), // 开发环境中可设置为0
@WebInitParam(name = "default_encoding", value = "UTF-8"),
@WebInitParam(name = "number_format", value = "0.##########") })
public class TemplateController extends FreemarkerServlet {
private static final long serialVersionUID = 8714019900490761087L;
}

Servlet代码没有发生什么变化,只是这次转向了html文件:

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

@WebServlet("/test1")
public class TemplateTest1Action extends HttpServlet {
private static final long serialVersionUID = 6576879808909808L;

protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException {
String id = "1";
String title = "使用freemarker";
String content = "这是测试";
request.setAttribute("article", new Article(id, title, content));
request.getRequestDispatcher("/WEB-INF/pages/template1.html").forward(
request, response);
}
}

接下来写个模板文件(template1.html)测试一下:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>${article.title}</title>
</head>
<body>
${article.id}
${article.content}
</body>
</html>

记得把 freemarker的jar和Dbutils的jar文件扔进WEB-INF/lib 目录下。

下面是使用Ubutils写的数据库事务Junit测试方法,所用数据库为MySql:

import org.apache.commons.dbutils.QueryRunner;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import cn.yunte.utils.db.JDBCUtils;
import java.sql.Connection;
import java.sql.SQLException;

public class TestTransaction {
protected Logger logger = LoggerFactory.getLogger(getClass());

@Test
public void test(String[] args) throws SQLException {
boolean originalAutoCommitSetting = true;
Connection connection = null;
try {
connection = JDBCUtils.getDataSource().getConnection();
/**
* 在创建QueryRunner对象时,不传递数据源给它,是为了保证这两条SQL在同一个事务中进行,
* 我们手动获取数据库连接,然后让这两条SQL使用同一个数据库连接执行
*/
QueryRunner runner = new QueryRunner();
originalAutoCommitSetting = connection.getAutoCommit();
// 开启事务
connection.setAutoCommit(false);
String sql = "insert into test_table(field1, field2, field3) values(?, ?, ?)";
Object[] paramArr1 = { "test1", "test1", 1 };
Object[] paramArr2 = { "test2", "test2", 2 };
runner.update(connection, sql, paramArr1);
// 模拟程序出现异常让事务回滚
int x = 1 / 0;
runner.update(connection, sql, paramArr2);
connection.commit();
} catch (Exception e) {
if (null != connection) {
// 出现异常之后就回滚事务
connection.rollback();
}
e.printStackTrace();
} finally {
// 关闭数据库连接
if (null != connection) {
connection.setAutoCommit(originalAutoCommitSetting);
connection.close();
}
}
}
}

 

转载于:https://my.oschina.net/yunte/blog/1531118

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值