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 = "https://www.cnblogs.com/lijili/p/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
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/502158.html
標籤:架構設計
