当前位置: 首页 > news >正文

做阿里巴巴企业网站frontpage2007网站建设

做阿里巴巴企业网站,frontpage2007网站建设,室内设计师测评网,如何做房地产网站注解相关 AliasFor#xff1a;.在同个注解中为同一个功能定义两个名称不一样的属性#xff0c;那么这两个属性彼此互为别名 RequestMapping注解里面的代码 AliasFor(path)String[] value() default {};AliasFor(value)String[] path() default {};G…注解相关 AliasFor.在同个注解中为同一个功能定义两个名称不一样的属性那么这两个属性彼此互为别名 RequestMapping注解里面的代码 AliasFor(path)String[] value() default {};AliasFor(value)String[] path() default {}; GetMapping PostMapping DeleteMapping等都是RequestMapping修饰 RequestMapping(method RequestMethod.GET) public interface GetMapping {} MVC处理流程 一springmvc请求方式的选择 如果是用的表单提交 不能支持delete那些方式 需要开启一下过滤器。但是现在前后端分离 直接就可以发delete那些方式。 在WebMvcAutoConfiguration中 配置了一个命令隐藏方法过滤器 一直进去可以看见这里默认的参数是_method 回到WebMvcAutoConfiguration中 我们看见 如果默认过滤器是false 未开启 我们去配置文件中开启 配置 spring:mvc:hiddenmethod:filter:enabled: true 前端form action/test methodpostinput typehidden name_method valueDELETEinput typesubmit value提交 /form 后端ResponseBodyRequestMapping(value /test, method RequestMethod.DELETE)public String getTest(){return DELETE;} 结果就是成功请求到 如果没有开启 就会失败现在我们来看一下请求过程 请求进来 判断是不是post请求 并且是否正常如果是就进入if里面 进来后获取到this.methodParam里面的值 点进去发现就是_method 所以 这里就是获取我们过程名字为_method的input标签里面的值 拿到以后会判断这个值是不是正常 正常的话就变成大写所有我们前端大写小写都可以 然后去判断ALLOWED_METHODS里面是不是包含这个值 如果包含就new一个HttpMethodRequestWrapper返回 HttpMethodRequestWrapper就是重写了ServletRequest进行了包装这里可以看见mvc支持这些请求 特别注意 因为表单只能发post和get 所有才会进入if里面 如果是客户端工具 直接发送delete就不用进去 直接就用的requestToUse 自定义_method 这里给了我们方法 我们只需要修改一下 给他注入到容器里面就可以了。 Configuration(proxyBeanMethods false)//Configuration(proxyBeanMethods false)提高Spring启动速度 public class WebConfig {Beanpublic HiddenHttpMethodFilter hiddenHttpMethodFilter(){HiddenHttpMethodFilter hiddenHttpMethodFilter1 new HiddenHttpMethodFilter();hiddenHttpMethodFilter1.setMethodParam(_myMethod);return hiddenHttpMethodFilter1;} }二请求映射原理 所有请求都会来到中央处理器DispatcherServlet 我们去里面找到doGet和doPost在FrameworkServlet中 我们找到了 再doGet里面processRequest再调用他本类里面的doService方法处理rqquest和response这里的doService是一个抽象方法 并没有实现 所有一定在子类里面实现。 在中央处理器DispatcherServlet里面 doService被实现了 经过一系列的初始化过程 doService里面 调用了doDispatch(request, response);每个请求进来都会调用doDispatch方法 这才是我们要研究的方法。 综上所述经过系列的辗转反侧 我们终于找到了最终处理request, response的方法 就是doDispatch 我们继续研究doDispatch方法 请求过来以后 会把请求包装一下然后判断是不是文件上传multipartRequestParsed请求 默认是false. WebAsyncManager asyncManager WebAsyncUtils.getAsyncManager(request); 判断是不是异步 是的话就使用一个异步管理器。再往下走 走到核心这里 这就是找到映射地址的关键 这里调用本类的一个getHandler方法 在这个方法里面找到映射地址 进入这个方法 我们看见这里是一个for循环的方式来找寻找。 这里的handermappers一共有5个 我们需要的就是第一个 在这里面我们找到了所有的映射地址 包括系统给我们写的 当然 也有这次要找的。 在这里面就可以找到这个映射地址的方法叫getTest 在helloController这个类里面 在for循环的Mapping.getHander()方法里面 调用了一个方法在这个方法里面找到最终的结果 我们一直往下运行 找到RequestMappingInfoHandlerMapping类 这里面有一个方法处理了request请求 进入这个方法 我们看见这里面找到了路径 但是路径可能相同 但是请求方式不同这里把路径和requst再进行处理 我们发现这里相同的路径找到了两个请求 然后又把这两个结果放到一个方法里面去找最佳匹配 经过这里的循环 就找到了最终的结果 三参数解析原理 走到了这一步 接着上面的 拿到具体的方法以后 我们就要去到一个适配器 进去后发现 这里有4个处理器适配器 支持RequestMapping我们的controller都是这个支持函数式编程 这里返回的就是RequestMappingHandlerAdapter 返回以后中央处理器我们继续往下走 我们会走到一个核心方法Actually invoke the handler.实际调用处理程序。 进入这个方法 我们会走到RequestMappingHandlerAdapter 这里做一些真正的处理 在这里执行目标方法 在这个方法里面有一个参数解析器 参数解析器里面有这些这里确定我们将要执行的目标方法的每一个参数的值是什么。我们平时写的RequestParam就在这里第一个处理的。 这里还有返回值处理器 继续往下处理请求的一个方法就在这里 进去这个方法里面 就会来到我们的controller 真真真执行目标方法ServletInvocableHandlerMethod类里面。 这里面再进去 会到InvocableHandlerMethod 这里面获取参数的值代码如下 protected Object[] getMethodArgumentValues(NativeWebRequest request, Nullable ModelAndViewContainer mavContainer,Object... providedArgs) throws Exception {MethodParameter[] parameters getMethodParameters();if (ObjectUtils.isEmpty(parameters)) {return EMPTY_ARGS;}Object[] args new Object[parameters.length];for (int i 0; i parameters.length; i) {MethodParameter parameter parameters[i];parameter.initParameterNameDiscovery(this.parameterNameDiscoverer);args[i] findProvidedArgument(parameter, providedArgs);if (args[i] ! null) {continue;}if (!this.resolvers.supportsParameter(parameter)) {throw new IllegalStateException(formatArgumentError(parameter, No suitable resolver));}try {args[i] this.resolvers.resolveArgument(parameter, mavContainer, request, this.dataBinderFactory);}catch (Exception ex) {// Leave stack trace for later, exception may actually be resolved and handled...if (logger.isDebugEnabled()) {String exMsg ex.getMessage();if (exMsg ! null !exMsg.contains(parameter.getExecutable().toGenericString())) {logger.debug(formatArgumentError(parameter, exMsg));}}throw ex;}}return args;}总结 请求进来以后会先去走过滤器拿到它是哪一种请求方式 拿到以后走service方法去走一个请求转发通过if else找到请求方式 去调用doGet, doPost等方法。 然后就是上面的去寻找具体方法。
http://www.yutouwan.com/news/167266/

相关文章:

  • 网站建设好评公司全国建设项目竣工验收公示网站
  • 八宿县网站seo优化排名下载软件应用
  • 太原市住房和城乡建设局的网站首页中国互联网协会调解中心
  • 建设网站需要准备哪些内容百度风云榜游戏
  • 做ic芯片的要去哪个网站做网站用需要几个软件
  • 哪里有做空包网站的峰峰网站建设
  • 大型网站建设托管服务建设公司哪家好
  • 网站建设要域名和什么网站策划书预期风险
  • 网站开发的平台网站建设费的会计分录
  • 东莞网站建设(信科分公司)wordpress主题首页显示不全
  • 网站建设法律可行性网页链接中的文件路径分为
  • 在小说网站做责编创建wordpress主题
  • sqlite3做网站数据库东莞网站建设团队全网天下
  • 网页新建站点食品电子商务网站建设规划书
  • 江苏连云港网站设计公司cordova wordpress
  • 功能型类的网站品牌建设ppt
  • 大连响应式网站建设网站建设先进
  • 湖北省建设工程信息网seo薪资
  • html5 网站 优势怎么做网页设计原型
  • 网站链接建设及引流营销简单网页制作视频教程
  • 公司注册网上核名网站华美天一建筑公司网站
  • 企业网站建设哪家快石家庄造价信息网
  • 定制网站成本多少做一个国外网站
  • 网站排行首页怎么做做优化需要发多少个网站
  • php网站开发课程阿里云网站怎么建设
  • 外国网站打开很慢网站宣传的方式
  • 建筑网格化国内seo排名分析主要针对百度
  • 专业做网站的软件食品品牌推广方案
  • 阿里云做的网站怎么备份有什么平台做网站比较好
  • wordpress 网站收录wordpress用qq注册