Spring MVC 源码解析时序图
- 格式:pdf
- 大小:590.06 KB
- 文档页数:1


spring MVC原理及配置springmvc原理及配置springmvc原理及配置1.springmvc详述:springmvc就是spring提供更多的一个强悍而有效率的web框架。
借助注释,springmvc提供更多了几乎就是pojo的研发模式,使控制器的研发和测试更加直观。
这些控制器通常不轻易处置命令,而是将其委托给spring上下文中的其他bean,通过spring的倚赖转化成功能,这些bean被转化成至控制器中。
springmvc主要由dispatcherservlet、处理器映射、处理器(控制器)、视图解析器、视图组成。
他的两个核心是两个核心:处理器映射:选择使用哪个控制器来处理请求视图解析器:选择结果应该如何渲染通过以上两点,springmvc确保了如何挑选掌控处置命令和如何挑选视图展现出输入之间的松耦合。
2.springmvc运行原理这里写图片描述(2)找寻处理器:由dispatcherservlet控制器查阅一个或多个handlermapping,找出处置命令的controller。
(3)调用处理器:dispatcherservlet将请求提交到controller。
(4)(5)调用业务处置和回到结果:controller调用业务逻辑处置后,回到modelandview。
3.springmvc接口解释(1)dispatcherservlet接口:spring提供的前端控制器,所有的请求都有经过它来统一分发。
在dispatcherservlet将请求分发给springcontroller 之前,需要借助于spring提供的handlermapping定位到具体的controller。
(2)handlermappingUSB:能够完成客户请求到controller映射。
(3)controller接口:须要为mammalian用户处置上述命令,因此同时实现controllerUSB时,必须确保线程安全并且可以器重。
UML中的时序图详解时序图是UML(统一建模语言)中的一种重要图形工具,用于描述系统中对象之间的交互行为。
它以时间为轴,展示了对象之间的消息传递和交互顺序,帮助开发人员更好地理解系统的运行过程。
本文将详细介绍时序图的概念、元素和使用方法。
一、时序图的概念和作用时序图是一种静态图,主要用于描述对象之间的交互行为和消息传递顺序。
它展示了对象在特定时间段内的状态变化和交互过程,帮助开发人员更好地理解系统中对象之间的关系和通信方式。
时序图可以用于系统设计、软件开发和系统测试等阶段,是一种非常有用的工具。
二、时序图的元素和表示方法1. 对象(Object):时序图中的对象表示系统中的实体,可以是具体的类、接口或模块等。
对象通常用矩形框表示,框内写上对象的名称。
2. 生命周期(Lifeline):时序图中的生命周期表示对象的存在时间,用一条垂直的虚线表示。
生命周期从对象的创建开始,到对象的销毁结束。
3. 消息(Message):时序图中的消息表示对象之间的交互行为,包括方法调用、信号发送等。
消息可以是同步的(Synchronous)或异步的(Asynchronous),同步消息需要等待接收方的响应,而异步消息则不需要等待。
4. 激活(Activation):时序图中的激活表示对象在某个时间段内正在执行的过程,用一条垂直的虚线和一个小矩形框表示。
激活可以嵌套,表示方法的调用和返回过程。
5. 约束(Constraint):时序图中的约束表示对象之间的一些限制条件或约束,如时间限制、数据格式等。
约束通常用方括号括起来,并写在相应的消息上方。
三、时序图的使用方法1. 确定参与对象:首先要确定参与时序图的对象,包括系统的各个模块、类或接口等。
根据系统的需求和功能,选择合适的对象进行建模。
2. 绘制生命周期:根据对象的创建和销毁过程,绘制对象的生命周期。
生命周期用一条垂直的虚线表示,标记对象的创建和销毁时间点。
3. 描述交互过程:根据系统的交互需求,描述对象之间的消息传递和交互顺序。
处理SpringMVC的时间错误:FielderrorinobjectsysDatumed。
错误:⼗⼀⽉ 27, 2017 8:26:11 下午 org.apache.catalina.core.StandardWrapperValve invoke严重: Servlet.service() for servlet [springMvc] in context with path [/PrintingSystem] threw exception [Request processing failed; nested exception is org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBind Field error in object 'sysDatumedetai' on field 'storagetime': rejected value [2017-11-27]; codes [typeMismatch.sysDatumedetai.storagetime,typeMismatch.storagetime,typeMismatch.java.util.Date,typeMismatch]; arguments [org.springframework. org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errorsField error in object 'sysDatumedetai' on field 'storagetime': rejected value [2017-11-27]; codes [typeMismatch.sysDatumedetai.storagetime,typeMismatch.storagetime,typeMismatch.java.util.Date,typeMismatch]; arguments [org.springframework. at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument(ModelAttributeMethodProcessor.java:111)at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:75)at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:156)at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:117)at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:96)at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:617)at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:578)at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923)at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778)at javax.servlet.http.HttpServlet.service(HttpServlet.java:620)at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)at .AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2441)at .AprEndpoint$SocketProcessor.run(AprEndpoint.java:2430)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)at ng.Thread.run(Thread.java:745)因为菜鸟所以这个问题弄了挺久的,这个是时间的问题。
SpringMVC+GSON对象序列化--⽇期格式的处理Gson异常强⼤因此使⽤它代替了Jackson作为SpringMVC消息转换器。
在⾃⼰的项⽬中,发现对象在序列化后,⽇期格式出现了问题。
先看问题在员⼯表中有⼀列是⽣⽇,字段类型为Date,也就是只存储到年⽉⽇,不带⼩时分秒,见下图数据库中的数据前台列表向后台请求数据,然后在页⾯显⽰,可以看到,⽇期后⾯带有了⼩时分秒,⽽对于⽣⽇来说,这是没有意义的。
见下图问题出现在哪?问题就出现在了 spring 的 message-converters 上,在我的项⽬中,配置的类型转换器为 google的 gson。
可以看到全局配置为“yyyy-MM-dd HH:mm:ss:SSS” ,这是带有⼩时分秒的。
所以当请求返回给浏览器的时候,spring会利⽤Gson将对象序列化输出到前端,按照配置的规则,就会带有⼩时分秒了。
具体见下⾯的代码:<!--开启 spring-mvc注解--><mvc:annotation-driven><!--设置JSON转换器为Gson--><mvc:message-converters register-defaults="true"><bean class="org.springframework.http.converter.StringHttpMessageConverter"><property name="supportedMediaTypes"><list><value>text/plain;charset=UTF-8</value><value>text/html;charset=UTF-8</value></list></property></bean><bean class="org.springframework.http.converter.json.GsonHttpMessageConverter"><property name="supportedMediaTypes"><list><value>text/plain;charset=UTF-8</value><value>application/json;charset=UTF-8</value></list></property><property name="gson"><bean class="org.springframework.http.converter.json.GsonFactoryBean"><property name="serializeNulls" value="true"/><property name="disableHtmlEscaping" value="true"/><property name="dateFormatPattern" value="yyyy-MM-dd HH:mm:ss:SSS"/></bean></property></bean></mvc:message-converters></mvc:annotation-driven>如何解决呢?两种办法:1、修改全局设置,将上述的配置修改yyyy-MM-dd。