做接口测试的练习,写一个登录服务端Java DemoServlet

参考Eclipse配置:https://blog.csdn.net/man_zuo/article/details/80245685

JDBC的使用:

https://blog.csdn.net/qq_22172133/article/details/81266048

数据库连接池c3p0 jar包:

https://mvnrepository.com/search?q=c3p0

文件目录:

后台Servlet:接口参数name和password

package test;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class RegisterDemo extends HttpServlet{
	public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException{
		doPost(request,response);
	}
        public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException{
    	       request.setCharacterEncoding("UTF-8");
    	       response.setContentType("text/html");
    	       String name = request.getParameter("name");
    	       String password = request.getParameter("password");
    	       PrintWriter out = response.getWriter();
  	
    	       IsRegisterUsers isregisterusers=new IsRegisterUsers();
    	       HashMap data=isregisterusers.isUsers(name,password);
    	/**
        Iterator it = data.keySet().iterator();
        while (it.hasNext()) {
            // 遍历 Map
            Object key = it.next();
            Object val = data.get(key);
            System.out.println(key + ":" + val);
        }
        */
    	       if(data!=null) {
    		       String successData = "{\"code\":\"200\",\"name\":\""+data.get("name")+"\",\"password\":\""+data.get("password")+"\",\"token\":\""+data.get("token")+"\"}";
    		       out.write(successData);
    	       }else{
    		       String failData = "{\"code\":400,\"result\":\"账号或密码错误\"}";
    		       out.write(failData);
    	       }
	}
}

自定义的工具类IsRegisterUsers:

package test;
import java.sql.*;
import java.util.HashMap;

public class IsRegisterUsers {
	public HashMap isUsers(String name,String password) {
		HashMap data=new HashMap();
		try{	
			//DBUtils dbutils=new DBUtils();
			Connection connection=DBUtils_c3p0.getConnection();
			System.out.println("实例化Statement对象");
			String sql = "select name,password,token from RegisterUsers where name=? and password=?";
			PreparedStatement preparedstatement = connection.prepareStatement(sql);
			preparedstatement.setString(1, name);
			preparedstatement.setString(2, password);
		        ResultSet result = preparedstatement.executeQuery();
		   
                        while(result.next()) {
                    	    String token=result.getString("token");
            	            data.put("token", token);
                            data.put("name", result.getString("name"));
                            data.put("password", result.getString("password"));
                            System.out.print("姓名: " + name);
                            System.out.print(", 密码: " + password);
                            System.out.print(", token值: " + token);
                            System.out.print("\n");
                        }                                
            // 完成后关闭
                        DBUtils_c3p0.release(connection, preparedstatement, result);
		}catch(Exception e) {
			e.printStackTrace();
		}
		return data;
	}	
}

工具类DBUtils:导入mysql-connector-java-5.1.39-bin.jar包

package test;

import java.io.InputStream;
import java.sql.*;
import java.util.Properties;
/**
*提供数据库连接connection对象
*/
public class DBUtils  {
	private static String JDBC_DRIVER;
	private static String DB_URL;
	private static String USER;
	private static String PASS;
	static {
		try {
                        //通过读取同级目录下的配置文档db.properties获取数据库参数
			InputStream in = DBUtils.class.getClassLoader().getResourceAsStream("db.properties");
			Properties prop=new Properties();
			prop.load(in);
			
			JDBC_DRIVER=prop.getProperty("driver");
			DB_URL=prop.getProperty("url");
			USER=prop.getProperty("username");
			PASS=prop.getProperty("password");
			
			System.out.println("注册 JDBC 驱动..."); 
		        Class.forName(JDBC_DRIVER);
		}catch(Exception e) {
			e.printStackTrace();;
		}
		
	}
    //MySQL 8.0 以下版本 - JDBC 驱动名及数据库 URL
    //static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  
    //static final String DB_URL = "jdbc:mysql://localhost:3306/RUNOOB";
    // MySQL 8.0 以上版本 - JDBC 驱动名及数据库 URL
    //static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";  
    //static final String DB_URL = "jdbc:mysql://localhost:3306/RUNOOB?useSSL=false&serverTimezone=UTC";

    // 数据库的用户名与密码,需要根据自己的设置
    //static final String USER = "zhangdingyi";
    //static final String PASS = "Ensky123.";
 
    public static Connection getConnection() throws SQLException{   
        return DriverManager.getConnection(DB_URL,USER,PASS);
    }
    public static void release(Connection connection,Statement statement,ResultSet result) { 	
        // 关闭释放资源
        try{    	
            if(result!=null) {result.close();result=null;}
            if(statement!=null) {statement.close();statement=null;}
            if(connection!=null) {connection.close();connection=null;}        
        }catch(SQLException e){
            e.printStackTrace();     
        }                 
        System.out.println("断开数据库连接 Goodbye!");
    }
}

添加连接池jar包c3p0,改造一下DBUtils -> DBUtils_c3p0:

package test;

import java.sql.*;
import com.mchange.v2.c3p0.ComboPooledDataSource;

public class DBUtils_c3p0 {
      private static ComboPooledDataSource poolLink=new ComboPooledDataSource("RegisterDemoDB");
      private static Connection conn;
 
      public static Connection getConnection(){   
    	try {
    		/**不用配置文档c3p0-config.xml的情况,用set方法
     		poolLink.setDriverClass("com.mysql.jdbc.Driver");
    		poolLink.setJdbcUrl("jdbc:mysql://localhost:3306/RUNOOB");
    		poolLink.setUser("zhangdingyi");
    		poolLink.setPassword("Ensky123.");
    		poolLink.setInitialPoolSize(3);
    		poolLink.setMaxPoolSize(20);
    		poolLink.setMaxIdleTime(60);
    		*/
    		conn=poolLink.getConnection();
    	}catch(Exception e) {
    		e.printStackTrace();
    	}
        return conn;
    }
    
    public static void release(Connection connection,Statement statement,ResultSet result) { 	
        // 关闭释放数据库连接资源
        try{    	
            if(result!=null) {result.close();result=null;}
            if(statement!=null) {statement.close();statement=null;}
            if(connection!=null) {connection.close();connection=null;}        
        }catch(SQLException e){
            e.printStackTrace();     
        }                 
        System.out.println("断开数据库连接 Goodbye!");
    }
}

c3p0-config.xml配置在src目录下,c3p0 jar包内也是用类加载方式读取:

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
    <!-- 默认配置,如果没有指定则使用这个配置 -->
    <default-config>
        <property name="user">zhangdingyi</property>
        <property name="password">Ensky123.</property>
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/RUNOOB</property>
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="checkoutTimeout">30000</property>
        <property name="idleConnectionTestPeriod">30</property>
        <property name="initialPoolSize">3</property>
        <property name="maxIdleTime">30</property>
        <property name="maxPoolSize">100</property>
        <property name="minPoolSize">2</property>
        <property name="maxStatements">200</property>
    </default-config>
    <!-- 命名的配置,可以通过方法调用实现 -->
    <named-config name="RegisterDemoDB">
        <property name="user">zhangdingyi</property>
        <property name="password">Ensky123.</property>
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/RUNOOB</property>
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <!-- 如果池中数据连接不够时一次增长多少个 -->
        <property name="acquireIncrement">5</property>
        <!-- 初始化数据库连接池时连接的数量 -->
        <property name="initialPoolSize">20</property>
        <!-- 数据库连接池中的最大的数据库连接数 -->
        <property name="maxPoolSize">25</property>
        <!-- 数据库连接池中的最小的数据库连接数 -->
        <property name="minPoolSize">5</property>
    </named-config>
</c3p0-config>

试运行c3p0jar包的时候,总是报错初始化出错,初始化各项参数值为null,就是没有正确读取到xml文档,之前不知道到底为啥,还检查了半天xml文档是否配置错了,最后发现是我一开始导入jar包不对。

一开始我自建了一个jar文件夹导入,然后project->properties->Java Build Path->Add External jars去了, 甚至拷贝jar包到

java路径/jre/lib/ext/下。

但其实应该都导入到WebContent/WEB-INF/lib/下才对,Eclipse会自动把jar包加到路径下的。

servlet部署:

关于手动部署servlet:https://www.cnblogs.com/hellokitty1/p/4875750.html

web.xml:在<web-app>...</web-app>之间添加:

<servlet>
  <!-- servlet类名 -->
  <servlet-name>RegisterDemo</servlet-name>
  <!-- 完整类名 -->
  <servlet-class>test.RegisterDemo</servlet-class>
</servlet>
<servlet-mapping>
      <servlet-name>RegisterDemo</servlet-name>
      <!-- 访问的网址 http://localhost:8080/RegisterDemo/RegisterDemo?name=xxx&password=xxx-->
      <url-pattern>/RegisterDemo</url-pattern>
</servlet-mapping>

 

c3p0和dbcp的一些区别参考了:https://www.cnblogs.com/zzsuje/articles/10444032.html

c3p0与dbcp的定义

    C3P0:C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等。
    dbcp:DBCP(DataBase Connection Pool)数据库连接池,是java数据库连接池的一种,由Apache开发,通过数据库连接池,可以让程序自动管理数据库连接的释放和断开。

c3p0与dbcp区别:

      dbcp没有自动回收空闲连接的功能

      c3p0有自动回收空闲连接功能

      两者主要是对数据连接的处理不同c3p0提供最大空闲时间,dbcp提供最大连接数。

      前者是如果连接时间超过最大连接时间,就会断开当前连接。dbcp如果超过最大连接数,就会断开所有连接。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值