首页 > 其他分享 >五,手写SpringMVC框架,过滤器的使用

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

时间:2022-08-17 21:57:43浏览次数:62  
标签:事务 encoding SpringMVC dao 过滤器 import 手写 servlet javax

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

 

标签:事务,encoding,SpringMVC,dao,过滤器,import,手写,servlet,javax
From: https://www.cnblogs.com/lijili/p/16596665.html

相关文章

  • SpringMvc_06Jackson,Controller返回json数据
    初识json 通过json对象来实现,但是会有乱码问题  乱码问题可以通过Springmvc-servlet配置    同样的,可以通过RestController让其不仅过视图解析器,返回一个......
  • 四,手写SpringMVC框架,业务层-什么是耦合/依赖?如何解決
    4.业务层4.1MVC模型MVC:Model(模型),View(视图),Controller(控制器)视图层:用于做数据的展示以及和用户交互的一个界面=>jsp控制层:能够接受客户端的请求并且进行请求转发,具体的......
  • 手写卷积单元-python
    一个文本卷积模块defcnn():importnumpyasnpresult=[]n,dim=10,30kernels=[np.random.randint(0,2,(i,dim))foriinrange(3,6)]#......
  • flask模板与过滤器
    HTML:1<!DOCTYPEhtml>2<htmllang="en">3<head>4<metacharset="UTF-8">5<title>Title</title>6</head>7<body>8hello9<br>10{......
  • SpringMvc_05接受请求参数以及数据回显
    1、通过RequestParam的方式取别名  2、当对象是一个类的时候,可以匹配类的字段进行判断  如果匹配不到,则该字段接受到的值为Null......
  • SpringMvc_04转发重定向用法
    1、暂时关闭视图解析器  2、使用简单的使用转发和重定向的功能  ......
  • SpringMvc_03RestuFul风格
    概念:Restful就是一个资源定位以及资源操作的风格,不是标准也不是协议,只是一种风格,基于这个风格的软件可以更简洁,更有层次,更易于实现缓存机制。功能资源:互联网所有的事务......
  • java过滤器(Filter)、Spring拦截器(Handler)
    首先,tomcat容器中有Servlet容器和Spring容器,java过滤器。Filter是在Servlet规范中定义的,是Servlet容器支持的;Handler是在Spring容器内的,是Spring框架支持的......
  • MFC实现Txt01之手写代码实现输入
    不是很想写这个。。。主要是因为这一块内容都是照着孙鑫那本书上的内容写的,没什么特别之处,而且网上很多这些内容,随便百度一下就有,(第五章,文本编程,放个链接,这位写的还不错)(其......
  • SpringMVC笔记
    SrpingMvcSSM:Spring+SpringMvc+MybatisMvc三层架构狂神说SSM框架系列笔记链接:http://dwz.date/ac271、回顾MVC1.1、什么是MVCMVC是模型(Model)、视图(View)、......