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

潍坊网站建设哪里好搜索引擎营销的四种方式

潍坊网站建设哪里好,搜索引擎营销的四种方式,网站如何屏蔽ip段,wordpress mnews主题在处理网络请求时#xff0c;有一部分功能是需要抽出来统一处理的#xff0c;与业务隔开。 登录校验 可以利用spring mvc的拦截器Interceptor#xff0c;实现HandlerInterceptor接口即可。实现该接口后#xff0c;会在把请求发给Controller之前进行拦截处理。 拦截器的实…在处理网络请求时有一部分功能是需要抽出来统一处理的与业务隔开。 登录校验 可以利用spring mvc的拦截器Interceptor实现HandlerInterceptor接口即可。实现该接口后会在把请求发给Controller之前进行拦截处理。 拦截器的实现分为以下两个步骤 创建⾃定义拦截器实现 HandlerInterceptor 接⼝的 preHandle执⾏具体⽅法之前的预处理⽅法。将⾃定义拦截器加⼊ WebMvcConfigurer 的 addInterceptors ⽅法中。 我们使用session来作为登录校验的例子实现如下 package com.demo;import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import org.springframework.web.servlet.HandlerInterceptor;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession;/*** 登录拦截器*/ Component Slf4j public class LoginInterceptor implements HandlerInterceptor {/*** 为 false 则不能继续往下执行为 true 则可以。*/ Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {// 判断session的信息是否合法HttpSession session request.getSession(false);if (session ! null session.getAttribute(userinfo) ! null) {return true;}log.error(当前用户没有访问权限);response.setStatus(401);return false;} }将写好的⾃定义拦截器通过WebMvcConfigurer注册到容器中使得拦截器生效具体实现代码如下 package com.demo;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;Configuration public class MyConfig implements WebMvcConfigurer {Autowiredprivate LoginInterceptor loginInterceptor;Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(loginInterceptor).addPathPatterns(/**) // 拦截所有请求.excludePathPatterns(/user/login); // 排除不拦截的 url} }如果不注入对象的话addInterceptor() 的参数也可以直接 new 一个对象 Configuration // 一定不要忘记 public class MyConfig implements WebMvcConfigurer {Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new LoginInterceptor()).addPathPatterns(/**) // 拦截所有请求.excludePathPatterns(/user/login); // 排除不拦截的 url} }原理 所有的 Controller 执⾏都会通过spring mvc的调度器 DispatcherServlet 来实现所有⽅法都会执⾏ DispatcherServlet 中的 doDispatch 调度⽅法doDispatch 源码如下 protected void doDispatch(HttpServletRequest request, HttpServletResponseresponse) throws Exception {HttpServletRequest processedRequest request;HandlerExecutionChain mappedHandler null;boolean multipartRequestParsed false;WebAsyncManager asyncManager WebAsyncUtils.getAsyncManager(request);try {try {ModelAndView mv null;Object dispatchException null;try {// ... 忽略不重要的代码// 调⽤预处理if (!mappedHandler.applyPreHandle(processedRequest, response)) {return;}// 执⾏ Controller 中的业务mv ha.handle(processedRequest, response, mappedHandler.getHandler());// ... 忽略不重要的代码} catch (Exception var20) {dispatchException var20;} catch (Throwable var21) {dispatchException new NestedServletException(Handler dispatch failed, var21);}this.processDispatchResult(processedRequest, response, mappedHandler, mv, (Exception)dispatchException);} catch (Exception var22) {this.triggerAfterCompletion(processedRequest, response, mappedHandler, var22);} catch (Throwable var23) {this.triggerAfterCompletion(processedRequest, response, mappedHandler, new NestedServletException(Handler processing failed, var23));}} finally {if (asyncManager.isConcurrentHandlingStarted()) {if (mappedHandler ! null) {mappedHandler.applyAfterConcurrentHandlingStarted(processedRequest, response);}} else if (multipartRequestParsed) {this.cleanupMultipart(processedRequest);}} }从上述源码可以看出在开始执⾏ Controller 之前会先调⽤ 预处理⽅法 applyPreHandle⽽ applyPreHandle ⽅法的实现源码如下 boolean applyPreHandle(HttpServletRequest request, HttpServletResponse response) throws Exception {for(int i 0; i this.interceptorList.size(); this.interceptorIndex i) {// 获取项⽬中使⽤的拦截器 HandlerInterceptorHandlerInterceptor interceptor (HandlerInterceptor)this.interceptorList.get(i);if (!interceptor.preHandle(request, response, this.handler)) {this.triggerAfterCompletion(request, response, (Exception)null);return false;}}return true; }异常处理 请求时的异常处理也是比较常见的统一处理的对象。 统⼀异常处理使⽤的是 ControllerAdvice ExceptionHandler 来实现的ControllerAdvice 表示控制器通知类ExceptionHandler 是异常处理器两个结合表示当出现异常的时候执⾏某个通知也就是执⾏某个⽅法事件具体实现代码如下 package com.demo;import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody;import java.util.HashMap;/*** 统一处理异常* 一般都需要自定义一个异常对象这里为了简单说明只用一个map对象来说明*/ ControllerAdvice public class ErrorAdive {ExceptionHandler(Exception.class)ResponseBodypublic HashMapString, Object exceptionAdvie(Exception e) {HashMapString, Object result new HashMap();result.put(code, -1);result.put(msg, e.getMessage());return result;}ExceptionHandler(ArithmeticException.class)ResponseBodypublic HashMapString, Object arithmeticAdvie(ArithmeticException e) {HashMapString, Object result new HashMap();result.put(code, -2);result.put(msg, e.getMessage());return result;}}此时若出现异常就不会报错了代码会继续执行但是会把自定义的异常信息返回给前端 原理 ControllerAdvice是spring的aop对于Controller进行切面所有属性的包括切入点和需要织入的切面逻辑配合ExceptionHandler来捕获Controller中抛出的指定类型的异常从而达到不同类型的异常区别处理的目的。 返回数据结构 统⼀的返回数据结构可以使用 ControllerAdvice ResponseBodyAdvice接口 的方式实现具体实现代码如下 package com.demo;import org.springframework.core.MethodParameter; import org.springframework.http.MediaType; import org.springframework.http.server.ServerHttpRequest; import org.springframework.http.server.ServerHttpResponse; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyA dvice;import java.util.HashMap;/*** 统一返回数据的处理*/ ControllerAdvice public class ResponseAdvice implements ResponseBodyAdvice {/*** 内容是否需要重写通过此⽅法可以选择性部分控制器和⽅法进⾏重写* 返回 true 表示重写*/Overridepublic boolean supports(MethodParameter returnType, Class converterTyp e) {return true;}/*** ⽅法返回之前调⽤此⽅法*/Overridepublic Object beforeBodyWrite(Object body, MethodParameter returnType,MediaType selectedContentType,Class selectedConverterType, ServerHttpRequest request,ServerHttpResponse response) {// 构造统⼀返回对象HashMapString, Object result new HashMap();result.put(state, 1);result.put(msg, );result.put(data, body);return result;} }
http://www.w-s-a.com/news/565564/

相关文章:

  • 专业做家电经销的网站网络管理系统有哪几部分组成
  • 自学网站编程网站名称需要注册吗
  • 网站后台管理系统怎么添加框安徽省工程建设协会网站
  • 雨花台网站建设wordpress找回
  • 四川哪家网站推广做的好网站开发人才需求
  • 什么网站可以找手工活做一站式服务平台官网
  • 做购物网站的步骤网站核心词如何做
  • 做品牌设计网站公司网站没做301怎么做301
  • 服务流程企业网站wordpress文章的使用
  • 网站开发组合淘宝网站开发选什么类目
  • 广东手机网站建设个人电脑做网站主机
  • 健身俱乐部网站开发文档建一个网站需要什么条件
  • 买的网站模板怎么做建设行政管理部门网站
  • 怎么让百度多收录网站关键词seo深圳
  • 陕西交通建设集团网站体检个人网站设计模板田田田田田田田田
  • ae模板网站推荐安徽建筑信息平台
  • 新网站建设代理商wordpress模板商店
  • 中国十大设计素材网站wordpress发布失败
  • 江西省建设监理网站网页制作与设计是什么
  • 在招聘网站做销售怎么样网址你懂我意思正能量不用下载ios
  • 高端企业网站定制公司企业网站2000元
  • 成都网站建设:河北省建设工程质量监督网站
  • 四川省建设厅官网信息查询平台北京seo关键词优化外包
  • 网站建设响应式是什么意思wordpress弹窗打开网页
  • 做美工需要参考的网站漳州做网站的公司
  • 用源码建设网站关于网站开发的自我评价
  • 网站设计师图片自助建站编辑器
  • 网站建设的常用技术有哪些深圳建筑工地招工
  • 做软装找图片的网站wordpress 替代
  • 制作网站的后台公众号做视频网站会封吗