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

厦门建设公司网站PHP+Ajax网站开发典型实例

厦门建设公司网站,PHP+Ajax网站开发典型实例,重庆通信管理局网站,陕西建设执业中心网站办事大厅目录 前言模拟拦截器拦截器的实现原理什么是动态代理? 什么是静态代理静态代理与动态代理的区别两种常用的动态代理方式基于接口的动态代理基于类的动态代理 JDK Proxy 与 CGlib的区别 其他 统⼀访问前缀添加统⼀异常处理统⼀数据返回格式 前言 之前博客讲述了 , 关于SpringA… 目录 前言模拟拦截器拦截器的实现原理什么是动态代理? 什么是静态代理静态代理与动态代理的区别两种常用的动态代理方式基于接口的动态代理基于类的动态代理 JDK Proxy 与 CGlib的区别 其他 统⼀访问前缀添加统⼀异常处理统⼀数据返回格式 前言 之前博客讲述了 , 关于SpringAOP如何实现, 但是在实际开发中, 我们大多数不会遇到SpringAOP, 而是使用Spring拦截器代替了SpringAOP的功能, 因为Spring拦截器 比起AOP来更简单, 更好上手 模拟拦截器 创建一个拦截器 - 定义一个类,实现HandlerInterceptor 接口, 并重写preHandle方法 , 在这个类中 ,写业务的判断方法, (注: 这个类只是一个普通类) package com.example.demo.config;import com.example.demo.common.AppVariable; import org.springframework.web.servlet.HandlerInterceptor;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession;public class UserInterceptor implements HandlerInterceptor {/**** param request* param response* param handler* return 返回TRUE的时候, 表示拦截器验证成功, 返回FALSE 表示拦截器验证失败* throws Exception*/Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response,Object handler) throws Exception {// 业务方法HttpSession session request.getSession(false); // 默认值是TRUE ,没有会自动创建一个session会话if (session ! null session.getAttribute(AppVariable.SESSION_KEY) ! null){// 用户已登录return true;//如果是TRUE就继续执行后续方法}return false;// FALSE 不执行后续方法} } 将拦截器配置到系统的配置文件中, 并配置拦截器的拦截规则 也就是, 定义一个全局类, 加上Configuration 注解 , 然后实现WebMvcConfigurer接口, 重写addInterceptors 方法, 在方法中定义具体拦截那些资源 注: 一个项目中可以有多个拦截规则 package com.example.demo.config;import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;Configuration //一定要加一个Configurationpublic class AppConfig implements WebMvcConfigurer {Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new UserInterceptor()) // 这儿也可以使用注解的方式来注入 , 表示具体拦截的类 .addPathPatterns(/**) // 一刀切, 拦截所有的请求.excludePathPatterns(/user/reg) // 配置不拦截的接口.excludePathPatterns(/user/login) // 不拦截的有更多的就写更多的方法;} } 定义一个测试类, 来测试拦截的功能 package com.example.demo.controller;import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;RestController RequestMapping(/user) public class UserController {RequestMapping(/getuser)public String getUser(){return do getUser;}RequestMapping(/reg)public String reg(){return do reg;}RequestMapping(/login)public String login(){return do login;}} 拦截器的实现原理 之前的Spring调用流程 加入拦截器的调用流程 可以看出, 拦截器就是在访问控制层之前, 先将用户的请求处理一遍, 如果正确就给与后序层去调用, 如果不正确就拦截下来,让其实现对应的业务逻辑 拦截器也是通过动态代理的方式来实现的, 什么是动态代理? 什么是静态代理 代理: 就是将我们不愿意做的事情,交给别人去做 我们先来说什么是静态代理: 在不修改被代理对象的基础上通过扩展代理类进行一些功能的附加与增强。简单来说静态代理就是在不改变源代码的基础上增加新的功能 比方说: 俩个类都实现了一个接口, 这样类A就可以通过类B 来加强一些自己说不具备的功能, 这种就可以说是静态代理, 因为你是根据代码提前写好去调用其他对象,这些对象在程序运行前就已经加载上了 有了静态代理的概念: 那么动态代理也就很清晰了 我们从上述可以看出静态代理受限于接口的实现。动态代理就是通过使用反射动态地获取抽象接口的类型从而获取相关特性进行代理 代理类在程序运行期间创建的代理对象称之为动态代理对象。这种情况下创建的代理对象并不是事先在Java代码中定义好的。而是在运行期间根据我们在动态代理对象中的“指示”动态生成的 静态代理与动态代理的区别 静态代理需要自己写代理类并一一实现目标方法且代理类必须实现与目标对象相同的接口。 动态代理不需要自己实现代理类它是利用 JDK或CGLib动态地在内存中构建代理对象需要我们传入被代理类并且默认实现所有目标方法。 两种常用的动态代理方式 基于接口的动态代理 是JDK提供的: 必须使用JDK官方的Proxy类创建代理对象,代理的目标对象必须实现接口 基于类的动态代理 是 CGLib提供的: 使用CGLib的Enhancer类创建代理对象 JDK Proxy 与 CGlib的区别 出生不同实现不同 , JDK Proxy 要求代理类实现接口才能实现代理 , 而CGLib是实现代理类的子类完成动态代理性能不同, JDK 7 Proxy 性能高于 CGLib , 而JDK 7 之前CGLib性能高于Proxy 其他 统⼀访问前缀添加 所有请求地址添加 api 前缀 , 在实现WebMvcConfigure 接口的类中 ,重写configurePathMatch方法 , 其中第⼆个参数是⼀个表达式设置为 true 表示启动前缀 Configuration public class AppConfig implements WebMvcConfigurer {// 所有的接⼝添加 api 前缀Overridepublic void configurePathMatch(PathMatchConfigurer configurer) {configurer.addPathPrefix(api, c - true);} }统⼀异常处理 统⼀异常处理使⽤的是 ControllerAdvice ExceptionHandler 来实现的ControllerAdvice 表示控制器通知类ExceptionHandler 是异常处理器两个结合表示当出现异常的时候执⾏某个通知也就是执⾏某个⽅法事件具体实现代码如下 ⽅法名和返回值可以⾃定义其中最重要的是ExceptionHandler(Exception.class) 注解 , 注解中放具体的异常类型, 也可以直接使用Exception来处理所有的异常, 调用流程如下: 定义了Exception异常的前提下, 如果找到对应异常就使用对应异常处理, 找不到就是用Exception异常处理 import java.util.HashMap; ControllerAdvice public class ErrorAdive {ExceptionHandler(Exception.class)ResponseBodypublic Object handler(Exception e) {HashMapString, Object map new HashMap();map.put(state, 0);map.put(data, null);map.put(msg, e.getMessage());return map;} }统⼀数据返回格式 统⼀的数据返回格式可以使⽤ ControllerAdvice ResponseBodyAdvice 的⽅式实现具体实现代 码如下 如果想要使用统一数据的返回格式, 首先在类上加上ControllerAdvice注解, 然后在类上实现 ResponseBodyAdvice 接口, 并重写俩个方法, support 与beforeBodywrite , 其中support 必须返回TRUE 否则不调用beforeBodywrite 方法, 在beforeBodywrite中写数据返回类型 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.ResponseBodyAdvice; import java.util.HashMap; ControllerAdvice public class ResponseAdvice implements ResponseBodyAdvice {/*** 内容是否需要重写通过此⽅法可以选择性部分控制器和⽅法进⾏重写* 返回 true 表示重写*/Overridepublic boolean supports(MethodParameter returnType, Class converterType) {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.dnsts.com.cn/news/145355.html

相关文章:

  • 漯河做网站推广qq网站空间赞
  • 深圳网站开发一薇psd网页模板免费下载
  • 中企动力网站模板长沙优化科技
  • 东莞企业网站建设价格网店出租网站程序
  • 做网站方面黑糖不苦还做网站么
  • 绘画做动作的网站广电网络公司优秀营销案例
  • 物流企业网站源码京东优惠券网站怎么做
  • 自学网站建设需要什么学历网站建站收费
  • 做分销网站系统下载网站建设套餐报价方案
  • 二级网站有什么好处做影视网站什么cms好用
  • 学网站开发学费多少网站推广计划怎么做
  • 想学做网站从哪里入手微网站管理平台
  • 百度站长平台网页手机下载ps软件免费版
  • 网站规划课程设计模板wordpress 早期文章
  • 网站留言板功能网站的基本价格
  • 浙江中联建设集团网站网站建设用素材
  • 做网站送的手机站是什么做中文网站的公司
  • 简单网站html模板下载大型企业策划咨询公司
  • 工业设计 做自己的网站 知乎成都网站建设易维达好
  • 自建网站工具wordpress 并发量
  • 网站建设与管理 十四五国规教材花都网站 建设信科网络
  • 网站开发都做什么医院网站模板下载
  • 网站建设系统服务卢龙网站建设
  • 广东微信网站制作多少钱四平建设局网站
  • wordpress建站空间推荐wordpress默认登陆地址修改
  • 网站如何排名搭建一个自己的网站
  • 沈阳网站优化推广方案企业网站建设服务公司
  • 怎么做能够让网站流量大定制网站模板
  • 龙井网站建设营销外包团队有哪些
  • 网站建设包含图文设计宁波网站搭建