8. 过滤器8.1 编写字符过滤器 CharacterEncodingFilter
复制项目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) 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默认自动开启事务,自动提交事务,失败自动回滚 |
9,事务案例代码:jsp07 ,jsp77
9.1 如果通过dao方法中传参,那么我们需要修改方法的签名。
当我们需要手动提交事务,调用 conn.setAutoCommit(false); 但是,我们的conn到底用的是哪个connection?我们三个dao代码中,应该使用同一个Connection对象,才能让三个dao操作处于同一个事务。如果用面向对象的思想来写,那么我们需要在dao中传参。
9.2如下图所示:
9.3 案例代码:jsp779.4 问题:代码非常丑陋。9.5 如何解决
事务前置到XxxFilter中,进行”所谓的”事务管理的操作。 Service还是正常的Service,不要XxxServiceImpl代码中获取Connection对象,XxxDao的方法也不要传递Connection对象。
但是如何解决三个dao操作要共享同一个Connection对象的问题呢?
9.6 如何解决Connection对象共享的问题?
有一个工厂,有三个员工 – 相当于三个dao方法。
这个纽带叫ThreadLocal