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

网站建设合作协议文本wordpress页面编辑插件

网站建设合作协议文本,wordpress页面编辑插件,网页小游戏手机版,wordpress怎样发询盘注解配置SpringMVC 使用配置类和注解代替web.xml和SpringMVC配置文件的功能 创建初始化类#xff0c;代替web.xml 在Servlet3.0环境中#xff0c;容器会在类路径中查找实现javax.servlet.ServletContainerInitializer接口的类#xff0c; 如果找到的话就用它来配置Servle…注解配置SpringMVC 使用配置类和注解代替web.xml和SpringMVC配置文件的功能 创建初始化类代替web.xml 在Servlet3.0环境中容器会在类路径中查找实现javax.servlet.ServletContainerInitializer接口的类 如果找到的话就用它来配置Servlet容器。 Spring提供了这个接口的实现名为 SpringServletContainerInitializer这个类反过来又会查找实现WebApplicationInitializer的类并将配 置的任务交给它们来完成。Spring3.2引入了一个便利的WebApplicationInitializer基础实现名为 AbstractAnnotationConfigDispatcherServletInitializer当我们的类扩展了 AbstractAnnotationConfigDispatcherServletInitializer并将其部署到Servlet3.0容器的时候容器会自 动发现它并用它来配置Servlet上下文。 public class WebInit extends AbstractAnnotationConfigDispatcherServletInitializer { /** * 指定spring的配置类 * return */ Overrideprotected Class?[] getRootConfigClasses() {return new Class[]{SpringConfig.class}; } /** * 指定SpringMVC的配置类 * return */ Overrideprotected Class?[] getServletConfigClasses() {return new Class[]{WebConfig.class}; } /** * 指定DispatcherServlet的映射规则即url-pattern * return */ Overrideprotected String[] getServletMappings() {return new String[]{/}; } /** * 添加过滤器 * return */ Overrideprotected Filter[] getServletFilters() {CharacterEncodingFilter encodingFilter new CharacterEncodingFilter();encodingFilter.setEncoding(UTF-8);encodingFilter.setForceRequestEncoding(true);HiddenHttpMethodFilter hiddenHttpMethodFilter new HiddenHttpMethodFilter();return new Filter[]{encodingFilter, hiddenHttpMethodFilter}; } }创建SpringConfig配置类代替spring的配置文件 Configuration public class SpringConfig { //ssm整合之后spring的配置信息写在此类中 } 创建WebConfig配置类代替SpringMVC的配置文件 Configuration //扫描组件 ComponentScan(com.atguigu.mvc.controller) //开启MVC注解驱动 EnableWebMvc public class WebConfig implements WebMvcConfigurer { //使用默认的servlet处理静态资源 Override public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {configurer.enable(); } //配置文件上传解析器 Bean public CommonsMultipartResolver multipartResolver(){return new CommonsMultipartResolver();} //配置拦截器 Override public void addInterceptors(InterceptorRegistry registry) {FirstInterceptor firstInterceptor new FirstInterceptor();registry.addInterceptor(firstInterceptor).addPathPatterns(/**);} //配置视图控制/*Overridepublic void addViewControllers(ViewControllerRegistry registry) {registry.addViewController(/).setViewName(index);}*/ //配置异常映射 /*Override public void configureHandlerExceptionResolvers(ListHandlerExceptionResolver resolvers) {SimpleMappingExceptionResolver exceptionResolver new SimpleMappingExceptionResolver(); Properties prop new Properties(); prop.setProperty(java.lang.ArithmeticException, error); //设置异常映射 exceptionResolver.setExceptionMappings(prop); //设置共享异常信息的键 exceptionResolver.setExceptionAttribute(ex); resolvers.add(exceptionResolver); }*/ //配置生成模板解析器 Bean public ITemplateResolver templateResolver() {WebApplicationContext webApplicationContext ContextLoader.getCurrentWebApplicationContext(); // ServletContextTemplateResolver需要一个ServletContext作为构造参数可通过 WebApplicationContext 的方法获得ServletContextTemplateResolver templateResolver new ServletContextTemplateResolver(webApplicationContext.getServletContext());templateResolver.setPrefix(/WEB-INF/templates/);templateResolver.setSuffix(.html);templateResolver.setCharacterEncoding(UTF-8);templateResolver.setTemplateMode(TemplateMode.HTML);return templateResolver; } //生成模板引擎并为模板引擎注入模板解析器 Bean public SpringTemplateEngine templateEngine(ITemplateResolver templateResolver) {SpringTemplateEngine templateEngine new SpringTemplateEngine();templateEngine.setTemplateResolver(templateResolver);return templateEngine; } //生成视图解析器并未解析器注入模板引擎 Bean public ViewResolver viewResolver(SpringTemplateEngine templateEngine) {ThymeleafViewResolver viewResolver new ThymeleafViewResolver();viewResolver.setCharacterEncoding(UTF-8);viewResolver.setTemplateEngine(templateEngine);return viewResolver; } }测试功能 RequestMapping(/) public String index(){return index; }SpringMVC执行流程 SpringMVC常用组件 DispatcherServlet:前端控制器不需要工程师开发由框架提供 作用:统一处理请求和响应整个流程控制的中心由它调用其它组件处理用户的请求HandlerMapping:处理器映射器不需要工程师开发由框架提供 作用:根据请求的url、method等信息查找Handler即控制器方法Handler:处理器需要工程师开发 作用:在DispatcherServlet的控制下Handler对具体的用户请求进行处理HandlerAdapter:处理器适配器不需要工程师开发由框架提供 作用:通过HandlerAdapter对处理器(控制器方法)进行执行ViewResolver:视图解析器不需要工程师开发由框架提供 作用:进行视图解析得到相应的视图例如:ThymeleafView、InternalResourceView、 RedirectViewView:视图 作用:将模型数据通过页面展示给用户 DispatcherServlet初始化过程 DispatcherServlet 本质上是一个 Servlet所以天然的遵循 Servlet 的生命周期。所以宏观上是 Servlet 生命周期来进行调度。 初始化WebApplicationContext 所在类:org.springframework.web.servlet.FrameworkServlet protected WebApplicationContext initWebApplicationContext() {WebApplicationContext rootContext WebApplicationContextUtils.getWebApplicationContext(this.getServletContext());WebApplicationContext wac null;if (this.webApplicationContext ! null) {wac this.webApplicationContext;if (wac instanceof ConfigurableWebApplicationContext) {ConfigurableWebApplicationContext cwac (ConfigurableWebApplicationContext)wac;if (!cwac.isActive()) {if (cwac.getParent() null) {cwac.setParent(rootContext);}this.configureAndRefreshWebApplicationContext(cwac);}}}if (wac null) {wac this.findWebApplicationContext();}if (wac null) {wac this.createWebApplicationContext(rootContext);}if (!this.refreshEventReceived) {synchronized(this.onRefreshMonitor) {this.onRefresh(wac);}}if (this.publishContext) {String attrName this.getServletContextAttributeName();this.getServletContext().setAttribute(attrName, wac);}return wac;}创建WebApplicationContext 所在类:org.springframework.web.servlet.FrameworkServlet protected WebApplicationContext createWebApplicationContext(Nullable ApplicationContext parent) {Class? contextClass getContextClass();if (!ConfigurableWebApplicationContext.class.isAssignableFrom(contextClass)) {throw new ApplicationContextException(Fatal initialization error in servlet with name getServletName() : custom WebApplicationContext class [ contextClass.getName() ] is not of type ConfigurableWebApplicationContext); } // 通过反射创建 IOC 容器对象 ConfigurableWebApplicationContext wac (ConfigurableWebApplicationContext) BeanUtils.instantiateClass(contextClass); wac.setEnvironment(getEnvironment()); // 设置父容器 wac.setParent(parent); String configLocation getContextConfigLocation(); if (configLocation ! null) {wac.setConfigLocation(configLocation);}configureAndRefreshWebApplicationContext(wac);return wac; }DispatcherServlet初始化策略 FrameworkServlet创建WebApplicationContext后刷新容器调用onRefresh(wac)此方法在 DispatcherServlet中进行了重写调用了initStrategies(context)方法初始化策略即初始化 DispatcherServlet的各个组件 所在类:org.springframework.web.servlet.DispatcherServlet protected void initStrategies(ApplicationContext context) {initMultipartResolver(context);initLocaleResolver(context);initThemeResolver(context);initHandlerMappings(context);initHandlerAdapters(context);initHandlerExceptionResolvers(context);initRequestToViewNameTranslator(context);initViewResolvers(context);initFlashMapManager(context); }DispatcherServlet调用组件处理请求 processRequest() FrameworkServlet重写HttpServlet中的service()和doXxx()这些方法中调用了 processRequest(request, response) 所在类:org.springframework.web.servlet.FrameworkServlet protected final void processRequest(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {long startTime System.currentTimeMillis();Throwable failureCause null;LocaleContext previousLocaleContext LocaleContextHolder.getLocaleContext();LocaleContext localeContext buildLocaleContext(request);RequestAttributes previousAttributes RequestContextHolder.getRequestAttributes();ServletRequestAttributes requestAttributes buildRequestAttributes(request, response, previousAttributes);WebAsyncManager asyncManager WebAsyncUtils.getAsyncManager(request);asyncManager.registerCallableInterceptor(FrameworkServlet.class.getName(), new RequestBindingInterceptor());initContextHolders(request, localeContext, requestAttributes); try { // 执行服务doService()是一个抽象方法在DispatcherServlet中进行了重写 doService(request, response);}catch (ServletException | IOException ex) {failureCause ex; throw ex; }catch (Throwable ex) {failureCause ex;throw new NestedServletException(Request processing failed, ex); }finally {resetContextHolders(request, previousLocaleContext, previousAttributes);if (requestAttributes ! null) {requestAttributes.requestCompleted();}logResult(request, response, failureCause, asyncManager);publishRequestHandledEvent(request, response, startTime, failureCause);} }doService 所在类:org.springframework.web.servlet.DispatcherServlet Override protected void doService(HttpServletRequest request, HttpServletResponse response) throws Exception { logRequest(request);// Keep a snapshot of the request attributes in case of an include,// to be able to restore the original attributes after the include.MapString, Object attributesSnapshot null;if (WebUtils.isIncludeRequest(request)) {attributesSnapshot new HashMap();Enumeration? attrNames request.getAttributeNames();while (attrNames.hasMoreElements()) {String attrName (String) attrNames.nextElement();if (this.cleanupAfterInclude || attrName.startsWith(DEFAULT_STRATEGIES_PREFIX)) {attributesSnapshot.put(attrName, request.getAttribute(attrName)); } } }// Make framework objects available to handlers and view objects.request.setAttribute(WEB_APPLICATION_CONTEXT_ATTRIBUTE, getWebApplicationContext());request.setAttribute(LOCALE_RESOLVER_ATTRIBUTE, this.localeResolver);request.setAttribute(THEME_RESOLVER_ATTRIBUTE, this.themeResolver);request.setAttribute(THEME_SOURCE_ATTRIBUTE, getThemeSource());if (this.flashMapManager ! null) {FlashMap inputFlashMap this.flashMapManager.retrieveAndUpdate(request, response);if (inputFlashMap ! null) {request.setAttribute(INPUT_FLASH_MAP_ATTRIBUTE, Collections.unmodifiableMap(inputFlashMap));}request.setAttribute(OUTPUT_FLASH_MAP_ATTRIBUTE, new FlashMap());request.setAttribute(FLASH_MAP_MANAGER_ATTRIBUTE, this.flashMapManager); }RequestPath requestPath null;if (this.parseRequestPath !ServletRequestPathUtils.hasParsedRequestPath(request)) {requestPath ServletRequestPathUtils.parseAndCache(request);} try { // 处理请求和响应doDispatch(request, response);} finally { if (!WebAsyncUtils.getAsyncManager(request).isConcurrentHandlingStarted()) {// Restore the original attribute snapshot, in case of an include.if (attributesSnapshot ! null) {restoreAttributesAfterInclude(request, attributesSnapshot);}}if (requestPath ! null) {ServletRequestPathUtils.clearParsedRequestPath(request);}}} doDispatch() 所在类:org.springframework.web.servlet.DispatcherServlet protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception {HttpServletRequest processedRequest request;HandlerExecutionChain mappedHandler null;boolean multipartRequestParsed false;WebAsyncManager asyncManager WebAsyncUtils.getAsyncManager(request);try {ModelAndView mv null;Exception dispatchException null;try {processedRequest checkMultipart(request);multipartRequestParsed (processedRequest ! request);// Determine handler for the current request./* mappedHandler:调用链 包含handler、interceptorList、interceptorIndex handler:浏览器发送的请求所匹配的控制器方法 interceptorList:处理控制器方法的所有拦截器集合 interceptorIndex:拦截器索引控制拦截器afterCompletion()的执行 */mappedHandler getHandler(processedRequest);if (mappedHandler null) {noHandlerFound(processedRequest, response);return; } // Determine handler adapter for the current request. // 通过控制器方法创建相应的处理器适配器调用所对应的控制器方法 HandlerAdapter ha getHandlerAdapter(mappedHandler.getHandler());// Process last-modified header, if supported by the handler.String method request.getMethod();boolean isGet GET.equals(method);if (isGet || HEAD.equals(method)) {long lastModified ha.getLastModified(request, mappedHandler.getHandler());if (new ServletWebRequest(request, response).checkNotModified(lastModified) isGet) {return;} } // 调用拦截器的preHandle() if (!mappedHandler.applyPreHandle(processedRequest, response)) { return;}// Actually invoke the handler. // 由处理器适配器调用具体的控制器方法最终获得ModelAndView对象mv ha.handle(processedRequest, response, mappedHandler.getHandler());if (asyncManager.isConcurrentHandlingStarted()) {return; } applyDefaultViewName(processedRequest, mv); // 调用拦截器的postHandle()mappedHandler.applyPostHandle(processedRequest, response, mv); } catch (Exception ex) {dispatchException ex; } catch (Throwable err) {// As of 4.3, were processing Errors thrown from handler methods as well,// making them available for ExceptionHandler methods and other scenarios.dispatchException new NestedServletException(Handler dispatch failed, err); } // 后续处理:处理模型数据和渲染视图processDispatchResult(processedRequest, response, mappedHandler, mv, dispatchException);}catch (Exception ex) {triggerAfterCompletion(processedRequest, response, mappedHandler, ex);}catch (Throwable err) {triggerAfterCompletion(processedRequest, response, mappedHandler,new NestedServletException(Handler processing failed, err));}finally {if (asyncManager.isConcurrentHandlingStarted()) {// Instead of postHandle and afterCompletionif (mappedHandler ! null) {mappedHandler.applyAfterConcurrentHandlingStarted(processedRequest, response);} } else {// Clean up any resources used by a multipart request.if (multipartRequestParsed) {cleanupMultipart(processedRequest);} }} }processDispatchResult() private void processDispatchResult(HttpServletRequest request, HttpServletResponse response, Nullable HandlerExecutionChain mappedHandler, Nullable ModelAndView mv, Nullable Exception exception) throws Exception {boolean errorView false;if (exception ! null) {if (exception instanceof ModelAndViewDefiningException) {this.logger.debug(ModelAndViewDefiningException encountered, exception);mv ((ModelAndViewDefiningException)exception).getModelAndView();} else {Object handler mappedHandler ! null ? mappedHandler.getHandler() : null;mv this.processHandlerException(request, response, handler, exception);errorView mv ! null;}}// Did the handler return a view to render?if (mv ! null !mv.wasCleared()) {// 处理模型数据和渲染视图this.render(mv, request, response);if (errorView) {WebUtils.clearErrorRequestAttributes(request);}} else if (this.logger.isTraceEnabled()) {this.logger.trace(No view rendering, null ModelAndView returned.);}if (!WebAsyncUtils.getAsyncManager(request).isConcurrentHandlingStarted()) {if (mappedHandler ! null) {// Exception (if any) is already handled..// 调用拦截器的afterCompletion()mappedHandler.triggerAfterCompletion(request, response, (Exception)null);}}}SpringMVC的执行流程 用户向服务器发送请求请求被SpringMVC 前端控制器 DispatcherServlet捕获。DispatcherServlet对请求URL进行解析得到请求资源标识符(URI)判断请求URI对应的映射: a) 不存在 i. 再判断是否配置了mvc:default-servlet-handler ii. 如果没配置则控制台报映射查找不到客户端展示404错误 b) 存在,则执行下面的流程根据该URI调用HandlerMapping获得该Handler配置的所有相关的对象(包括Handler对象以及 Handler对象对应的拦截器)最后以HandlerExecutionChain执行链对象的形式返回。DispatcherServlet 根据获得的Handler选择一个合适的HandlerAdapter。如果成功获得HandlerAdapter此时将开始执行拦截器的preHandler(…)方法【正向】提取Request中的模型数据填充Handler入参开始执行Handler(Controller)方法处理请求。 在填充Handler的入参过程中根据你的配置Spring将帮你做一些额外的工作: a) HttpMessageConveter: 将请求消息(如Json、xml等数据)转换成一个对象将对象转换为指定 的响应信息 b) 数据转换:对请求消息进行数据转换。如String转换成Integer、Double等 c) 数据格式化:对请求消息进行数据格式化。 如将字符串转换成格式化数字或格式化日期等 d) 数据验证: 验证数据的有效性(长度、格式等)验证结果存储到BindingResult或Error中Handler执行完成后向DispatcherServlet 返回一个ModelAndView对象。此时将开始执行拦截器的postHandle(…)方法【逆向】。根据返回的ModelAndView(此时会判断是否存在异常:如果存在异常则执行 HandlerExceptionResolver进行异常处理)选择一个适合的ViewResolver进行视图解析根据Model 和View来渲染视图。渲染视图完毕执行拦截器的afterCompletion(…)方法【逆向】。将渲染结果返回给客户端。
http://www.w-s-a.com/news/369230/

相关文章:

  • 外贸网网站建设蓝色管理系统网站模版
  • 网站服务器关闭阿里巴巴logo
  • 青岛 网站制作公司乐从网站制作
  • wordpress 微网站模板怎么用wordpress 文档下载
  • ppt网站建设的目的合肥做网站找哪家好
  • wordpress站点路径redis缓存wordpress
  • 专门设计网站的公司叫什么百度 门户网站
  • 网站建设丶金手指专业旅游网站系统哪个好
  • 苏州工业园区两学一做网站成都企业排名
  • 医药网站开发wordpress境外支付
  • 营销自己的网站网站如何做标题优化
  • 玖云建站系统wordpress nodejs版本
  • 网站开发费用计入什么二级科目重庆企业网站推广
  • wordpress 菜单怎么使用方法宜春网站推广优化
  • dede 网站图标怎么自学建筑设计
  • 河北斯皮尔网站建设做微信小程序和做网站
  • 沈阳市住房和城乡建设局网站创意上海专业网站建设
  • 免费学编程国内网站it需要什么学历
  • 相城做网站的公司网站建设范本
  • 怎么样查中企动力做的网站阿里邮箱企业版手机版
  • 电子商务网站建设与管理试卷6江门网站建设联系电话
  • 公司的网站建设做什么费用四川圣泽建设集团有限公司网站
  • 为什么网站很少做全屏福利WordPress网站自动采集源码
  • 网站备案法律diy
  • 淘宝客如何新建网站物业管理系统app
  • 品牌网站建设策重大军事新闻视频
  • 廊坊建设网站的公司wordpress清理无用缩略图
  • 桓台网站建设公司首钢建设二建设公司网站
  • 网站建设添加背景命令前端如何优化网站性能
  • 设置网站域名中山画册设计公司