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标注类似。
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解析为View对象,该类AbstractView实现了View接口,View接口的主要作用是用于处理视图,然后返回给客户端。
1. ViewResolve的作用就是通过解析MdoelAndView,将MdoelAndView中的逻辑视图名变为一个真正的View对象,并将MdoelAndView中的Model取出
2. View的作用就是在获取到ViewResolve传来的View和Model,对Model进行渲染,通过View对象找到要展示给用户的物理视图,将渲染后的视图展示给用户。用很直白的话将就是将数据通过request存储起来,找到要展示给用户的页面,将这些数据放在页面中,并将页面呈现给用户。
-----------------

原文地址:https://www.cnblogs.com/Bkxk/p/11080150.html

时间: 2024-11-06 09:35:50

Servlet与SpringMVC内部实现的相关文章

Servlet、SpringMVC、Struts2对请求-响应模式实现

从整个B/S程序的运行结构来看,J2EE的表示层解决方案实际上是对"请求-响应"模式的一种实现.既然谓之"请求-响应"也就势必存在着两大沟通角色: 请求对象和响应对象.Servlet.SpringMVC.Struts2对请求-响应的实现是分别基于参数-参数模式.参数返回值.和POJO模式的,由于这两大角色的承载载体和编程语言实现基础都不同,因此三种模式的可谓风格迥异. 参数-参数模式 参数-返回值模式 POJO模式 请求方 方法参数 方法参数 属性变量 响应方 方法

Servlet、SPringMVC、Struts等防止表单重复提交的多种处理方法

第一种处理方法(非拦截器): 目前这种方法不建议,因为JSP规范不建议写JAVA代码.这种可以方便第二种处理方法的理解,第二种方法引入拦截器的思想,原理基本一样,模仿Struts的Token机制. 1.在需要防止重复的jsp中加入下面的java代码, <%@page import="java.util.Random"%> <%@page import="java.util.Set"%> <%@page import="java

Servlet、SPringMVC、Struts等防止表单反复提交的多种处理方法

第一种处理方法(非拦截器): 眼下这样的方法不建议,由于JSP规范不建议写JAVA代码.这样的能够方便另外一种处理方法的理解,另外一种方法引入拦截器的思想,原理基本一样,模仿Struts的Token机制. 1.在须要防止反复的jsp中添?以下的java代码, <%@page import="java.util.Random"%> <%@page import="java.util.Set"%> <%@page import="

文件上传(Servlet/Struts2/SpringMVC)

文件上传 Servlet实现 要实现文件上传的功能,必须在form的表单中的添加 enctype="multipart/form-data" 表示以二进制流的方式将文件传给控制器. 需要导入的jar包有:commons-fileupload-1.2.1.jar.commons-io-1.4.jar 文件上传的步骤: (1)创建DiskFileItemFactory的对象. (2)创建ServletFileUpload的对象,需传入DiskFileItemFactory的对象.可以获得封

Servlet和SpringMVC补课

1.web.xml加载顺序 http://mianhuaman.iteye.com/blog/1105522 关键点:ServletContext -> context-param -> listener -> filter -> servlet 2.beans xmlns http://www.w3school.com.cn/xml/xml_namespaces.asp 用于避免元素命名冲突.在Spring中应用极其广泛. 3.SpringMVC http://blog.jobb

模拟springmvc 内部登陆,跳过spring filter

说明,因为我们的一个项目B使用spring mvc配置的登陆框架,所以对登陆控制全部交给了spring,导致我们如果想通过另一个项目A登陆到项目B就不太容易,具体是项目A登陆了,我们通过一个连接直接跳转到项目B, 前提,项目A用户名密码和项目B的用户名密码必须是一样的 难点:1.项目A用密文登陆,即前端JS对密码加密后传递给后天,但是项目B是明文直接传递给spring框架 思路:我开始通过debug往spring的代码里面寻求突破点,但是找了好长时间,发现跳转太多,不好找.后来,仔细想想,spr

filter、servlet引用springmvc注解

概述:最近做的两个项目都用到了,所以想着把它整理起来方便以后用,不多说了,现在就将代码附上 我的活动平台filter: public class SysFilter implements javax.servlet.Filter { private IUserService userService; private IBasDao basDao; @Override//在其初始化的时候获取 public void init(FilterConfig filterConfig) throws Se

servlet模拟SpringMVC

1. web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns

登录实现之servlet和SpringMVC

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "PingFang SC" } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "PingFang SC"; min-height: 17.0px } span.s1 { font: 12.0px Helvetica } #知识小点: 防止乱码的字符集的设置: request.setCharacterEn