JavaWeb基础知识总结. (52)

wps8CE8.tmp

BaseServlet 1 BaseServlet的作用

在开始客户管理系统之前,我们先写一个工具类:BaseServlet。

我们知道,写一个项目可能会出现N多个Servlet,而且一般一个Servlet只有一个方法(doGet或doPost),如果项目大一些,那么Servlet的数量就会很惊人。

为了避免Servlet的“膨胀”,我们写一个BaseServlet。它的作用是让一个Servlet可以处理多种不同的请求。不同的请求调用Servlet的不同方法。我们写好了BaseServlet后,让其他Servlet继承BaseServlet,例如CustomerServlet继承BaseServlet,然后在CustomerServlet中提供add()、update()、delete()等方法,每个方法对应不同的请求。

wps8CE9.tmp

2 BaseServlet分析

我们知道,Servlet中处理请求的方法是service()方法,这说明我们需要让service()方法去调用其他方法。例如调用add()、mod()、del()、all()等方法!具体调用哪个方法需要在请求中给出方法名称!然后service()方法通过方法名称来调用指定的方法。

无论是点击超链接,还是提交表单,请求中必须要有method参数,这个参数的值就是要请求的方法名称,这样BaseServlet的service()才能通过方法名称来调用目标方法。例如某个链接如下:

<a href=http://www.likecs.com/”/xxx/CustomerServlet?method=add”>添加客户</a>

wps8CEA.tmp

3 BaseServlet代码

public class BaseServlet extends HttpServlet {

/*

* 它会根据请求中的m,来决定调用本类的哪个方法

*/

protected void service(HttpServletRequest req, HttpServletResponse res)

throws ServletException, IOException {

req.setCharacterEncoding("UTF-8");

res.setContentType("text/html;charset=utf-8");

// 例如::8080/demo1/xxx?m=add

String methodName = req.getParameter("method");// 它是一个方法名称

// 当没用指定要调用的方法时,那么默认请求的是execute()方法。

if(methodName == null || methodName.isEmpty()) {

methodName = "execute";

}

Class c = this.getClass();

try {

// 通过方法名称获取方法的反射对象

Method m = c.getMethod(methodName, HttpServletRequest.class,

HttpServletResponse.class);

// 反射方法目标方法,也就是说,如果methodName为add,那么就调用add方法。

String result = (String) m.invoke(this, req, res);

// 通过返回值完成请求转发

if(result != null && !result.isEmpty()) {

req.getRequestDispatcher(result).forward(req, res);

}

catch (Exception e) {

throw new ServletException(e);

}

}

}

 
DBUtils 1 DBUtils简介

DBUtils是Apache Commons组件中的一员,开源免费!

DBUtils是对JDBC的简单封装,但是它还是被很多公司使用!

DBUtils的Jar包:dbutils.jar

2 DBUtils主要类

l DbUtils:都是静态方法,一系列的close()方法;

l QueryRunner:

Ø update():执行insert、update、delete;

Ø query():执行select语句;

Ø batch():执行批处理。

3 QueryRunner之更新

QueryRunner的update()方法可以用来执行insert、update、delete语句。

1. 创建QueryRunner

构造器:QueryRunner();

2. update()方法

int update(Connection con, String sql, Object… params)

@Test

public void fun1() throws SQLException {

QueryRunner qr = new QueryRunner();

String sql = "insert into user values(?,?,?)";

qr.update(JdbcUtils.getConnection(), sql, "u1", "zhangSan", "123");

}

 

还有另一种方式来使用QueryRunner

1. 创建QueryRunner

构造器:QueryRunner(DataSource)

2. update()方法

int update(String sql, Object… params)

这种方式在创建QueryRunner时传递了连接池对象,那么在调用update()方法时就不用再传递Connection了。

@Test

public void fun2() throws SQLException {

QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());

String sql = "insert into user values(?,?,?)";

qr.update(sql, "u1", "zhangSan", "123");

}

 
4 ResultSetHandler

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwzfdw.html