zoukankan      html  css  js  c++  java
  • Servlet与SpringMVC内部实现

    Jsp
    表达式<%= %>
    指令page/include
    动作<jsp:useBean>/param/include/plugin/setProperty......等
    对象application 对象是 javax.servlet.ServletContext 类的实例
    对象config 对象是 javax.servlet.ServletConfig 类的实例
    对象pageContext 对象是 javax.servlet:jsp.pageContext 类的一个实例
    对象request/response/out/session/pageContext/page/config/application
    Servlet
    1.javax.servlet   其中包含定义servlet和servlet容器之间契约的类和接口。
    2.javax.servlet.http   其中包含定义HTTP Servlet 和Servlet容器之间的关系。
    3.javax.servlet.annotation   其中包含标注servlet,Filter,Listener的标注。它还为被标注元件定义元数据。
    4.javax.servlet.descriptor,其中包含提供程序化登录Web应用程序的配置信息的类型。
    继承关系Servlet
    Servlet ServletConfig ServletContext顶层接口
    ↑ ↑ ↑
    (GenericServlet实现类) ServletRequest ServletResponse JspPage ServletException ServletOutputStream Filter接口,并没有继承
    ↑ ↑ ↑ ↑
    httpServlet httpServletRequest httpServletResponse httpJspPage httpSession(引用ServletContext)


    DispatcherServlet封装了httpServlet(httpServlet->httpServletBean->frameworkServlet->DispatcherServlet)
    DispatcherServlet就是一个前端控制器(接收request,进行response),集中提供请求处理机制。将url映射到指定的Controller处理,Controller处理完毕后将ModelAndView返回给DispatcherServlet,DispatcherServlet通过viewResovler进行视图解析,然后将model填充到view,响应给用户
    DispatcherServlet类的内部实现
    HandlerMapping处理器映射器:根据url查找Handler。(可以通过xml配置方式,注解方式)
    HandlerAdapter处理器适配器:根据特定规则去执行Handler,编写Handler时需要按照HandlerAdapter的要求去编写。
    Handler处理器(后端控制器):需要程序员去编写,常用注解开发方式。
    Handler处理器执行后结果是ModelAndView,具体开发时Handler返回方法值类型包括:ModelAndView、String(逻辑视图名)、void(通过在Handler形参中添加request和response,类似原始 servlet开发方式,注意:可以通过指定response响应的结果类型实现json数据输出)
    View Resolver视图解析器:根据逻辑视图名生成真正的视图(在springmvc中使用View对象表示)
    View视图:jsp页面,仅是数据展示,没有业务逻辑。

    Springmvc中封装request(RequestMappingHandlerMapping)都有实现HandlerMapping
    Springmvc中封装request都有实现也InitializingBean接口,位于org.springframework.beans.factory
    Springmvc中封装request都有实现也Aware接口,实现了Aware系列接口的bean可以访问Spring容器。这些Aware系列接口增强了Spring bean的功能,用于辅助Spring Bean以编程的方式调用Spring容器,也位于org.springframework.beans.factory

    org.springframework.context.ApplicationContextAware接口
    Spring框架启动时,ApplicationContext初始化实现了该接口的Spring Bean时,会将ApplicationContext的引用作为参数传递给创建的Bean实例,创建的Bean实例可以通过ApplicationContext的引用操作Spring框架的各种资源。

    作用与@Autowired标注类似。位于org.springframework.beans.factory.annotation.Autowired
    LoadTimeWeaverAware,加载Spring Bean时织入第三方模块,如AspectJ
    BeanClassLoaderAware,加载Spring Bean的类加载器
    BootstrapContextAware,资源适配器BootstrapContext,如JCA,CCI
    ResourceLoaderAware,底层访问资源的加载器
    BeanFactoryAware,声明BeanFactory
    PortletConfigAware,PortletConfig
    PortletContextAware,PortletContext
    ServletConfigAware,ServletConfig
    ServletContextAware,ServletContext
    MessageSourceAware,国际化
    ApplicationEventPublisherAware,应用事件
    NotificationPublisherAware,JMX通知
    org.springframework.beans.factory.BeanNameAware,声明Spring Bean的名字


    这时程序处理完后返回页面
    InternalResourceViewResolver查看是实现了ViewResolver接口,和Ordered接口,顾名思义,就是用来排序的。
    Spring就提供了Ordered这个接口,来处理相同接口实现类的优先级问题。
    然后ViewResolver解析为JstlView、View对象,该类AbstractView实现了View接口,View接口的主要作用是用于处理视图,然后返回给客户端。
    1. ViewResolve的作用就是通过解析MdoelAndView,将MdoelAndView中的逻辑视图名变为一个真正的View对象,并将MdoelAndView中的Model取出
    2. View的作用就是在获取到ViewResolve传来的View和Model,对Model进行渲染,通过View对象找到要展示给用户的物理视图,将渲染后的视图展示给用户。用很直白的话将就是将数据通过request存储起来,找到要展示给用户的页面,将这些数据放在页面中,并将页面呈现给用户。
    -----------------

  • 相关阅读:
    leetcode — spiral-matrix-ii
    leetcode — spiral-matrix
    leetcode — maximum-subarray
    leetcode — n-queens
    leetcode — powx-n
    leetcode — anagrams
    bzoj 2194: 快速傅立叶之二 FFT
    bzoj 4503 两个串 快速傅里叶变换FFT
    Codeforces 762D Maximum path 动态规划
    Codeforces 762C Two strings 字符串
  • 原文地址:https://www.cnblogs.com/Bkxk/p/11080150.html
Copyright © 2011-2022 走看看