五,手写SpringMVC框架,过滤器的使用

2023-05-02 10:33

复制项目mymvc4,新建项目mymvc5

packagecom.hy.filter;

importjava.io.IOException;

importjavax.servlet.Filter;

importjavax.servlet.FilterChain;

importjavax.servlet.FilterConfig;

importjavax.servlet.ServletException;

importjavax.servlet.ServletRequest;

importjavax.servlet.ServletResponse;

importjavax.servlet.annotation.WebFilter;

importjavax.servlet.annotation.WebInitParam;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

importcom.hy.utils.StringUtil;

@WebFilter(urlPatterns={ "*.do"},

initParams={

@WebInitParam(name="encoding", value="UTF-8")

})

publicclassCharacterEncodingFilter implementsFilter {

privateString encoding="UTF-8";

@Override

publicvoidinit(FilterConfig filterConfig) throwsServletException {

String encoding=filterConfig.getInitParameter("encoding");

System.out.println("encoding="+encoding);

if(StringUtil.isNotEmpty(encoding)) {

this.encoding=encoding;

}

}

@Override

publicvoiddoFilter(ServletRequest req, ServletResponse resp, FilterChain chain)

五,手写SpringMVC框架,过滤器的使用

throwsIOException, ServletException {

HttpServletRequest request=(HttpServletRequest) req;

HttpServletResponse response=(HttpServletResponse) resp;

request.setCharacterEncoding(encoding);

response.setCharacterEncoding(encoding);

response.setContentType("text/html;charset="+encoding);

chain.doFilter(request, response);

return;

}

@Override

publicvoiddestroy() {

}

}

createtableworker(

widintprimarykey,

wnamevarchar2(20),

ageint

)

select* fromuser_tables;

select* fromuser_col_commentswheretable_name='WORKER'

select* fromworker;

insertintoworkervalues(1,'fbb',10);

commit;

rollback;

##Oracle自动开启事务但是需要手动的提交事务或回滚事务

##mysql默认自动开启事务自动提交事务失败自动回滚

当我们需要手动提交事务,调用 conn.setAutoCommit(false); 但是,我们的conn到底用的是哪个connection?我们三个dao代码中,应该使用同一个Connection对象,才能让三个dao操作处于同一个事务。如果用面向对象的思想来写,那么我们需要在dao中传参。

事务前置到XxxFilter中,进行”所谓的”事务管理的操作。 Service还是正常的Service,不要XxxServiceImpl代码中获取Connection对象,XxxDao的方法也不要传递Connection对象。

但是如何解决三个dao操作要共享同一个Connection对象的问题呢?

有一个工厂,有三个员工相当于三个dao方法。

这个纽带叫ThreadLocal

相关推荐