SpringBoot(1)

SpringBoot 8/2

CRUD

  1. 发送put请求修改数据有三个步骤:

    1. SpringMVC中配置HiddenHttpMethodFilter
    2. 页面上创建一个post请求(form标签只能写get和post)
    3. 创建一个input项目,name="_method",值就是我们所指定方式
    4. <input type="hidden" name="_method" value="put" th:if="${emp!=null}" / >
    5. <input type="hidden" name="id" th:if="${emp!=null}" th:value="${emp.id}">

错误处理机制

  1. 错误提示有状态码,类型,时间....

  2. 默认效果:返回一个错误的页面。

  3. 如果是其他客户端,默认响应一个json数据,时间戳、状态码、错误提示、错误信息、访问路径。

  4. 如何定制错误信息:

    1. 一个是定义错误页面
    2. 一个是定义json数据
  5. external libiaries->spring-boot-auto-configure-web-ErrorMvcAutoConfigure容器中四个组件非常重要,分别是:

    1. DefaultErrorAttributes
    2. BasicErrorController:默认/error请求
    @Controller
    @RequestMapping({"${server.error.path:${error.path:/error}}"})
    public class BasicErrorController extends AbstractErrorController {
            @RequestMapping(
            produces = {"text/html"}
        )//产生html页面
        public ModelAndView errorHtml(HttpServletRequest request, HttpServletResponse response) {
            HttpStatus status = this.getStatus(request);
            Map<String, Object> model = Collections.unmodifiableMap(this.getErrorAttributes(request, this.isIncludeStackTrace(request, MediaType.TEXT_HTML)));
            response.setStatus(status.value());
            ModelAndView modelAndView = this.resolveErrorView(request, response, status, model);
            return modelAndView != null ? modelAndView : new ModelAndView("error", model);
        }
    
        @RequestMapping
        @ResponseBody//返回json数据
        public ResponseEntity<Map<String, Object>> error(HttpServletRequest request) {
            Map<String, Object> body = this.getErrorAttributes(request, this.isIncludeStackTrace(request, MediaType.ALL));
            HttpStatus status = this.getStatus(request);
            return new ResponseEntity(body, status);
        }
    

    但是它是如何区分是网页浏览,还是其它客户端浏览呢?

可以看到浏览器在访问时的请求头accept属性为text/html,

  1. ErrorPageCustomizer
@Value("${error.path:/error}")
private String path = "/error"; //系统出现错误以后,到error进行请求,
  1. DefaultErrorViewResolver

一旦发生4..或者5..错误,ErrorPageCustomizer定制错误页面。

配置嵌入式Servlet容器

SpringBoot使用的是默认的Servlet容器(Tomcat)

问题:

  1. 如何定制和修改Servlet容器的相关配置

    1. 在application.properties当中修改server相关的配置

    2. server.port=8081
      server.context-path=/crud
      
      //通用的server设置
      server.xxx
      
      //tomcat的设置
      server.tomcat.uri-encoding=UTF-8
      
      
    3. 编写一个EmbeddedServletContainerCustomizer:嵌入式的servlet容器的定制器,来修改servlet容器的配置。

    4. (以上两种方式实际上在底层是一样的,都是EmbeddedServletContainerCustomizer

  2. 能不能支持其他的Servlet容器

注册Servlet、Filter、Listener

Servlet:ServletRegistrationBean

Filter:FilterRegistrationBean

Listener:ServletListenerRegistrationBean

由于SpringBoot默认是以jar包方式启动嵌入式的Servlet容器来启动SpringBoot的web应用,没有web.xml文件。

注册三大组件用如下的方式:

 //注册三大组件
    @Bean
    public ServletRegistrationBean myServlet(){
        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new MyServlet(),"/myServlet");
        return servletRegistrationBean;
    }
posted @ 2019-08-02 17:29  MarkKobs  阅读(273)  评论(0编辑  收藏  举报