8. 過濾器 8.1 編寫字元過濾器 CharacterEncodingFilter 複製項目mymvc4,新建項目mymvc5 package com.hy.filter; import java.io.IOException; import javax.servlet.Filter; impor ...
8. 過濾器
8.1 編寫字元過濾器 CharacterEncodingFilter
複製項目mymvc4,新建項目mymvc5
package com.hy.filter;
import java.io.IOException;
import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.annotation.WebFilter; import javax.servlet.annotation.WebInitParam; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;
import com.hy.utils.StringUtil;
@WebFilter(urlPatterns = { "*.do" }, initParams = { @WebInitParam(name = "encoding", value = "UTF-8") }) public class CharacterEncodingFilter implements Filter { private String encoding = "UTF-8";
@Override public void init(FilterConfig filterConfig) throws ServletException { String encoding = filterConfig.getInitParameter("encoding"); System.out.println("encoding="+encoding); if(StringUtil.isNotEmpty(encoding)) { this.encoding = encoding; } }
@Override public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, 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 public void destroy() { } } |
create table worker( wid int primary key, wname varchar2(20), age int )
select * from user_tables; select * from user_col_comments where table_name = 'WORKER'
select * from worker;
insert into worker values(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 案例代碼:jsp77
9.4 問題:代碼非常醜陋。
9.5 如何解決
事務前置到XxxFilter中,進行”所謂的”事務管理的操作。 Service還是正常的Service,不要XxxServiceImpl代碼中獲取Connection對象,XxxDao的方法也不要傳遞Connection對象。
但是如何解決三個dao操作要共用同一個Connection對象的問題呢?
9.6 如何解決Connection對象共用的問題?
有一個工廠,有三個員工 – 相當於三個dao方法。
這個紐帶叫ThreadLocal