SpringBoot使用servletAPI与异常处理
工程结构:
主方法类:
package com.boot.servlet.api.bootservlet; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration; // @ServletComponentScan //扫描的方式使用servlet
@SpringBootApplication(exclude = ErrorMvcAutoConfiguration.class)
public class BootServletApplication { public static void main(String[] args) {
SpringApplication.run(BootServletApplication.class, args);
}
}
Setvlet
package com.boot.servlet.api.bootservlet.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; @WebServlet(name = "MyServlet",urlPatterns = "/my")
public class MyServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("执行了servlet请求");
} protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
过滤器
package com.boot.servlet.api.bootservlet.filter; import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException; @WebFilter(filterName = "MyFilter", urlPatterns = "/*")
public class MyFilter implements Filter {
public void destroy() {
} public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
System.out.println("执行filter");
chain.doFilter(req, resp);
} public void init(FilterConfig config) throws ServletException { } }
监听器
package com.boot.servlet.api.bootservlet.listener; import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import javax.servlet.http.HttpSessionBindingEvent; @WebListener
public class Listener implements ServletContextListener,
HttpSessionListener, HttpSessionAttributeListener { // Public constructor is required by servlet spec
public Listener() {
} // -------------------------------------------------------
// ServletContextListener implementation
// -------------------------------------------------------
public void contextInitialized(ServletContextEvent sce) {
/* This method is called when the servlet context is
initialized(when the Web application is deployed).
You can initialize servlet context related data here.
*/
System.out.println("servlet容器启动");
} public void contextDestroyed(ServletContextEvent sce) {
/* This method is invoked when the Servlet Context
(the Web application) is undeployed or
Application Server shuts down.
*/
} // -------------------------------------------------------
// HttpSessionListener implementation
// -------------------------------------------------------
public void sessionCreated(HttpSessionEvent se) {
/* Session is created. */
} public void sessionDestroyed(HttpSessionEvent se) {
/* Session is destroyed. */
} // -------------------------------------------------------
// HttpSessionAttributeListener implementation
// ------------------------------------------------------- public void attributeAdded(HttpSessionBindingEvent sbe) {
/* This method is called when an attribute
is added to a session.
*/
} public void attributeRemoved(HttpSessionBindingEvent sbe) {
/* This method is called when an attribute
is removed from a session.
*/
} public void attributeReplaced(HttpSessionBindingEvent sbe) {
/* This method is invoked when an attibute
is replaced in a session.
*/
}
}
除了使用注解外还可以使用配置类的方式实现:
package com.boot.servlet.api.bootservlet.config; import com.boot.servlet.api.bootservlet.filter.MyFilter;
import com.boot.servlet.api.bootservlet.listener.Listener;
import com.boot.servlet.api.bootservlet.servlet.MyServlet;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean; import java.util.Arrays; /**
* 通过配置类的方式引入servlet
*/
@SpringBootConfiguration
public class ServletConfiguration { @Bean
public ServletRegistrationBean<MyServlet> registrationBean() {
ServletRegistrationBean<MyServlet> bean = new ServletRegistrationBean<>();
bean.setServlet(new MyServlet());
bean.setUrlMappings(Arrays.asList("/my"));
return bean;
} @Bean
public FilterRegistrationBean<MyFilter> filterFilterRegistrationBean() {
FilterRegistrationBean<MyFilter> bean = new FilterRegistrationBean<>();
bean.setFilter(new MyFilter());
bean.setUrlPatterns(Arrays.asList("/*")); return bean;
} @Bean
public ServletListenerRegistrationBean<Listener> servletListenerRegistrationBean() {
ServletListenerRegistrationBean<Listener> listener = new ServletListenerRegistrationBean<>();
listener.setListener(new Listener()); return listener;
}
}
拦截器
package com.boot.servlet.api.bootservlet.interceptor; import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class MyInteceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
return true;
} @Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("postHandle");
} @Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("afterCompletion");
}
}
拦截器配置类
package com.boot.servlet.api.bootservlet.config; import com.boot.servlet.api.bootservlet.interceptor.MyInteceptor;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport; /**
* 拦截器配置类
*/
@SpringBootConfiguration
public class MyWebMvcConfiguration extends WebMvcConfigurationSupport {
@Override
protected void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new MyInteceptor());
}
}
springBoot自定义错误页面处理
默认读取的静态资源位置:"classpath:/META-INF/resources/", "classpath:/resources/",
"classpath:/static/", "classpath:/public/"
非模板: public/error/xxx.html
模板的: templates/errror/xxx.html
异常处理:
局部@ExceptionHandler
全局@ControllerAdvice+@ExceptionHandler
程序演示
结构:
package com.example.bootex.exception; /**
* 自定义业务异常类
*/
public class BizException extends RuntimeException { public BizException() {
super();
} public BizException(String message) {
super(message);
} public BizException(String message, Throwable cause) {
super(message, cause);
} public BizException(Throwable cause) {
super(cause);
} protected BizException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
}
package com.example.bootex.controller; import com.example.bootex.exception.BizException;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.GetMapping; @Controller
public class PageController { /**
* 局部异常处理
* @param ex
* @param model
* @return
*/
@ExceptionHandler(BizException.class)
public String exPage1(Exception ex, Model model) {
model.addAttribute("ex", ex); return "/error/biz.html";
} @GetMapping("/e500")
public String e500() {
throw new RuntimeException("runtime-exception");
} @GetMapping("/add")
public String add() {
throw new BizException("添加出现异常");
}
}
package com.example.bootex.exception; import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus; /**
* 全局业务处理
*/
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
@ResponseStatus(code = HttpStatus.NOT_FOUND)
public String e404() {
return "error/404.html";
} @ExceptionHandler(RuntimeException.class)
@ResponseStatus(code = HttpStatus.INTERNAL_SERVER_ERROR)
public String e500() {
return "error/500.html";
}
}
SpringBoot使用servletAPI与异常处理的更多相关文章
- SpringBoot优雅的全局异常处理
前言 本篇文章主要介绍的是SpringBoot项目进行全局异常的处理. SpringBoot全局异常准备 说明:如果想直接获取工程那么可以直接跳到底部,通过链接下载工程代码. 开发准备 环境要求 JD ...
- SpringBoot中的全局异常处理
SpringBoot中的全局异常处理 本篇要点 介绍SpringBoot默认的异常处理机制. 如何定义错误页面. 如何自定义异常数据. 如何自定义视图解析. 介绍@ControllerAdvice注解 ...
- SpringBoot系列——自定义统一异常处理
前言 springboot内置的/error错误页面并不一定适用我们的项目,这时候就需要进行自定义统一异常处理,本文记录springboot进行自定义统一异常处理. 1.使用@ControllerAd ...
- springboot aop + logback + 统一异常处理 打印日志
1.src/resources路径下新建logback.xml 控制台彩色日志打印 info日志和异常日志分不同文件存储 每天自动生成日志 结合myibatis方便日志打印(debug模式) < ...
- SpringBoot系列: Spring项目异常处理最佳实践
===================================自定义异常类===================================稍具规模的项目, 一般都要自定义一组异常类, 这 ...
- springboot restful接口服务异常处理
一.spring boot中默认的错误处理机制 二.自定义的异常处理
- SpringBoot(七)_统一异常处理
我感觉看了这节课,给我的思考还是很多的,感觉受益良多.废话不多说,一起学习. 统一的 外层结构返回 这样利于代码看着也规范,前端处理也统一 # 错误返回 { "code": 1, ...
- SpringBoot开发案例之异常处理并邮件通知
前言 在项目开发中,对于异常处理我们通常有多种处理方式,比如:控制层手动捕获异常,拦截器统一处理异常.今天跟大家分享一种注解的方式,统一拦截异常并处理. 异常处理 在spring 3.2中,新增了@R ...
- 外部tomcat发布springboot项目步骤和异常处理:java.lang.NoClassDefFoundError: javax/el/ELManager
随机推荐
- msys2-x86_64搭建QT Mingw64编译环境
1.安装msys2-x86_64 2.环境变量 PATH 添加 C:\msys64\home\%name%3. 打开MSYS2 Shell,更新包数据库和核心系统包 pacman -Syu4. 关闭M ...
- 北京Uber优步司机奖励政策(1月18日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- 优步北京B组奖励政策
用户组:优步北京B组(2015年7月20日前激活的部分司机) 更新日期:2015年8月4日 滴滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最 ...
- SQl 语句 表的连接
当涉及到多个表查询时就需要使用将表连接的方法进行查询. SQL语句连接的方式根本上分为5种: •EQUI JOIN •SEMI JOIN 3 •ANTI JOIN 4 •CROSS JOIN •DIV ...
- LeetCode:36. Valid Sudoku(Medium)
1. 原题链接 https://leetcode.com/problems/valid-sudoku/description/ 2. 题目要求 给定一个 9✖️9 的数独,判断该数独是否合法 数独用字 ...
- substr是不安全的
今天遇到一个问题,数据库中保存的内容通过php在页面无法显示,如果将内容换行或加个空格或者随便加点其他内容就能正常显示. 非常的诡异,显示的内容是通过截取得到的.代码非常简单 substr($pMar ...
- How To Install Apache Tomcat 7 on CentOS 7 via Yum
摘自:https://www.digitalocean.com/community/tutorials/how-to-install-apache-tomcat-7-on-centos-7-via-y ...
- dubbo入门(一)
1.简介 Dubbo由阿里巴巴开源,是一个分布式服务框架,致力于提供高性能和透明化的RPC(远程过程调用)远程服务调用方案,以及SOA服务治理方案.如果没有分布式的需求,Dbubbo是不需要的,其本质 ...
- 第五模块·WEB开发基础-第2章JavaScript基础
第1章 JavaScript基础 01-JavaScript历史介绍 02-JavaScript的组成 03-JavaScript的引入方式 04-变量的使用 05-基本数据类型(一) 06-基本数据 ...
- 【button】 按钮组件说明
原型: <button size="[default | mini]" type="[primary | default | warn]" plain=& ...