文档章节

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
朝阳
修改DbUtils支持表名下划线映射(驼峰模式)

Commons DbUtils很一个很好用JDBC工具类,地球人都知道,就不介绍了,不知道的看这里:http://commons.apache.org/dbutils/ 在进行查询自动类映射的时候domain类的属性必须和数据库中名称一样...

Zero__One
2014/06/23
0
2
DbUtils源码阅读一:初识项目

1 项目介绍 DbUtils是一个关于JDBC操作的类库。官网地址 2 项目结构 org.apache.commons.dbutils: |-AbstractQueryRunner: 抽象类 |-AsyncQueryRunner |-QueryRunner |-QueryLoader |-Proxy......

吴下阿吉
2013/02/23
0
2
Commons DbUtils

1 概述 Commons DBUtils类库是小型的设计于易于使用JDBC的类集合。JDBC资源清理是平凡的,容易出错,以至于这些类从你的代码中抽象出清理代码,剩下你最初真正想要使用JDBC做的代码:查询和更...

Leech
2015/07/21
0
0
day14_DBUtils学习笔记

一、DBUtils介绍 Apache公司开发的框架。   DBUtils是java编程中的数据库操作实用工具,小巧简单实用。   DBUtils封装了对JDBC的操作,简化了JDBC操作。可以少写代码。 commons-dbutils 是...

黑泽明军
05/20
0
0
使用元数据+反射优化CURD操作+DBUtils

元数据的使用 1)想取得对数据库相关信息的描述,可以元数据 2)DatabaseMetaData/DatabaseMetaData dbmd = conn.getMetaData() 3)ParameterMetaData/ParameterMetaData psmd = pstmt.getPara......

chenruibing
2015/06/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

shell-日志脚本小实验

1.查找日志2018-8-15,求得那一分钟访问量最大。 #/bin/bash#from cc#2018-8-15#2018-08-15.log 哪一分钟 访问量 最大for d in `ls /data/nginx/logs/`doif [ -a 2018-08-15...

chencheng-linux
昨天
0
0
Android中的设计模式之状态模式

参考 《设计模式:可复用面向对象软件的基础 》5.8 State 状态 对象行为型模式 《Android源码设计模式解析与实战》第7章 随遇而安--状态模式 意图 允许一个对象在其内部状态改变时改变它的行...

newtrek
昨天
0
0
xshell端 vim没有颜色

说明 使用xshell连接服务器的时候,使用vim打开文档没有颜色 解决方法: 1.在更目录home或者etc下找到vim的配置文件vimrc 2.vim打开它找个坑,添加下面这个东西 set t_Co=256 3.保存退出,就...

杉下
昨天
0
0
spring 资料

spring boot http://www.ityouknow.com/springboot/2016/01/06/spring-boot-quick-start.html

zaolonglei
昨天
2
0
TypeScript基础入门 - 函数 - 简介

转载 TypeScript基础入门 - 函数 - 简介 项目实践仓库 https://github.com/durban89/typescript_demo.gittag: 1.1.6 为了保证后面的学习演示需要安装下ts-node,这样后面的每个操作都能直接...

durban
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部