使用 Filter 过滤器统一给所有的 Service 方法都加上 try-catch。来进行实现的 管理

 TransactionFilter

                 实现Filter 接口时,要实现java.servlet.Filter,并且要实现三个方法,否则可能会出现java.lang.AbstractMethodError

package Filter;

import utils.JdbcUtils;

import javax.servlet.*;
import java.io.IOException;

public class TransactionFilter implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {


        try {
            filterChain.doFilter(servletRequest,servletResponse);
            JdbcUtils.commitAndClose();//提交事务,关闭连接
        }catch (Exception e){
            JdbcUtils.rollbackAndClose();//回滚事务,关闭连接
            e.printStackTrace();
        }

    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void destroy() {

    }
}

 

在web.xml中配置 


        TransactionFilter
        Filter.TransactionFilter
    
    
        TransactionFilter
        
        /*
    

 

 

要把BaseSevlet的异常往外抛给过滤器 

package web;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

import java.lang.reflect.Method;

public abstract class BaseServlet extends HttpServlet {

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String action=request.getParameter("action");
        try {
            //获取action业务识别字符串,获取相应的业务方法反射对象
            Method declaredMethod = this.getClass().getDeclaredMethod(action, HttpServletRequest.class,
                    HttpServletResponse.class);
            declaredMethod.invoke(this,request,response);
            //调用目标业务方法
        }catch (Exception e){
            e.printStackTrace();
            throw new RuntimeException(e);//把异常抛给过滤器
        }
    }


}

 

你可能感兴趣的:(Javaweb知识点)