数据库连接池,mvc,过滤器

mvc

M【模型层】
实体类【javabean】
主要用于封装业务逻辑
V【视图层】
JSP【展示数据】
主要负责显示数据
C【控制层】
servlet【获取展示信息使用的】
负责将数据传递到界面或者从界面获取数据

数据库连接池

JDBC访问数据库的缺点

1.访问数据库前需要进行一个连接
耗时
2.每次操作结束后,需要进行资源的释放
耗资源
3. 频繁的链接导致系统的安全性和稳定性

连接池

连接池是由容器【服务器】提供的,用来管理池中的连接对象

连接池自动分配链接对象,并对闲置的链接进行回收

事先创建好很多个数据库连接  放到连接池中(内存中的一块区域) 用连接时,不再是自己去创建 而是从连接池中拿连接用完再还到池中。

c3p0xml

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
  <default-config>
    <property name="driverClass">org.sqlite.JDBC</property>
    <property name="user">root</property>
    <property name="password">1234</property>
    <property name="jdbcUrl">jdbc:sqlit:E:javadata_testdata_test.sqlit</property>
  <!--   <property name="initialPoolSize">100</property>
    <property name="maxIdleTime">30</property>
    <property name="maxPoolSize">100</property>
    <property name="minPoolSize">10</property>
    <property name="maxStatements">200</property> -->
  </default-config>

  <!-- This app is massive! -->
  <named-config name="myC3p0"> 
   <property name="driverClass">org.sqlite.JDBC</property>
    <property name="user">root</property>
    <!--<property name="password">1234</property>-->
    <property name="jdbcUrl">jdbc:sqlite:E:javadata_testdata_test.sqlit</property>
    <property name="initialPoolSize">100</property>
    <property name="maxIdleTime">30</property>
    <property name="maxPoolSize">100</property>
    <property name="minPoolSize">10</property>
    <property name="maxStatements">200</property>

  </named-config>
</c3p0-config>

使用

    //连接sqlit3数据库
    public static Connection get_conn() throws ClassNotFoundException, SQLException {
        Connection conn = null;
        ComboPooledDataSource myC3p0 = new ComboPooledDataSource("myC3p0");
        conn = myC3p0.getConnection();
        System.out.println(myC3p0.getJdbcUrl());
        System.out.println(myC3p0.getMinPoolSize());
        System.out.println(myC3p0.getMaxPoolSize());
        System.out.println(myC3p0.getInitialPoolSize());

//        conn = DriverManager.getConnection("jdbc:sqlite:E:\java\data_test\data_test.sqlit");

        return conn;

 过滤器

注册过滤器

    <filter>
        <filter-name>filter_test</filter-name>
        <filter-class>com.zym.utils.filter_test</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>filter_test</filter-name>
        <url-pattern>/*</url-pattern>
        <!--“/*”表示过滤对所有url都有效-->
    </filter-mapping>

过滤器的执行顺序

使用的例子:

可以在filter中,将编码设置成utf-8,进行设置,减少请求的设置

  <init-param>
  <param-name>charset</param-name>
  <param-value>utf-8</param-value>
  </init-param>
public class FilterOne implements Filter {
String chars = null;
    public void destroy() {
        System.out.println("AAAAAAAAAAAAAAA------------调用了销毁方法");

    }
//重要
    public void doFilter(ServletRequest arg0, ServletResponse arg1,
            FilterChain arg2) throws IOException, ServletException {
        // TODO Auto-generated method stub
        System.out.println("AAAAAAAAAAAAAAA------------调用了过滤方法(开始)");
        
        arg0.setCharacterEncoding(chars);
        
        
        
        arg2.doFilter(arg0, arg1);
        System.out.println("AAAAAAAAAAAAAAA------------调用了过滤方法(结束)");

    }

    public void init(FilterConfig arg0) throws ServletException {
        System.out.println("AAAAAAAAAAAAAAAAAAAAAAAAA---------调用了初始化方法");
chars= arg0.getInitParameter("charset");//utf-8
    }

}
原文地址:https://www.cnblogs.com/taozizainali/p/11077111.html