用DDconnectionBroker连接池处理简单的登陆
用JDBC 连接Mysql 数据库。
默认已经下载并导入了DDconnectionBroker.jar
先写一个连接池的java文件命名为DDConn.java
package MysqlConnection;
import java.sql.Connection;
import java.sql.SQLException;
import com.devdaily.opensource.database.DDConnectionBroker;
public class DDConn
{
private DDConnectionBroker m_broker;
private static DDConn m_singleton = null;
// 数据库连接所需要的各种参数
private String driver = "com.mysql.jdbc.Driver"; //驱动
/*我已经在本地的mysql数据库中新建了Login数据库,
*这个数据库中新建了一张表Users,
*Users中有一条数据(username:wanghao,password:wanghao@)
*/
private String url = "jdbc:mysql://localhost:3306/Login";
// 数据库的用户名和密码
private String uname = "root";
private String passwd = "wanghao@";
//连接池的最大连接和最小连接数
private int minConnections =0;
private int maxConnections = 10;
private long timeout = 100 ;
private long leaseTime =60000 ;
private String logFile = "/home/wang/Sigin.log";
//连接池的初始化
public void InitBroker(){
try
{ System.out.print("Being here");
m_broker = new DDConnectionBroker(driver,
url, uname, passwd,
minConnections,
maxConnections,
timeout,
leaseTime,
logFile);
}
catch (SQLException se)
{
System.err.println( se.getMessage() );
}
}
//得到连接的数量
public int GetNumberConnections() throws SQLException {
if(m_broker != null)
return m_broker.getNumberConnections();
else return -1;
}
//得到连接
public synchronized Connection getConnection() throws Exception
{
if (m_broker == null)
{
throw new Exception("Can't get Connection broker!");
}
return (m_broker.getConnection());
}
//释放连接
public synchronized void freeConnection(Connection con)
throws Exception
{
if (m_broker == null )
{
throw new Exception("Can't get Connection broker!");
}
m_broker.freeConnection(con);
}
}
再写一个针对本次使用连接池的类JavaConn.java对DDCon.java进一步封装
package MysqlConnection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
public class JavaConn {
private DDConn Con = new DDConn();
private static JavaConn instance;
//连接池的实例化
synchronized public static JavaConn getInstance()
{ if(instance == null)
{ instance = new JavaConn();
instance.Con.InitBroker();
}
return instance;
}
//得到连接
public Connection getConnection() throws Exception{
return Con.getConnection();
}
//释放连接
public void freeConnection() throws Exception
{
Con.freeConnection((Connection) Con);
}
//得到连接的数目
public int getNumberConnections() throws SQLException
{
return Con.GetNumberConnections();
}
}
好,我们数据库连接池的代码写好后,写个登录界面来验证一下:
package Login;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
//用户登录管理系统的登录界面:Login.java
@WebServlet("/login.do")
public class Login extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
try {
//解决中文乱码
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<body>");
out.println("<h1>登录界面--请登录</h1>");
out.println("<form action=loginCheck.do method=post>");
if (username == null)
{ out.println("用户名:<input type=text name=username><br>");
out.println("密&nsp码:<input type=password name=password><br>");
}
else
{ out.println("用户名:<input type=text name=username value = "+ username +"><br>");
out.println("密&nsp码:<input type=password name=password value = " + password + "><br>");
}
out.println("<input type=submit value=login><br>");
out.println("</form>");
out.println("</body>");
out.println("</html>");
} catch (Exception e) {
e.printStackTrace();
}
}
然后再写一个LoginCheck.java来接收前台的参数,并与数据库中的数据进行比对。
package Login;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import MysqlConnection.JavaConn;
@WebServlet("/loginCheck.do")
public class LoginCheck extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
//解决中文乱码
response.setContentType("text/html;charset=gbk");
//接受用户从浏览器端传送过程来的用户名和密码
String username = request.getParameter("username");
String password = request.getParameter("password");
JavaConn ConnectionPool =JavaConn.getInstance();//得到一个实例化的连接池
Connection Con = ConnectionPool.getConnection();//申请一个连接
String sql = "select * from Users where username='"+username+"' and password='"+password+"'";
//statement里面带有很多方法 实现插入更新 删除
Statement stmt = Con.createStatement();
//rs为返回结果的集合 否则为空值
ResultSet rs = stmt.executeQuery(sql);
if(rs.next()) {
//合法
//跳转到欢迎界面:welcome.java response.sendRedirect("welcome.do?username = "+ username);
}else{
//用户名和密码不匹配,跳转到登录界面
response.sendRedirect("login.do"); }
} catch (Exception e) {
e.printStackTrace();
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
this.doGet(request, response);
}
}
额,看来还要一个欢迎页面 welcome.java,通过LoginCheck的检查后,会跳转到这里····
package Login;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import MysqlConnection.JavaConn;
@WebServlet("/welcome.do")
//用户登录管理系统的欢迎界面:Welcome.java
public class Welcome extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession(false);
String u = (String)session.getAttribute("username");
if(u == null)
{//如果非法访问 跳转到登录界面
response.sendRedirect("login.do");
}
else{
try {
//解决中文乱码
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
JavaConn ConnectionPool =JavaConn.getInstance();//得到一个实例化的连接池
out.println("你好!" + u);
out.println("欢迎选修Java EE");
out.println("现在共有" +ConnectionPool.getNumberConnections() + "位用户在线");
out.println("<a href='/Signup.do'>退出登陆</a>");
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
this.doGet(request, response);
}
}
下面是测试结果:
我在浏览器中再新开一个窗口,重新登录: