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:\java\data_test\data_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:\java\data_test\data_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 } }