我们好,我是Java大蛞蝓,两个渴求在网络金融行业努力做到很牛的蛞蝓。

可柔可刚,点赞则柔,白嫖则刚!圣索弗勒维孔特~~~看完提过给我来个三连哦!

自动草稿

该文产品目录

重新认识SpringMVCSpringMVC 处置允诺操作过程Servlet 与 SpringMVCStructs2 与 Spring MVCSpringMVC源代码预测

重新认识SpringMVC

SpringMVC 架构是以允诺为驱动力,紧紧围绕 Servlet 结构设计,将允诺发送给驱动力器,接着透过数学模型第一类,调迁器来展现允诺结论快照。当中核心理念类是 DispatcherServlet,它是两个 Servlet,第二层是同时实现的ServletUSB。

自动草稿

SpringMVC 处置允诺操作过程

自动草稿

应用程序发动允诺,会具体来说历经后端驱动力器 DispatcherServlet 展开转贴,转贴到 Handler MappingDispatcherServlet 从 Handler Mapping 搜寻处置允诺的 Controller,Handler Mapping 促进作用是顺利完成 URL 到 Controller 的态射Controller 处置允诺并回到 ModelAndView 第一类,ModelAndView 是PCB结论快照的模块再将快照结论回到给应用程序

Servlet 与 SpringMVC

SpringMVC 是在 Servlet 的此基础上展开了扩充,看一看她们的承继亲密关系是怎样的。

Servlet 承继亲密关系

自动草稿

SpringMVC 承继亲密关系

自动草稿

Servlet 与 SpringMVC 对比

Servlet 需要每个允诺都在 web.xml 文件中配置两个 sevlet 节点SpringMVC 的 DispatcherServlet 会拦截所有允诺,让 Controller 去处置

Structs2 与 Spring MVC

相同点

都是基于MVC数学模型的

不同点

Structs2 是基于类的,两个 request 创建两个 action,两个action 对应两个 request ;Servlet 是基于方法的,也是两个 request 对应两个方法Structs2 入口是 Filter;SpringMVC 入口是 ServletSpringMVC 的开发速度和性能优于 Structs2 ,流程更易理解SpringMVC 和 Spring 是无缝的,可以认为 SpringMVC 是100% 零配置

SpringMVC源代码预测

1、ApplicationContext 初始化时建立所有的URL和Controller 的对应亲密关系

/**
* 建立当前ApplicationContext中的所有controller和url的对应亲密关系
*/
protectedvoiddetectHandlers() throws BeansException {//日志级别是否是 Debugif(logger.isDebugEnabled()) {//应用上下文是工程的访问路径logger.debug(“Looking for URL mappings in application context: “ getApplicationContext());
}// 获取ApplicationContext容器中所有bean的Name—ControllerString[] beanNames = (this.detectHandlersInAncestorContexts ?
BeanFactoryUtils.beanNamesForTypeIncludingAncestors(getApplicationContext(),Object.class) :
getApplicationContext().getBeanNamesForType(Object.class));// 遍历beanNames,并找到这些bean对应的urlfor(StringbeanName : beanNames) {// 获取Controller上的所有url(类上的url 方法上的url)String[] urls = determineUrlsForHandler(beanName);if(!ObjectUtils.isEmpty(urls)) {// 保存urls和beanName的对应亲密关系,put it to Map,该方法在父类AbstractUrlHandlerMapping中同时实现registerHandler(urls, beanName);
}else{if(logger.isDebugEnabled()) {
logger.debug(“Rejected bean name “ beanName “: no URL paths identified”);
}
}
}
}1234567891011121314151617181920212223242526272829

2、根据访问URL找到对应 Controller 中处置允诺的方法

/** 中央驱动力器,控制允诺的转贴 **/protectedvoiddoDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception{
HttpServletRequest processedRequest = request;
HandlerExecutionChain mappedHandler =null;intinterceptorIndex =-1;try{
ModelAndView mv;
boolean errorView =false;try{// 1.检查是否是文件上传的允诺processedRequest = checkMultipart(request);// 2.取得处置当前允诺的controller,这里也称为hanlder,处置器,第两个步骤的意义就在这里体现了.这里并不是直接回到controller,而是回到的HandlerExecutionChain允诺处置器链第一类,该第一类PCB了handler和interceptors.
mappedHandler = getHandler(processedRequest,false);// 如果handler为空,则回到404if(mappedHandler ==null|| mappedHandler.getHandler() ==null) {
noHandlerFound(processedRequest, response);return;
}//3. 获取处置request的处置器适配器handler adapterHandlerAdapter ha = getHandlerAdapter(mappedHandler.getHandler());// 处置 last-modified 允诺头String method = request.getMethod();
boolean isGet =“GET”.equals(method);if(isGet ||“HEAD”.equals(method)) {longlastModified = ha.getLastModified(request, mappedHandler.getHandler());if(logger.isDebugEnabled()) {
String requestUri = urlPathHelper.getRequestUri(request);
logger.debug(“Last-Modified value for [“ requestUri “] is: “ lastModified);
}if(newServletWebRequest(request, response).checkNotModified(lastModified)

1.本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2.分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3.不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4.本站提供的源码、模板、插件等其他资源,都不包含技术服务请大家谅解!
5.如有链接无法下载或失效,请联系管理员处理!
6.本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!