1、实验三DBCP数据库连接池配置的应用 实验内容和要求: 总所周知建立数据库连接是一个非常耗时耗资源的行为,因此现代的Web中间件,无论是开源的Tomcat、Jboss还是商业的websphere、weblogic都提供了数据库连接池功能,可以毫不夸张的说,数据库连接池性能的好坏,不同厂商对连接池有着不同的实现。本实验要求掌握数据库连接池的配置和使用。 项目运行如下图: 实验步骤如下: 1.准备需要访问的数据库 n 下载并安装MySQL5.0 n Copy MySQL5.0驱动mysql-connector-java-5.0.8-bin.jar到%TOMCAT%\lib文件
2、夹下 n 创建数据库及表: 数据库的设计如下表: 数据库采用MySQL5.0,数据库名:rj12,表名:usertab(用户表) 数据库表usertab中数据如下: 2. 配置tomcat,将apache-tomcat-6.0.20.zip压缩文件解压缩,在MyEclipse中配置tomcat6,如图所示: 在windows-〉Preferences-〉MyEclipse-〉Servers-〉Tomcat-〉Tomcat 6.x 配置好以后在Server面板中出现: 3. 驱动mysql-connector-java-5.0.8-bin.jar拷贝到%T
3、OMCAT%\lib文件夹下,在%TOMCAT%\config文件夹下,找到server.xml文件,修改此文件,在
5、下的\conf\Catalina\localhost文件夹下,找到要配置的Web应用的xml文件,例如web应用为empproject,既是empproject.xml
在
6、reate JDBC driver of class for connect URL ‘null’ “的错误. 6. 开发过程如下: Step1:在com.pojo包中创建JavaBean: User.java,内容如下: package com.pojo; public class User { private int id; private String username; private String password; public int getId() { return id; } public void setId(int id) {
7、 this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } } Step2:在
8、com.util包中创建访问数据库的工具类—JdbcUti.java,内容如下: package com.util; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import javax.naming.Context; import javax.naming.InitialContext; import javax.sql.DataSource; public class JdbcUti
9、l { private static final String DSNAME = "java:comp/env/jdbc/mysqls"; private static JdbcUtil instance = new JdbcUtil(); private JdbcUtil() { } public static JdbcUtil getInstance() { return instance; } private static Context ctx=null; private static DataSource ds=nul
10、l; // 加载驱动 static { try { //Class.forName(DIVER); ctx=new InitialContext(); ds=(DataSource)ctx.lookup(DSNAME); } catch (Exception e) { // TODO Auto-generated catch block // e.printStackTrace(); System.out.println("数据库驱动加载失败!"); } } // 创建连接 public Connecti
11、on getConn() { Connection conn = null; try { conn=ds.getConnection(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); System.out.println("连接数据库失败!"); } return conn; } // 关闭资源 public void free(Connection conn, Statement
12、stmt, ResultSet rs) { try { if (rs != null) { rs.close(); } else if (stmt != null) { stmt.close(); } else if (conn != null) { conn.close(); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } Step3:采用DAO设计模式
13、
在com.dao包下创建UserDao接口,代码如下:
package com.dao;
import java.util.List;
import com.pojo.User;
public interface UserDao {
//查询全部信息
List
14、); } 在com.dao.impl包下创建UserDao接口的实现类UserDaoImpl.java,代码如下: package com.dao.impl; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.List; impor
15、t com.dao.UserDao;
import com.pojo.User;
import com.util.JdbcUtil;
public class UserDaoImpl implements UserDao{
public List
16、mt=null; ResultSet rs=null; try { stmt=conn.createStatement(); rs=stmt.executeQuery(sql); while(rs.next()){ User user=new User(); user.setId(rs.getInt("id")); user.setUsername(rs.getString("username")); user.setPassword(rs.getString("password")); list.
17、add(user); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ JdbcUtil.getInstance().free(conn, stmt, rs); } return list; } //登录 public User findOne(String username, String password) { Connection conn=JdbcUtil.getInstan
18、ce().getConn(); String sql="select * from usertab where username=? and password=?"; PreparedStatement pstmt=null; ResultSet rs=null; User user=null; try { pstmt=conn.prepareStatement(sql); pstmt.setString(1, username); pstmt.setString(2, password); rs=pstmt.execut
19、eQuery(); if(rs.next()){ user=new User(); user.setId(rs.getInt("id")); user.setUsername(rs.getString("username")); user.setPassword(rs.getString("password")); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{
20、 JdbcUtil.getInstance().free(conn, pstmt, rs); } return user; } public User findOne(int id) { // TODO Auto-generated method stub return null; } public int insertOne(User user) { // TODO Auto-generated method stub return 0; } } Step4:根据MVC设计模式,在com.serv
21、ice包下创建UserService.java 接口,代码如下:
package com.service;
import java.util.List;
import com.pojo.User;
public interface UserService {
List
22、 com.dao.UserDao;
import com.dao.impl.UserDaoImpl;
import com.pojo.User;
import com.service.UserService;
public class UserServiceImpl implements UserService{
private UserDao ud=new UserDaoImpl();
public List
23、} } Step5:修改在WebRoot下的index.jsp页面。代码如下:
查看所有用户信息 其中flag是在UserServlet中接收的一个标志参数,flag=1时所实现的功能是到数据库中查询全部信息。 Step6:在com.servlet包下创建一个Servlet,UserServlet.java代码如下: package servlet; import java.io.IOException; import java.util.List; imp24、ort javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.pojo.User; import com.service.UserService; import com.service.impl.UserServiceImpl; public class UserServlet e
25、xtends HttpServlet { private UserService us=new UserServiceImpl(); public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse
26、response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); String flag=request.getParameter("flag"); int select=0; if(flag!=null){ select=Integer.p
27、arseInt(flag);
}
switch (select) {
case 1:
findAll(request,response);
break;
default:
break;
}
}
//查询全部用户信息
public void findAll(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
List
28、 request.setAttribute("list", list); request.getRequestDispatcher("list.jsp").forward(request, response); } } 注意:在servlet中只能调用service层中的方法,遵循MVC设计原则。 Step6:在WebRoot下增加list.jsp页面,显示从数据库中查到的所有数据。代码如下: <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@taglib prefix
29、"c" uri="
| 用户ID | 用户名 |
用户密码
30、 |
| ${u.id } | ${u.username} | ${u.password} |






