前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >SpringBoot使用servletAPI与异常处理

SpringBoot使用servletAPI与异常处理

作者头像
HUC思梦
发布于 2020-09-03 08:51:35
发布于 2020-09-03 08:51:35
63400
代码可运行
举报
运行总次数:0
代码可运行

工程结构:

主方法类:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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);
    }
}

过滤器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 {

    }

}

监听器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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.
      */
    }
}

除了使用注解外还可以使用配置类的方式实现:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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;
    }
}

拦截器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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");
    }
}

拦截器配置类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

程序演示

结构:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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);
    }
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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("添加出现异常");
    }
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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";
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-10-20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
springboot开发之配置Servlet三大组件(Servlet、Filter、Listener)
1、首先我们自己定义三大组件:MyServlet.java、MyFilter.java、MyListener.java
西西嘛呦
2020/08/26
4800
springboot开发之配置Servlet三大组件(Servlet、Filter、Listener)
SpringBoot2.X注册Servlet三大组件(Servlet、Filter、Listener)
一、自定义三大组件 1.1、自定义Servlet package com.atguigu.springboot.servlet; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOEx
别团等shy哥发育
2023/02/25
3560
SpringBoot2.X注册Servlet三大组件(Servlet、Filter、Listener)
SpringBoot:Web开发之三大组件详解
Servlet是JavaEE的规范之一,规范就是接口。Servlet是JavaWeb三大组建之一,其中,三大组件分别是:Servlet程序、Filter过滤器和Listener监听器。Servlet是运行在服务器上的一个java小程序,他可以接收客户端发过来的信息,并响应数据给客户端。
Freedom123
2024/03/29
3500
SpringBoot:Web开发之三大组件详解
在springboot 中配置使用servlet
还记得,说到web项目,最早接触的就是servlet,实际上SSH项目,也是依赖于servlet,在web.xml文件中进行配置。那么使用了springboot之后,不仅有一个疑问,虽然SpringMVC已经帮我们很容易的实现了spring web项目的使用,只需要@Controller就能搞定。但是我们需要使用servlet该如何做呢?虽然这种需求非常少,但是在springboot的官方文档对servlet的使用有过描述。下面我们来看看在springboot中如何使用和配置servlet。
冬天里的懒猫
2021/03/02
5K0
Springboot 系列(六)Spring Boot web 开发之拦截器和三大组件
Springboot 中的 Interceptor 拦截器也就是 mvc 中的拦截器,只是省去了 xml 配置部分。并没有本质的不同,都是通过实现 HandlerInterceptor 中几个方法实现。几个方法的作用一一如下。
未读代码
2019/11/04
9190
SpringBoot: 集成Servlet、Filter和Listener实践
使用 Spring Boot 开发项目之后,就基本上告别 Servlet、Filter 和 Listener 了。但是有时在整合一些第三方框架时,可能还是不得不使用 Servlet。Spring Boot 中对于整合这些基本的 Web 组件也提供了很好的支持。
Freedom123
2024/03/29
2800
SpringBoot: 集成Servlet、Filter和Listener实践
SpringBoot 中使用自定义的 Servlet, Filter, Listener
1. 使用 @ServletComponentScan 定义要扫描的包目录, Servlet, Filter, Listener 可以通过 @WebServlet, @WebListener, @WebFilter 进行自动注册.
北漂的我
2019/05/28
8920
SpringBoot----嵌入式Servelt容器
Spring Boot2.0以上版本WebServerFactoryCustomizer进行WebServer的个性化配置
大忽悠爱学习
2021/11/15
6110
Java学习笔记-全栈-web开发-21-SpringBoot使用Javaweb三大组件
初学者会把webmvcconfigurer里面的某些配置跟Javaweb三大组件搞混。
devi
2021/08/18
2900
SpringBoot注册web组件
Servlet是Java Web应用程序的基础,它提供了处理客户端请求的机制。Servlet三大组件是指Servlet、Filter和Listener,它们是Java Web应用程序的核心组件。
会洗碗的CV工程师
2023/11/05
2070
SpringBoot注册web组件
在SpringBoot中如何使用国际化配置
在阅读springboot官方文档spring-boot-reference.pdf的过程中,发现springboot的国际化支持也是非常不错的。前一段时间做了一个项目,需要解决中文、繁体、英文的国际化问题。虽然项目采用了前后端分离,最终通过前端js代码来实现了国际化,但是阅读springboot的解决方式之后,不得不说springboot在这个问题上还是非常便捷的。
冬天里的懒猫
2021/08/05
8680
SpringBoot2---Web原生组件注入(Servlet、Filter、Listener)和嵌入式Servlet容器
Spring Boot 应用中这三个注解默认是不被扫描的,需要在项目启动类上添加 @ServletComponentScan 注解, 表示对 Servlet 组件扫描。
大忽悠爱学习
2021/11/15
7680
SpringBoot之旅-web开发
有了自动配置,springboot使web开发变得简单,这个在springboot之旅中的第一篇中就有体现,实际的开发中当然不会这么简单,很多时候我们都需要自己去定制一些东西。web开发的东西比较多, 我们先掌握一些必要知识点,剩下的就是CRUD开发。
烂猪皮
2023/09/04
3060
SpringBoot之旅-web开发
SpringBoot使用拦截器、过滤器、监听器
PS:原文链接https://www.cnblogs.com/haixiang/p/12000685.html,转载请注明出处
海向
2019/12/10
5600
SpringBoot整合Servlet、Filter、Listener、访问静态资源、文件上传
首先说明一下,这里使用的是Springboot2.2.6.RELEASE版本,由于Springboot迭代很快,所以要注意版本问题。
别先生
2020/05/08
1.6K0
Spring Boot注册Web组件
Spring Boot是一种用于简化Java应用程序开发的框架,它使得构建Web应用变得更加容易。在开发Web应用时,通常需要注册和管理各种Web组件,如Servlet、Filter和Listener。本文将介绍如何在Spring Boot应用程序中注册这些Web组件,并提供一些示例代码以便于理解。
IT_陈寒
2023/12/13
1250
Spring Boot注册Web组件
【Spring Boot】031-整合 Servlet 、Filter 和 Listener
一般情况下,使用 Spring 、Spring MVC 这些框架之后,基本上就告别了 Servlet 、 Filter 以及 Listenter 了,但是有时在整合一些第三方框架时需要使用到这些。Spring Boot 对于整合这些基本的 Web 组件也提供了很好的支持。
訾博ZiBo
2025/01/06
1100
【Spring Boot】031-整合 Servlet 、Filter 和 Listener
springboot整合servlet的使用经历
最近这段时间一直想看下原来自己是如何使用servlet方式进行项目开发的,现在看来是不是servlet离我们很久远了。
码农王同学
2019/11/26
5880
SpringBoot基本使用
我们创建的是一个基于SpringBoot的WEB项目,那么怎么处理客户端提交的请求呢?这时我们可以直接在启动器所在的子目录下创建对应的Controller即可
Java鱼头
2022/12/01
2641
Spring Boot 注册 Servlet 的三种方法,真是太有用了!
本文栈长教你如何在 Spring Boot 注册 Servlet、Filter、Listener。
Java技术栈
2019/05/15
1.1K0
Spring Boot 注册 Servlet 的三种方法,真是太有用了!
推荐阅读
相关推荐
springboot开发之配置Servlet三大组件(Servlet、Filter、Listener)
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文