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

五,手写SpringMVC框架,过滤器的使用的更多相关文章

  1. (二)springMvc原理和手写springMvc框架

    我们从两个方面了解springmvc执行原理,首先我们去熟悉springmvc执行的过程,然后知道原理后通过手写springmvc去深入了解代码中执行过程. (一)SpringMVC流程图 (二)Sp ...

  2. 手写SpringMVC 框架

    手写SpringMVC框架 细嗅蔷薇 心有猛虎 背景:Spring 想必大家都听说过,可能现在更多流行的是Spring Boot 和Spring Cloud 框架:但是SpringMVC 作为一款实现 ...

  3. 手写SpringMVC框架(三)-------具体方法的实现

    续接前文 手写SpringMVC框架(二)结构开发设计 本节我们来开始具体方法的代码实现. doLoadConfig()方法的开发 思路:我们需要将contextConfigLocation路径读取过 ...

  4. 手写SpringMVC框架(二)-------结构开发设计

    续接前文, 手写SpringMVC框架(一)项目搭建 本节我们来开始手写SpringMVC框架的第二阶段:结构开发设计. 新建一个空的springmvc.properties, 里面写我们要扫描的包名 ...

  5. 手写SpringMVC框架(一)-------项目搭建

    SpringMVC处理请求的大致流程: 我们来开始着手手写一个SpringMVC框架. 新建一个springMVC项目,流程参见 SpringMVC框架搭建流程 引入servlet相关的jar包: & ...

  6. 纯手写SpringMVC框架,用注解实现springmvc过程

    闲话不多说,直接上代码! 1.第一步,首先搭建如下架构,其中,annotation中放置自己编写的注解,主要包括service controller qualifier RequestMapping ...

  7. 二. 手写SpringMVC框架

    1.1 新建DispatcherServlet 1.2 在src目录下,新建applicationContext.xml <?xml version="1.0" encodi ...

  8. 深度解析SpringMvc实现原理手写SpringMvc框架

    http://www.toutiao.com/a6340568603607171329/?tt_from=mobile_qq&utm_campaign=client_share&app ...

  9. 《四 spring源码》手写springmvc

    手写SpringMVC思路 1.web.xml加载  为了读取web.xml中的配置,我们用到ServletConfig这个类,它代表当前Servlet在web.xml中的配置信息.通过web.xml ...

随机推荐

  1. 《HALCON数字图像处理》第三章笔记

    目录 第三章 HALCON图像处理基础 HALCON控制语句 HALCON算子 HALCON图像处理入门 HALCON图像读取 HALCON图像显示 图形窗口 图像显示 显示文字 HALCON图像转换 ...

  2. 支付宝开放平台--网页&移动应用(一)

    前提是先在支付宝上签约自己需要的支付宝功能,然后支付宝开放平台才能设置你需要的功能 一:支付宝开放平台登录 登录进入支付宝开放平台 二:根据自己的需求创建应用(我是用的网页&移动应用) 三:点 ...

  3. LSP原则是什么

    如果这篇文章能够帮到您,请给我一个免费的赞,谢谢QWQ! LSP原则并不难,但是地方就会把它说的很啰嗦,如果你对LSP还是感到疑惑,请往下看看. 先上代码: public class Bird { p ...

  4. CabloyJS实现了一款基于X6的工作流可视化编辑器

    介绍 文档演示:CMS审批工作流演示了如何通过JSON来直接创建一个工作流定义,通常用于为具体的业务数据生成预定义或内置审批工作流的场景 CabloyJS 4.8.0采用X6 图编辑引擎实现了一款工作 ...

  5. 数字化转型之数字资产知识库(springboot+es+vue+neo4j)

    前言 在数字化高度普及的时代,企事业机关单位在日常工作中会产生大量的文档,例如医院制度汇编,企业知识共享库等.针对这些文档性的东西,手工纸质化去管理是非常消耗工作量的,并且纸质化查阅难,易损耗,所以电 ...

  6. JS:函数

    Function:函数 1. 定义一个函数:function functionname(argument) { 代码块 return }: 调用此函数:fn() 2.函数是定义了一种方法,只有被调用才 ...

  7. JS:this关键字1

    this 代表了当前的对象,哪个对象调用了this所在的函数,this就代表了哪个对象: 例1: function fn(){ var a = 1; console.log(this) } fn() ...

  8. 3D可视化解决方案为巷道工程安全护航

    最近山东栖霞笏山金矿事故中被困22名矿工的生命安全,在揪着全国民的心.大家都在祈求他们能从井下活着回来. 正是由于被困矿工的坚韧意志和政府相关部门不眠不休的奋力营救,11名矿工终于在被困十余日后平安升 ...

  9. 一款超级好用的3Dmax模型插件 支持模型多格式批量转换

    对于模型设计师来说模型格式转换是最常见的事,但是每一款建模软件所支持的格式各有不同,模型互导操作太麻烦 为了解决这个难题,老子云平台研发了一款基于3dmax软件的模型格式转换插件,支持多种模型格式想换 ...

  10. 使用dockerfile部署springboot应用

    本章简单展示如何最短时间 把springboot应用打包成镜像并创建成容器. 准备工作: 1.安装docker ,保证执行docker version没有问题 2.拉下来一个jdk镜像 docker ...