- 过滤器
8.1 编写字符过滤器 C har acterEncodingFilter
复制项目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 ,事务案例代码:jsp 07 ,jsp77
9 .1 如果通过dao 方法中传参,那么我们需要修改方法的签名。
当我们需要手动提交事务,调用 conn.setAutoCommit(false); 但是,我们的conn 到底用的是哪个connection ?我们三个dao 代码中,应该使用同一个C onnection 对象,才能让三个dao 操作处于同一个事务。如果用面向对象的思想来写,那么我们需要在dao 中传参。
9.2 如下图所示:
9 .3 案例代码:jsp77
9 .4 问题:代码非常丑陋。
9.5 如何解决
事务前置到XxxFilter 中,进行”所谓的”事务管理的操作。 Service 还是正常的Service ,不要XxxS erviceI mpl 代码中获取Connection 对象,XxxD ao 的方法也不要传递Connection 对象。
但是如何解决三个dao 操作要共享同一个Connection 对象的问题呢?
9 .6 如何解决C onnection对象共享的问题?
有一个工厂,有三个员工 – 相当于三个dao 方法。
这个纽带叫ThreadL ocal
Original: https://www.cnblogs.com/lijili/p/16596665.html
Author: 雾里看瓜
Title: 五,手写SpringMVC框架,过滤器的使用
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/622635/
转载文章受原作者版权保护。转载请注明原作者出处!