上一篇,咱们讲解了spring boot(json,jsp,freemarker)配置及整合方法,不清楚的能够点击了解java
@Bean public ServletRegistrationBean servletRegistrationBean() { return new ServletRegistrationBean(new HelloServlet(),"/xiaohong"); }
经过@WebServlet自动注入web
@ServletComponentScan @SpringBootApplication public class Start {……}
@WebServlet("/xiaohong") public class HelloServlet extends HttpServlet {……}
package com.wanye.servlet; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; /** * Created by wanye on 2017/5/24. */ @WebServlet("/xiaohong") public class HelloServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println(">>do get<<"); doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println(">>do post<<"); PrintWriter out = resp.getWriter(); out.print("hello @xiaohong"); out.close(); } }
过滤器Filter和监听器Listener的实现方式与Servlet实现方式同样,这里列出来区别,你们本身能够尝试一下。spring
经过@Bean手动注入json
经过注解自动注入segmentfault
上面讲解了Servlet、过滤器、监听器,细心的同窗能够发现,他们都是属于javax.servlet所提供的Api。jsp
简单来说是经过动态代理实现,被访问的目标方法经过代理类(方法)来执行,这样咱们就能够在真正要执行的方法执行前、后作一些处理;经过拦截器这种方式,使得代码能够进行更高度的抽象。更多拦截器、动态代理的内容,请你们查阅资料了解。ide
在Spring中实现Http拦截器post
package com.wanye.interceptor; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Created by wanye on 2017/5/24. */ public class HelloInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println(">>interceptor preHandle<<"); return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println(">>interceptor postHandle请求处理以后进行调用,可是在视图被渲染以前(Controller方法调用以后)<<"); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println(">>interceptor afterCompletion<<"); } }
package com.wanye.interceptor; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; /** * Created by wanye on 2017/5/24. */ @Configuration public class HelloConfig extends WebMvcConfigurerAdapter { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new HelloInterceptor()).addPathPatterns("/**"); } }
本文讲解了注册Servlet/Filter/Listener的两种⽅方式(Servlet/Filter/Listener的概念你们自行查阅资料了解),及拦截器基本原理,并经过注解实现http拦截器,另外本文还有一个疑问:为何Spring中实现的Http拦截器,没法对咱们自定义的servlet请求进行拦截?欢迎你们留言讨论。学习
若本文对你有帮助,望点赞。为了提升你们学习效果,录制了同步的视频课程,还望你们支持视频课程url