文档章节

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

超龍
 超龍
发布于 2017/09/07 10:47
字数 580
阅读 12
收藏 1

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();
}
}
}
}

 

© 著作权归作者所有

共有 人打赏支持
超龍
粉丝 1
博文 30
码字总数 8618
作品 0
朝阳
私信 提问
哎。 求个职

本人在武汉,希望就在本市找份事做。 简历如下。 姓名: 刘某 年龄: 27 相关工作经验: 2年 联系电话: 18827070934 熟悉的框架,以及使用过的工具: 熟悉 java servlet api, jdbc api, sql,...

Motenai
2017/07/30
5.6K
59
你喷或者不喷,简历就在那里

大神们喷吧! 工作经验一年半。目前在公司担任两个项目的负责人。一个crm,一个web services的客户端项目服务端是C++.个人认为工作能力还可以。属于实用型的,也不说技术有多好,至少开发中遇...

18号
2013/09/18
654
4
DbUtils的改进版DbUtils-Pro1.7.0发布

DbUtils-Pro是一个DbUtils的改进版,它支持多种SQL风格并改进事务管理。主要特点有: 改进DbUtils的异常处理,将SQLException转化为运行时导常抛出,无需再手工捕获异常,这点类似于Spring的...

yong9981
2017/08/31
0
0
Apache Commons DbUtils 1.5 发布

DbUtils 可是难得更新一次啊,刚发布的 1.5 版本改进记录包括: Bug [DBUTILS-73] - .BasicRowProcessor.CaseInsensitiveHashMap uses default Locale for toLowerCase [DBUTILS-77] - "dro......

oschina
2012/07/22
4.3K
15
Apache Commons DbUtils 1.6 发布

Apache Commons DbUtils 1.6 发布,主要改进内容包括: ArrayHandler should return an empty array when handle has no rows Fixes DBUTILS-110. Order of columns not retained in BasicR......

oschina
2014/07/22
6.9K
15

没有更多内容

加载失败,请刷新页面

加载更多

[LintCode] Serialize and Deserialize Binary Tree(二叉树的序列化和反序列化)

描述 设计一个算法,并编写代码来序列化和反序列化二叉树。将树写入一个文件被称为“序列化”,读取文件后重建同样的二叉树被称为“反序列化”。 如何反序列化或序列化二叉树是没有限制的,你...

honeymose
56分钟前
5
0
java框架学习日志-7(静态代理和JDK代理)

静态代理 我们平时去餐厅吃饭,不是直接告诉厨师做什么菜的,而是先告诉服务员点什么菜,然后由服务员传到给厨师,相当于服务员是厨师的代理,我们通过代理让厨师炒菜,这就是代理模式。代理...

白话
今天
23
0
Flink Window

1.Flink窗口 Window Assigner分配器。 窗口可以是时间驱动的(Time Window,例如:每30秒钟),也可以是数据驱动的(Count Window,例如:每一百个元素)。 一种经典的窗口分类可以分成: 翻...

满小茂
今天
18
0
my.ini

1

architect刘源源
今天
16
0
docker dns

There is a opensource application that solves this issue, it's called DNS Proxy Server It's a DNS server that solves containers hostnames, if could not found a hostname that mat......

kut
今天
16
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部