五,手写SpringMVC框架,过滤器的使用

  1. 过滤器

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

五,手写SpringMVC框架,过滤器的使用

9 .1 如果通过dao 方法中传参,那么我们需要修改方法的签名。

当我们需要手动提交事务,调用 conn.setAutoCommit(false); 但是,我们的conn 到底用的是哪个connection ?我们三个dao 代码中,应该使用同一个C onnection 对象,才能让三个dao 操作处于同一个事务。如果用面向对象的思想来写,那么我们需要在dao 中传参。

9.2 如下图所示:

五,手写SpringMVC框架,过滤器的使用

9 .3 案例代码:jsp77

9 .4 问题:代码非常丑陋。

9.5 如何解决

事务前置到XxxFilter 中,进行”所谓的”事务管理的操作。 Service 还是正常的Service ,不要XxxS erviceI mpl 代码中获取Connection 对象,XxxD ao 的方法也不要传递Connection 对象。

五,手写SpringMVC框架,过滤器的使用

但是如何解决三个dao 操作要共享同一个Connection 对象的问题呢?

9 .6 如何解决C onnection对象共享的问题?

有一个工厂,有三个员工 – 相当于三个dao 方法。

五,手写SpringMVC框架,过滤器的使用

这个纽带叫ThreadL ocal

Original: https://www.cnblogs.com/lijili/p/16596665.html
Author: 雾里看瓜
Title: 五,手写SpringMVC框架,过滤器的使用

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/622635/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • java如何获取一个文本文件的编码(格式)信息呢?

    文本文件是我们在windows平台下常用的一种文件格式, 这种格式会随着操作系统的语言不同,而出现其默认的编码不同 那么如何使用程序获取”文本文件”的编码方…

    Java 2023年6月15日
    071
  • 5道面试题,拿捏String底层原理!

    原创:微信公众号 码农参上,欢迎分享,转载请保留出处。 String字符串是我们日常工作中常…

    Java 2023年6月5日
    081
  • java类库

    Java的应用程序接口(API)以包的形式来组织,每个包提供大量的相关类、接口和异常处理类,这些包的集合就是Java的类库。 Java类库可以分为两种 包名以java开始的包是Ja…

    Java 2023年6月7日
    072
  • mybatis

    作用域 生命周期 局部变量,用于创建SqlSessionFactorySqlSessionFactory 应用运行期间SqlSession 每个线程应该有自己的SqlSession…

    Java 2023年5月30日
    060
  • 链表

    链表 1 链表 链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的。 2 单链表 商品结点类 package com.acti.lin…

    Java 2023年6月14日
    0102
  • 【工作篇】再次熟悉 SpringMVC 参数绑定

    主要现在项目中使用的参数绑定五花八门的,搞得很头大,例如有些用字符串接收日期,用字符串接受数组等等,完全没有利用好 SpringMVC 的优势,这里自己也总结一下,免得到时又要百度…

    Java 2023年6月5日
    0134
  • SpringBoot快速入门

    编写业务代码, Controller package com.andan.web.controller; import org.springframework.web.bind.a…

    Java 2023年6月16日
    071
  • Junit执行单元测试用例成功,mvn test却失败的解决方法

    Junit执行单元测试用例成功,mvn test却失败的解决方法(具体体现为使用的H2数据库中mock进去的数据在Junit执行的时候可以访问到,但是mvn test的时候数据库却…

    Java 2023年6月13日
    056
  • 【Redis】Redis Cluster-集群数据迁移

    Redis通过对KEY计算hash,将KEY映射到slot,集群中每个节点负责一部分slot的方式管理数据,slot最大个数为16384。在集群节点对应的结构体变量clusterN…

    Java 2023年6月8日
    078
  • nginx http和https共存

    server { listen 80 default backlog=2048; listen 443 ssl; server_name linuxyan.com; root /v…

    Java 2023年5月30日
    072
  • Oracle表主键作为外键都用在哪些表查询

    Oracle外键关联查询 Oracle中,如果设置了外键,删除数据时,必须将外键关联一并删除,但是如果对项目不是很熟悉时,我们无法判断到底都在哪些表中有外键关联,以下提供了一个查询…

    Java 2023年6月13日
    059
  • java二维数组

    二维数组 二维数组可以看成以数组为元素的数组。 还可以有二维、三维、甚至更多维数组,但是实际开发中用 的非常少。最多到二维数组(学习容器后,我们一般使用容器,二维数组用的都很少)。…

    Java 2023年6月15日
    087
  • java使用poi导出excel

    继上一篇导出pdf,这篇导出excel。 1、导入依赖 2、代码 import java.io.OutputStream;import java.net.URLEncoder; i…

    Java 2023年6月13日
    065
  • 帮老婆打一下广告,淘宝店厦门卖茶油

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Java 2023年5月29日
    076
  • MarkDown学习

    二级标题 … +空格+标题的名字(可以写到六级标题,写几个#号就代表是几级标题) 在文字两边都加两个星号 在文字两边都加一个星号 斜体加粗 在文字两边各加三个星号 删除…

    Java 2023年6月7日
    0102
  • 二叉树的最小深度(递归)

    二叉树的最小深度(递归) 问题重述: 给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明:叶子节点是指没有子节点的节点。 示例 1: …

    Java 2023年6月7日
    065
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球