servlet使用过滤器和连接池
——Javee
在运行时,过滤器优先于HttpServlet对象使用,用户在访问的时候请求通过过滤器,过滤器决定放不放行。当然,还可以在过滤器中进行HttpServlet中的处死话工作,因为之两个的request和response时同一个对象。
具体代码如下:
package com.seecen.filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* @Author Javee
* @Date 2019/9/17 10:44
* @Description
*/
//*表示所有的请求都要经过过滤器
@WebFilter("/*")
public class IdentityFilter implements Filter {
@Override
public void init(FilterConfig filterConfig){
System.out.println("filter init..."); //初始化
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
//进行初始化
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
System.out.println("doFilter...");
//放行
filterChain.doFilter(servletRequest, servletResponse);
}
@Override
public void destroy() {
System.out.println("filter destroy..."); //销毁
}
}
这里我们使用了注解的方法进行配置,当有有兴趣的朋友可以尝试在web.xml中进行配置,效果是一样的。
注意:因为注解一般情况下是不能打包的,所以在使用注解的项目中,需要打包的话,在pom.xml中添加如下代码(必须是3.0.0及以上版本):
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
接下来我们聊聊数据库连接池,数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。这种提高,在我们平时的测试中很难感受到,但是一旦系统的访问量增大数万倍,这种性能的提升就很明显。
那么数据库连接池具体怎么操作呢?
首先,我们要修改一下tomcat的配置文件,我们找到自己本地tomcat的文件夹,找到conf->context.xml,添加如下代码:
<Context>
......
<!--配置oracle数据库的连接池-->
<Resource name="jdbc/mypool"
author="Container"
type="javax.sql.DataSource"
maxActive="10"
maxIdle="3"
maxWait="10000"
username="admin"
password="admin"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@127.0.0.1:1521:orcl" />
......
</Context>
再找到我们项目中的web.xml,添加如下代码并重新导包,注意这里的name和我们上面配置的name必须相同:
<resource-ref>
<res-ref-name>jdbc/mypool</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
到这里,链接数据库,获得连接的代码如下:
public Connection getConnection(){
try {
Context context = new InitialContext();
DataSource dataSource = (DataSource)context.lookup("java:comp/env/jdbc/mypool");
//System.out.println("....................." + dataSource.getConnection());
return dataSource.getConnection();
} catch (NamingException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
获取到连接后,就可以像我们之前那样使用Java操作数据库了