欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

SpringBoot(1)

程序员文章站 2022-06-04 11:32:12
SpringBoot 8/2 CRUD 1. 发送put请求修改数据有三个步骤: 1. SpringMVC中配置HiddenHttpMethodFilter 2. 页面上创建一个post请求(form标签只能写get和post) 3. 创建一个input项目,name="_method",值就是我们 ......

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);
        }

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

SpringBoot(1)

可以看到浏览器在访问时的请求头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;
    }