【spring】--- SpringMVC中的Servlet及九大组件解读

spring——servlet的应用 大家好,我是老唐,今天给同学们带来的是spring—servlet的基本应用。今天给同学们带来的是老唐求学时期的照片,希望各位同学们在学习的时候,能够跟老唐一样笑得这么开心。今天我们代码要实现的是把网页表格接收的信息添加到数据库并展示。... 阅读详情

SpringMVC的servlet分为三层:

分别是DisptcherServlet、FrameworkServlet和HttpServletBean;

下来根据源码主要看下三个的Servlet的主要功能;

先看类继承结构图如下:

部分源码解读:

①:HttpServletBean   

继承于HttpServlet

public abstract class HttpServletBean extends HttpServlet {
    public final void init() throws ServletException {}
}

重点分析其init()方法

public final void init() throws ServletException {
     try {
            //主要看下这个类
            PropertyValues pvs = new HttpServletBean.ServletConfigPropertyValues(this.getServletConfig(), this.requiredProperties);
            BeanWrapper bw = PropertyAccessorFactory.forBeanPropertyAccess(this);
            //获取资源配置,mvc的servlet配置
            ResourceLoader resourceLoader = new ServletContextResourceLoader(this.getServletContext());
            bw.registerCustomEditor(Resource.class, new ResourceEditor(resourceLoader, this.getEnvironment()));
            this.initBeanWrapper(bw);
            //为其设置属性
            bw.setPropertyValues(pvs, true);
        } catch (BeansException var4) {
            this.logger.error("Failed to set bean properties on servlet '" + this.getServletName() + "'", var4);
            throw var4;
        }

        this.initServletBean();
}

获取init参数和属性,为其设置属性 

private static class ServletConfigPropertyValues extends MutablePropertyValues {
        public ServletConfigPropertyValues(ServletConfig config, Set<String> requiredProperties) throws ServletException {
            Set<String> missingProps = requiredProperties != null && !requiredProperties.isEmpty() ? new HashSet(requiredProperties) : null;
            Enumeration en = config.getInitParameterNames();
            while(en.hasMoreElements()) {
                String property = (String)en.nextElement();
                Object value = config.getInitParameter(property);
                this.addPropertyValue(new PropertyValue(property, value));
                if (missingProps != null) {
                    missingProps.remove(property);
                }
            }
        }
    }

所以HttpServletBean主要作用是将Servelt中配置的参数设置到相应的属性

②:FrameworkServlet

该FrameworkServlet继承于HttpServletBean

public abstract class FrameworkServlet extends HttpServletBean implements ApplicationContextAware {}

看其构造函数,该函数初始化了一个WebAppllicationContext

 public FrameworkServlet(WebApplicationContext webApplicationContext) {
        this.webApplicationContext = webApplicationContext;
    }

 WebApplicationContext继承于ApplicationContext这个高级容器

public interface WebApplicationContext extends ApplicationContext {}
  

 

所以该FrameworkServlet初始化了一个WebAppllicationContext容器

③:DispatcherServlet

主要作用初始化九大组件

public class DispatcherServlet extends FrameworkServlet {
//这里定义了九大组件分别如下
    //上传解析器,用于处理上传请求
    public static final String MULTIPART_RESOLVER_BEAN_NAME = "multipartResolver";
    //区域解析器,标注视图对应的locale
    public static final String LOCALE_RESOLVER_BEAN_NAME = "localeResolver";
    //主题解析器,根据主题名称得到对应的资源
    public static final String THEME_RESOLVER_BEAN_NAME = "themeResolver";
    //映射处理器,根据url找到对应的处理器handler,其中保存了url和handler的映射关系
    public static final String HANDLER_MAPPING_BEAN_NAME = "handlerMapping";
    //处理适配器,根据处理器handler对象,适配,执行处理器
    public static final String HANDLER_ADAPTER_BEAN_NAME = "handlerAdapter";
    //处理异常解析器,用于对异常的处理
    public static final String HANDLER_EXCEPTION_RESOLVER_BEAN_NAME = "handlerExceptionResolver";
    //视图名转换器,根据viewName查找对应的view,直接需要转换
    public static final String REQUEST_TO_VIEW_NAME_TRANSLATOR_BEAN_NAME = "viewNameTranslator";
    //视图解析器,根据视图名和locale解析为view类型的视图
    public static final String VIEW_RESOLVER_BEAN_NAME = "viewResolver";
    //flashMap管理器,主要用于redirect转发
    public static final String FLASH_MAP_MANAGER_BEAN_NAME = "flashMapManager";
    
    //调用父类FrameworkServlet构造初始化WebApplicationContext
    public DispatcherServlet(WebApplicationContext webApplicationContext) {
        super(webApplicationContext);
    }
    
    //加载9大组件
    protected void initStrategies(ApplicationContext context) {
        this.initMultipartResolver(context);
        this.initLocaleResolver(context);
        this.initThemeResolver(context);
        this.initHandlerMappings(context);
        this.initHandlerAdapters(context);
        this.initHandlerExceptionResolvers(context);
        this.initRequestToViewNameTranslator(context);
        this.initViewResolvers(context);
        this.initFlashMapManager(context);
    }

}

9大组件解读

①:multipartResolver 上传解析器,用于处理上传请求

②:localeResolver 区域解析器,用于解析对应的区域,在视图解析器ViewResolver中会用到,和国家化MessageResource中会用到,从request中解析出locale,比如针对美国用户可以提供一个视图,而针对中国用户则可以提供另一个视图。

③:themeResolver 主题解析器,Spring MVC主题包括两部分内容,分别是Theme和ThemeResolver,一个主题对应一个properties文件,里面存放着跟当前主题相关的所有资源,主要是根据主题名找到主题对应的资源。

④:handlerMapping 映射处理器,主要是根据url查找对应的handler处理器,其中保存了url和handler的对应关系

⑤:handlerAdapter 处理适配器,将Handler对象适配到对应的后端控制器(controller)上去

⑥:handlerExceptionResolver 处理异常解析器,对组件中出现的异常进行处理

⑦:viewNameTranslator 视图名转化器,根据viewName查找对应的view,对于handler处理没有返回的,就是直接在url中调用的页面,根据request获取对应的viewName,这些转换都需要在一个Translator里面完成

⑧:viewResolver 视图解析器,用来将对应的视图名viewName和Locale用户区域进行解析为view类型的视图然后进行渲染

⑨:flashMapManager flashMap管理器,用于在redirect中跳转时,将数据保存在flashMap中进行传递,作为重定向之后使用

urllib库(一)request模块:urlopen(),Request() 实现 get/post,urlretrieve() 下载网页文件,ProxyHandler()设置代理 一、urllib库 python3内置的urllib库不需要安装直接import导入 该库中主要模块有: urllib.request:用来打开和读取URL,是一个请求模块 urllib.error:包含了urllib.request产生的异常,是一个异常处理模块 urllib.parse:用来解析和处理URL,是一个解析模块 urllib.robotparse:用来解析页面的robots.txt urllib.response:响应模块 >>> help(urllib) Help on 阅读详情

相关推荐

【Spring】SpringMVC大致过程

文章目录SpringMVCMVCServletSpringMVCSpringMVC和Servlet的关系大致过程九大组件源码解析SpringMVC初始化SpringMVC处理请求 SpringMVC MVC MVC是一种框架模式,将M和V的实现代码分离。 M(Model):模型,业务规则。处理请求、返回数据,数据可以被多个视图使用。 V(View):视图,就是你能看到并能交互的界面。 C(Controller):控制器,负责接收用户的请求去调用哪个M去处理,然后再返回确定哪个V显示数据。 S

zmm__1377445292的博客 788

SpringMVC 源码分析之 FrameworkServlet

前面和小伙伴们聊了 SpringMVC 的初始化流程,相信大家对于 SpringMVC 的初始化过程都有一个基本认知了,今天我们就来看看当一个请求到达后,它的执行流程是什么样的?当然这个流程比较长,松哥这里可能会分两篇文章来和大家分享。 很多小伙伴都知道 SpringMVC 的核心是 DispatcherServlet,而 DispatcherServlet 的父类就是 FrameworkServlet,因此我们先来看看 FrameworkServlet,这有助于我们理解 DispatcherServlet

江南一点雨的专栏 2307

Spine动画在Unity里卡顿、闪烁、排序错乱?这些性能优化与渲染问题一次讲清

本文深入解析了Spine动画在Unity中常见的卡顿、闪烁和排序错乱问题,提供了全面的性能优化与渲染解决方案。从性能瓶颈诊断到材质合并、动态合批优化,再到层级错乱与Alpha闪烁的处理,帮助开发者提升动画表现和运行效率。特别针对Unity和Spine的协同工作进行了详细的技术探讨。

weixin_29967445的博客 380

FrameworkServlet初始化

FrameworkServlet是Spring web框架的基本servlet实现类,通过JavaBean的方式集成了Application context,所有新实现的servlet最好都继承于该类。该类提供了HttpServlet的所有接口实现,自带了一个web容器,它实现了WebApplicationContextAware接口,所以能根据指定的容器配置文件,来初始化自己管理的容器。 Fra...

我爱娃娃菜的博客 4377

当windows安装git时出现以下错误提示

Windows安装Git时出现多个系统配置设置失败错误(exit code 4294967295),提示包括无法设置textconv、LFS过滤器和SSL等配置项。关键问题在于scalar.exe版本不兼容,系统提示"该版本的scalar.exe与你运行的Windows版本不兼容"。解决方案是检查程序版本是否正确,下载与Windows系统兼容的正确版本重新安装即可。

沧澜的博客 1875

手把手教你为RV1126开发板点亮3寸MIPI屏(ST7701S驱动,含设备树配置避坑点)

本文详细介绍了RV1126开发板适配3寸MIPI屏幕(ST7701S驱动)的全流程,涵盖硬件设计、信号完整性保障、屏幕时序参数计算及设备树配置等关键步骤。特别针对MIPI差分信号布线、电压匹配和设备树配置中的常见问题提供了实用解决方案,帮助开发者高效完成屏幕适配工作。

weixin_42524703的博客 334

SpringBoot-基础-06-servlet三大组件

SpringBoot-基础-06-servlet三大组件

m0_59588925的博客 1526

OMNeT++入门指南:从tictoc1到tictoc18的实例解析与实战演练

本文是OMNeT++网络仿真框架的入门实战指南,详细解析了从tictoc1到tictoc18的经典示例。内容涵盖OMNeT++的下载安装、核心三文件(.ned, .cc, .ini)的编写、模块化建模、自定义消息、数据统计与可视化,以及参数化批量仿真等核心技能,帮助读者从零开始掌握这一强大的网络仿真工具。

weixin_29228781的博客 329

Spring MVC底层原理和九大组件

Spring MVC springMVC是一种web层mvc框架,用于替代servlet,简化 web 编程。是一种基于Java的实现了Web MVC 设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦。 九大组件 HandlerMapping(处理器映射器): HandlerMapping 是用来查找 Handler的,可以是类也可以是一个方法。用 ...

Eternal的博客 964

ican项目四汽车零件智能测量

ican项目四汽车零件智能测量

weixin_72050316的博客 561

Open3D点云算法与点云深度学习案例汇总(长期更新)

Open3D-python算法专栏文章汇总,长期更新算法原理与实战案例。

纵马踏花向自由 7467

SpringMvc的九大组件

SpringMvc的九大组件 SpringMVC中的Servlet一共有三个层次,分别是HttpServletBean、FrameworkServlet和 DispatcherServlet。 HttpServletBean直接继承自java的HttpServlet,其作用是将Servlet中配置的参数设置到相应的属性; FrameworkServlet初始化了WebApplicationContext DispatcherServlet初始化了自身的9个组件。 本篇博客的内容对9个组件做个概览。 在学

qq_43716366的博客 359

Android16 3576 u盘固件升级功能添加

1.在u-boot/drivers/power/pmic/rk8xx.c。这里是读取power键的寄存器判断长短按。

tzj1058756809的博客 575

SpringMVC源码分析:SpringMVC初始化(一)

SpringMVC的初始化大概分为Spring的初始化和SpringMVC的初始化两个部分,他们之间的关系如下图。下面我将按照这个顺序进行详细介绍。

weixin_55229531的博客 5万+

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

【springmvc】九大组件之HandlerAdapter

HandlerAdapter处理器适配器用来执行Controller中的目标方法,由于上面有三种HandlerMapping,对应这里三种HandlerAdapter: RequestMappingHandlerAdapter:对应RequestMappingHandlerMapping HttpRequestHandlerAdapter:对应SimpleUrlHandlerMapping SimpleControllerHandlerAdapter:对应BeanNameUrlHandlerMapping

morris 6万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

SpringMVC设计原理分析

Spring启动简介 在Spring早期得配置中,我们都需要显式地在web.xml配置ContextLoaderListener监听器,该类实现了接口ServletContextListener,实现了该接口的类会在tomcat启动时进行调用,其中关键的方法有contextInitialized()和contextDestroyed()。 从ContextLoaderListener进入Spring初始化流程 1.tomcat启动调用ContextLoaderListener.contextInitial

weixin_39296289的博客 338

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【springmvc】九大组件之HandlerMapping

HandlerMapping表示的是一个URL与一个Handler(可以简单的理解为Controller中有@RequestMapping注解的方法)之间的映射关系。 HandlerMapping的继承关系图如下: 我们主要关注这3个HandlerMapping: RequestMappingHandlerMapping BeanNameUrlHandlerMapping SimpleUrlHandlerMapping RequestMappingHandlerMapping RequestMappi

morris 1265

Servlet与SpringBoot的前世今生

Servlet与SpringBoot的前世今生个人分为了4个阶段原始的servlet,servlet中维护service(手动new),service中维护dao(QueryRunner等DbUtils),此时在web.xml中配置好url映射与servlet的关系,在tomcat接收到请求时,根据匹配的servlet,通过反射创建servlet对象,执行doGet或doPost方法。一般需要手动设置一些响应头信息。此时有了spring框架,通过spring的ioc容器,可方便的创建出service层以及d

qq_43750656的博客 2785

SpringMVC是如何启动的

欢迎访问我的个人博客:http://zhangshuai.name/ 目录 DispatcherServlet的类图 与JavaEE规范相关的接口 Aware相关的类 SpringMVC中自定义的Servlet接口 总结 1.DispatcherServlet的类图 首先在配置SpingMVC的时候,我们要么在web.xml中配置DispatcherServlet,要么采用Java confi...

qq_15802379的博客 4563

从 0 开始手写一个 Spring MVC 框架,向高手进阶!

从 0 开始手写一个 Spring MVC 框架,向高手进阶! Spring框架对于Java后端程序员来说再熟悉不过了,以前只知道它用的反射实现的,但了解之后才知道有很多巧妙的设计在里面。如果不看Spring的源码,你将会失去一次和大师学习的机会:它的代码规范,设计思想很值得学习。 我们程序员大部分人都是野路子,不懂什么叫代码规范。写了一个月的代码,最后还得其他老司机花3天时间重构,相信大部分老司...

qq_38642745的博客 427

自己手写一个 SpringMVC 框架

 前端框架很多,但没有一个框架称霸,后端框架现在Spring已经完成大一统.所以学习Spring是Java程序员的必修课.Spring 框架对于 Java 后端程序员来说再熟悉不过了,以前只知道它用的反射实现的,但了解之后才知道有很多巧妙的设计在里面。如果不看 Spring 的源码,你将会失去一次和大师学习的机会:它的代码规范,设计思想很值得学习。我们程序员大部分人都是野路子,不懂什么叫代码规范。...

怪咖的博客 402

SpringMVC启动流程(总结)

SpringMVC启动流程(详细)

weixin_53870150的博客 5124

Java:110-SpringMVC的底层原理(上篇)

大致流程如下: 对应的web.xml: 在pom.xml中加上如下依赖: 然后再web.xml中加上如下: 一般tomcat的web.xml在其conf目录里面,如图: 在java资源文件夹下,创建com.controller包,然后创建DisController类: 在WEB-INF文件夹下,创建jsp目录,然后创建如下success.jsp文件: 在资源文件夹下加上springmvc.xml文件: 补充web.xml: 假设项目是springmvc这个名称,端口是8080,那么启动服务

qq_59609098的博客 1453

Spring 原理之 DispatchServlet 原理

Spring MVC 的DispatchServlet解析 Spring MVC 时序图 DispatchServlet 的父类是 FrameworkServlet ,FrameworkServlet的父类是HttpServletBean 核心流程: 寻找DispatchServlet的init()方法,定位到其父类的父类HttpServletBean的init()方法 定位配置文件位置,加载配置信息 initServletBean调用 DispatchServlet的父类FrameworkS

weixin_42272869的博客 2247

自己手写一个SpringMVC框架

Spring框架对于Java后端程序员来说再熟悉不过了,以前只知道它用的反射实现的,但了解之后才知道有很多巧妙的设计在里面。如果不看Spring的源码,你将会失去一次和大师学习的机会:它的代码规范,设计思想很值得学习。我们程序员大部分人都是野路子,不懂什么叫代码规范。写了一个月的代码,最后还得其他老司机花3天时间重构,相信大部分老司机都很头疼看新手的代码。   废话不多说,我们进入今天的正题,在W...

u014368614的博客 288
上一篇: 【kafka】 --- kafka应用场景
下一篇: 【面试】--- java两年面试经验
Beat_Boxer
博客等级 码龄9年 18粉丝 88原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值