springMVC流程笔记
来源:互联网 发布:什么样的大数据才有用 编辑:程序博客网 时间:2024/05/14 21:05
springMVC流程
***.do->handlerMapping(如果没有配置handlerMapping,则默认选择BeanNameUrlHandlerMapping.)->(HandlerAdapter调用)选择相应的Controller(如果为MultiAction则调用相应的MethodNameResolver)->返回ModelAndView/String/Map->ViewResolver解析返回视图View
handlerMapping->View细节:
当一个请求到来后(***.fuiou),首先DispatcherServlet调用checkMultipart(request),若有文件上传则转换成MultipartRequest,选 取优先级高的handerMapping(一般为simpleUrlHandlerMapping)调用HandlerMapping.getHandler(request)方法返回HandlerExecutionChain对象(HandlerExecutionChain包含了处理器handler和拦截器HandlerInterceptor),在HandlerExecutionChain中调用getHandler方法选取此控制器链中的handler(Controller),然后 在DispatcherServlet中调用handlerAdapters集合,通过getHandlerAdapter(Object handler)方法找个第一个support()返回true的adapter并返回此adapter作为此次请求的适配处理器,在适配器adapter处理之前调用mappedHandler.getInterceptors()方法获取所有拦截器HandlerInterceptor并前置处理preHandle此次请求,(若某一拦截器返回false,则调用所有在这拦截器之前的拦截器的afterComplete方法进行完成处理后返回,不做后续处理),此适配处理器调用handle方法处理此次请求(实际上是调用handler的处理方法处理此次请求)并返回ModelAndView供ViewResolver处理,返回ModelAndView后调用(逆序调用)拦截器HandlerInteceptor的postHandle(此方法无返回值,用户不可以自定义此方法中断此次请求),若在处理过程中抛出了ModelAndViewDefiningException异常,则使用此异常解析出的ModelAndView来做接下来的视图解析处理,若为其它异常则调用用户定义的HandlerExceptionResolver解析器解析异常并返回指定ModelAndView来做接下来的视图解析处理,ViewResolver处理此ModelAndView并返回相应的View对象,之后View类通过render()方法(对于AbstractUrlBasedView的子类只要实现renderMergedOutputModel方法并在此方法中处理并返回相应显示层即可)返回相应的显示层(JSP,XLS,字符串等),之后调用所以拦截器的AfterCompletion方法(此方法始终被执行)做最后完成处理,并在最后调用cleanupMultipart清除掉上传的文件信息.
dispatcher web.xml配置
<servlet>
<servlet-name> dispatcher</servlet-name >
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name> contextConfigLocation</param-name >
<param-value>
/WEB-INF/ config/dispatcher-servlet.xml,
/WEB-INF/ config/dispatchers-servlet.xml
//定义多个xml载入文件
</param-value>
</init-param>
<load-on-startup> 1</ load-on-startup>
<servlet>
handlerMapping
beanNameUrlHandlerMapping->beanName和请求路径匹配,如<bean id/name="/index.do" class=''/>
SimpleUrlHandlerMapping
有两种配置方法
urlMap和mappings
</property>
<property name="mappings" >
<value>
a.fuiou=beanName
b.fuiou=beanName2
*=beanName3
</value>
<props>
<prop key="urlName" >beanName</prop>
</props>
</property>
<property name="urlMap" >
<map>
<entry key="urlName" >
<bean class="beanName" ></bean>
</entry>
</map>
两种配置方法可同时配置
if (!url.startsWith("/" )) {
url = "/" + url;
}
MethodNameResolver
方法映射器,一般用ParameterMethodNameResolver,默认名称为action,
策略1 < property name ="paramName" value ="action"/>//指定方法映射名
策略2 <property name="defaultMethodName" value="list"/> //指定默认方法处理名
<property name="methodParamNames" value="list,update,delete" />//指定处理方法名
如果策略1,2同时启用,则优先选择策略2.
Controller
AbstractController 实现handleRequestInternal处理逻辑
MultiActionController
ModelAndView addUpsTerm(HttpServletRequest request, HttpServletResponse response,HttpSession
session,MchntAddInf termAddInf)
这样就能直接绑定对象和session.
返回String,return "index";直接返回视图没有模型数据
返回Map,只有模型数据,视图由RequestToViewNameTranslator解析返回
MultiActionController默认的MethodNameResolver为InternalPathMethodNameResolver();
/**/*controller/login.do 会去找login方法.
PropertiesMethodNameResolver(同SimpleUrlHandlerMapping)
PropertyEditorRegistrySupport查看属性转换关系
ViewResolver 视图解析器
InternalResourceViewResolver->UrlBasedViewResolver->AbstractCachingViewResolver->ViewResolver
可以定义多个视图解析器/按order顺序查找->forward或include,redirect到JSP(在render方法中转向)
JstlView比InternalResourceView多一个国际化支持(messageSource)
excel的ContentType:application/vnd.ms-excel
RedirectView v=new RedirectView();mv.setView(v);redirect方式重定向页面
// 或者可以ModelAndView=new ModelAndView("redirect:jspName");
MultipartResolver 文件上传解析器
CommonsMultipartResolver和
HttpServletRequest被转换成MultipartHttpServletRequest->
MultipartFile 得到MultipartFile(enctype="multipart/form-data")transferTo只能调用一次
MultipartFile能直接赋给bean,而Byte[]则需要注册自定义解析
binder.registerCustomEditor(Byte[]. class, new ByteArrayMultipartFileEditor());
//如果是文本格式文件可以注册StringMultipartFileEditor
binder.registerCustomEditor(String.class, new StringMultipartFileEditor());
HandlerInteceptor
HandlerInterceptorAdapter实现HandlerInteceptor,只需实现一个处理方法即可,用户直接继承自adapter即可
throw new ModelAndViewDefiningException(new ModelAndView(viewName));//抛出此异常会跳转到指定错误页面
HandlerExceptionResolver 异常解析器
- springMVC流程笔记
- (学习笔记)SpringMVC工作流程
- SpringMVC 学习笔记(十一) SpirngMVC运行流程
- SpringMVC主要流程概述(学习笔记)
- springmvc学习笔记(31)——springmvc运行流程
- SpringMVC框架笔记整理(一): SpringMVC详细运行流程
- SpringMvc学习笔记(二)- SpringMvc的执行流程
- springmvc流程
- springMVC 流程
- springMVC流程
- springMVC流程
- SpringMVC流程
- java学习笔记(二)springMVC +mybatis 取数据流程
- 跟踪源码运行流程---SpringMVC学习笔记(四)
- springmvc入门笔记一:运行流程以及简单Hello World
- SpringMVC学习笔记(一):mvc流程和思路
- 跟踪源码运行流程---SpringMVC学习笔记(四)
- SpringMVC笔记(一)——请求流程
- 序列化浅谈
- Android系统架构
- clock计时器的使用和随机数的产生
- HDOJ 胜利大逃亡
- java与C#区别整理
- springMVC流程笔记
- PostgreSQL的“孔雀开屏”式程序架构
- Memcached Java Client API详解
- 争用、 较差的性能和死锁时使 ASP.NET 应用程序的 Web 服务请求
- 在 Tomcat 中部署 Java Web 程序 ( jar cvf *.war */. ) war 包
- ES PES TS流的区别
- 页面分页组件开发经验介绍
- memcached协议
- unknown opcode,ARM汇编错误