Day58 自定义DbUtils补充、过滤器
1.思维导图
2.代码部分
public class MyBeanHandler<T> implements MyResultSetHandler<T> { private Class<T> clazz;//User类Class对象,也可以是Student类Class对象 public MyBeanHandler(Class<T> clazz) { this.clazz = clazz; } @Override public T handle(ResultSet resultSet) throws Exception { T t = clazz.newInstance(); //处理结果集 while (resultSet.next()){ //id属性值,username属性值,password属性值 Field[] fields = clazz.getDeclaredFields(); for (Field field : fields) { //字段名称 String fieldName = field.getName(); //字段值 Object fieldValue = resultSet.getObject(fieldName); //将字段值设置Class对象对应的java实体对象 //获取字段对应set方法 String methodName = "set" + fieldName.substring(0,1).toUpperCase() + fieldName.substring(1); Method method = clazz.getMethod(methodName, field.getType()); if (null != method) { method.invoke(t,fieldValue); } } } return t; } }
public class MyBeanListHandler<T> implements MyResultSetHandler<List<T>> { private Class<? extends T> clazz;//集合中元素的Class对象 public MyBeanListHandler(Class<? extends T> clazz) { this.clazz = clazz; } @Override public List<T> handle(ResultSet resultSet) throws Exception { List<T> list = new ArrayList<>(); while (resultSet.next()) { //循环一次,就是一条记录,就是一个对象 T t = clazz.newInstance(); Field[] fields = clazz.getDeclaredFields(); for (Field field : fields) { String fieldName = field.getName(); Object fieldValue = resultSet.getObject(fieldName); //获取set方法 String methodName = "set"+fieldName.substring(0,1).toUpperCase()+fieldName.substring(1); Method method = clazz.getMethod(methodName, field.getType()); if (null != method) { method.invoke(t,fieldValue); } } list.add(t); } return list; } }
public class Demo01Filter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { //Demo01Filter过滤器的初始化 System.out.println("Demo01Filter初始化"); } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { //Demo01Filter过滤器处理请求 System.out.println("Demo01Filter放行之前"); filterChain.doFilter(servletRequest,servletResponse); System.out.println("Demo01Filter放行之后"); } @Override public void destroy() { //Demo01Filter过滤器的销毁 System.out.println("Demo01Filter销毁"); } }
- web.xml
<!--声明Demo01Filter过滤器--> <filter> <filter-name>Demo01Filter</filter-name> <filter-class>com.qfedu.filter.Demo01Filter</filter-class> </filter> <!--配置Demo01Filter的过滤路径--> <filter-mapping> <filter-name>Demo01Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
<filter> <filter-name>Demo03Filter</filter-name> <filter-class>com.qfedu.filter.Demo03Filter</filter-class> <!--初始化参数--> <init-param> <param-name>username</param-name> <param-value>root</param-value> </init-param> <init-param> <param-name>password</param-name> <param-value>root123</param-value> </init-param> </filter>
public class Demo03Filter implements Filter { public void init(FilterConfig config) throws ServletException { Enumeration<String> parameterNames = config.getInitParameterNames(); while (parameterNames.hasMoreElements()) { //获取初始化参数名称 String parameterName = parameterNames.nextElement(); //获取初始化参数值 String parameterValue = config.getInitParameter(parameterName); System.out.println("name : " + parameterName + " , value : " + parameterValue); } } }
- Filter的过滤路径
<filter-mapping> <filter-name>Demo03Filter</filter-name> <servlet-name>Demo01Servlet</servlet-name> </filter-mapping>
<filter-mapping> <filter-name>Demo03Filter</filter-name> <url-pattern>/aa</url-pattern> </filter-mapping>
-
-
- 目录匹配:必须以"/"开头,以"*"结尾
-
<filter-mapping> <filter-name>Demo03Filter</filter-name> <url-pattern>/aa/bb/*</url-pattern> </filter-mapping>
-
-
- 后缀名匹配:必须以"*"开头,以后缀名结尾
-
<filter-mapping> <filter-name>Demo03Filter</filter-name> <url-pattern>*.jsp</url-pattern> </filter-mapping>
@WebFilter(filterName = "Demo04Filter" , urlPatterns = "/demo01", servletNames = "Demo01Servlet" , initParams = { @WebInitParam(name = "username",value = "root"), @WebInitParam(name = "password",value = "root") }) public class Demo04Filter implements Filter { public void init(FilterConfig config) throws ServletException { Enumeration<String> parameterNames = config.getInitParameterNames(); while (parameterNames.hasMoreElements()) { String parameterName = parameterNames.nextElement(); String parameterValue = config.getInitParameter(parameterName); System.out.println(parameterName + " , " + parameterValue); } } }
public class EncodingFilter implements Filter { private String encoding = null; public void init(FilterConfig config) throws ServletException { encoding = config.getInitParameter("encoding"); } public void destroy() { } public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException { //处理响应中文乱码 resp.setContentType("text/html;charset="+encoding); //处理请求中文乱码 req.setCharacterEncoding(encoding); chain.doFilter(req, resp);//放行 } }
- web.xml
<filter> <filter-name>EncodingFilter</filter-name> <filter-class>com.qfedu.filter.EncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>utf-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>EncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>