Day58 自定义DbUtils补充、过滤器

1.思维导图

2.代码部分

自定义DbUtils:MyBeanHandler

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;
    }
}

自定义DbUtils:MyBeanListHandler

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>
        <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>
    • 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的过滤路径
    • 针对<servlet-name> ,针对Demo01Servlet进行过滤
<filter-mapping>
    <filter-name>Demo03Filter</filter-name>
    <servlet-name>Demo01Servlet</servlet-name>
</filter-mapping>
    • 针对<url-pattern>
      • 完全匹配:必须以"/"开头
<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);
        }
    }   
}

处理之中文乱码

  • .Java
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>

猜你喜欢

转载自www.cnblogs.com/Her4c/p/12755383.html
今日推荐