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

局机关建设网站的意义免费网站正能量软件

局机关建设网站的意义,免费网站正能量软件,创建一个网站需要怎么做,怎样给网站找空间做备案说明 本文基于 jdk 8, spring-framework 5.2.x 编写。author JellyfishMIX - github / blog.jellyfishmix.comLICENSE GPL-2.0 类层次 HandlerMethod#xff0c;处理器的方法的封装对象。HandlerMethod 只提供了处理器的方法的基本信息#xff0c;不提供调用逻辑。 Invoca…说明 本文基于 jdk 8, spring-framework 5.2.x 编写。author JellyfishMIX - github / blog.jellyfishmix.comLICENSE GPL-2.0 类层次 HandlerMethod处理器的方法的封装对象。HandlerMethod 只提供了处理器的方法的基本信息不提供调用逻辑。 InvocableHandlerMethod继承 HandlerMethod 类可调用的 HandlerMethod 实现类。 ServletInvocableHandlerMethod#invokeAndHandle 方法 org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod#invokeAndHandle 核心方法处理请求。 执行调用处理请求设置 responseStatus。如果 returnValue 为空设置 ModelAndViewContainer 为请求已处理然后 return和 ResponseStatus 注解相关。设置 ModelAndViewContainer 为请求未处理通过 HandlerMethodReturnValueHandlerComposite(HandlerMethodReturnValueHandler) 处理返回值。 public class ServletInvocableHandlerMethod extends InvocableHandlerMethod {Nullableprivate HandlerMethodReturnValueHandlerComposite returnValueHandlers;public void invokeAndHandle(ServletWebRequest webRequest, ModelAndViewContainer mavContainer,Object... providedArgs) throws Exception {// 执行调用处理请求Object returnValue invokeForRequest(webRequest, mavContainer, providedArgs);// 设置 responseStatussetResponseStatus(webRequest);// 如果 returnValue 为空设置 ModelAndViewContainer 为请求已处理然后 return和 ResponseStatus 注解相关if (returnValue null) {if (isRequestNotModified(webRequest) || getResponseStatus() ! null || mavContainer.isRequestHandled()) {disableContentCachingIfNecessary(webRequest);mavContainer.setRequestHandled(true);return;}}else if (StringUtils.hasText(getResponseStatusReason())) {mavContainer.setRequestHandled(true);return;}// 设置 ModelAndViewContainer 为请求未处理mavContainer.setRequestHandled(false);Assert.state(this.returnValueHandlers ! null, No return value handlers);try {// 通过 HandlerMethodReturnValueHandlerComposite(HandlerMethodReturnValueHandler) 处理返回值this.returnValueHandlers.handleReturnValue(returnValue, getReturnValueType(returnValue), mavContainer, webRequest);}catch (Exception ex) {if (logger.isTraceEnabled()) {logger.trace(formatErrorForReturnValue(returnValue), ex);}throw ex;}} }ServletInvocableHandlerMethod#setResponseStatus 方法 org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod#setResponseStatus 调用 setResponseStatus(ServletWebRequest webRequest) 设置响应的状态码。 获得 status和 ResponseStatus 注解相关。设置响应的状态码。有 reason则设置 status reason。无 reason仅设置 status。RedirectView 相关。 private void setResponseStatus(ServletWebRequest webRequest) throws IOException {// 获得 status和 ResponseStatus 注解相关HttpStatus status getResponseStatus();if (status null) {return;}// 设置响应的状态码HttpServletResponse response webRequest.getResponse();if (response ! null) {String reason getResponseStatusReason();// 有 reason则设置 status reasonif (StringUtils.hasText(reason)) {response.sendError(status.value(), reason);}else {// 无 reason仅设置 statusresponse.setStatus(status.value());}}// To be picked up by RedirectView// RedirectView 相关webRequest.getRequest().setAttribute(View.RESPONSE_STATUS_ATTRIBUTE, status);}InvocableHandlerMethod InvocableHandlerMethod#invokeForRequest 方法 – 执行调用处理请求 org.springframework.web.method.support.InvocableHandlerMethod#invokeForRequest 执行调用处理请求。 Nullablepublic Object invokeForRequest(NativeWebRequest request, Nullable ModelAndViewContainer mavContainer,Object... providedArgs) throws Exception {// 解析参数Object[] args getMethodArgumentValues(request, mavContainer, providedArgs);if (logger.isTraceEnabled()) {logger.trace(Arguments: Arrays.toString(args));}// 执行调用return doInvoke(args);}InvocableHandlerMethod#getMethodArgumentValues 方法 – 解析参数 org.springframework.web.method.support.InvocableHandlerMethod#getMethodArgumentValues 获得方法的参数。遍历方法参数将参数解析成对应的类型。 获得当前遍历的 MethodParameter 对象给它设置 parameterNameDiscoverer。从 providedArgs 中获得参数。如果获得到则进入下一个参数的解析默认情况 providedArgs 不会传参。判断 resolvers 是否支持当前的参数解析。执行参数解析解析成功后进入下一个参数的解析。 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 对象给它设置 parameterNameDiscovererMethodParameter parameter parameters[i];parameter.initParameterNameDiscovery(this.parameterNameDiscoverer);// 从 providedArgs 中获得参数。如果获得到则进入下一个参数的解析默认情况 providedArgs 不会传参。args[i] findProvidedArgument(parameter, providedArgs);if (args[i] ! null) {continue;}// 判断 resolvers 是否支持当前的参数解析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;}InvocableHandlerMethod#doInvoke 方法 org.springframework.web.method.support.InvocableHandlerMethod#doInvoke 设置方法为可访问。通过反射执行方法调用。BridgedMethod 基于泛型安全为了和 jdk 1.5 之前的字节码兼容无需关注 BridgedMethod。 Nullableprotected Object doInvoke(Object... args) throws Exception {// 设置方法为可访问ReflectionUtils.makeAccessible(getBridgedMethod());try {// 通过反射执行方法调用。BridgedMethod 基于泛型安全为了和 jdk 1.5 之前的字节码兼容无需关注 BridgedMethodreturn getBridgedMethod().invoke(getBean(), args);}catch (IllegalArgumentException ex) {assertTargetBean(getBridgedMethod(), getBean(), args);String text (ex.getMessage() ! null ? ex.getMessage() : Illegal argument);throw new IllegalStateException(formatInvokeError(text, args), ex);}catch (InvocationTargetException ex) {// Unwrap for HandlerExceptionResolvers ...Throwable targetException ex.getTargetException();if (targetException instanceof RuntimeException) {throw (RuntimeException) targetException;}else if (targetException instanceof Error) {throw (Error) targetException;}else if (targetException instanceof Exception) {throw (Exception) targetException;}else {throw new IllegalStateException(formatInvokeError(Invocation failure, args), targetException);}}}后言 本文可以看到很重要的两个组件 HandlerMethodArgumentResolver 用于获取请求参数HandlerMethodReturnValueHandler 用于处理返回值后续分析。
http://www.dnsts.com.cn/news/162955.html

相关文章:

  • 宜州做网站华为手机WordPress
  • 网站logo设计思路html自学
  • 网站备案期间 搜索引擎制作网页的流程
  • 网站建设cach目录西安做网站微信公司哪家好
  • 网页设计和网站建设的课程设计生成二维码的网站
  • 网站SEO建设摘要忻州做网站
  • 零配件加工东莞网站建设技术支持仲恺住房和城乡建设局网站
  • 自建网站成都网上商城是什么
  • 网站建设加班网站建设分金手指专业七
  • 宁夏网站设计公司centos yum wordpress
  • 大庆网站优化浙江省建设监理协会官方网站
  • 南昌营销网站公司网站建设服务方案ppt模板
  • 自助建站网站建设网站点击按钮回到页面顶部怎么做
  • 百度站长网站提交产品工业设计网站
  • 做汽车脚垫版的网站网站设计与制作说明
  • 大连网站建站企业做网站建设遇到的问题
  • 中国人做外贸网站都卖什么手续应用公园怎样收费
  • 速成美站做美工要开通什么网站的会员呢
  • 蚌埠网站优化制作公司wordpress一键变灰色
  • 网站开发的功能需求文档模板北京最好的网站建设
  • 河南网站建设品牌网络搭建结构图
  • 可拖动网站知乎问答网站开发教程
  • 建设网站深圳罗湖医疗网站制作
  • 廊坊自助建站模板徐州软件外包
  • 有关网站建设的文章句子自建企业网站
  • 网站建设维护一年费用商城开发价格
  • 30天网站建设 视频教程网站建设规划书结构
  • 网站服务设计wordpress卖东西
  • 网站建设中目录是什么意思wordpress is_login
  • 制作网站比较大的几家公司免费建站的手机app