zoukankan      html  css  js  c++  java
  • 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;
        }
    
    keep going
  • 相关阅读:
    day09总结
    day09作业
    删除循环中选中的id
    数组套数组 获取数据
    vue for each循环出来数组的某一项 再重新合并成一个新数组
    全是没见过的
    vue element 分页
    解决iphonex屏幕过长背景图片或者放在元素里面的图片不能铺满的问题
    实在自动现在APK,微信跳浏览器下载
    js判断是否在微信浏览器中打开
  • 原文地址:https://www.cnblogs.com/MarkKobs-blog/p/11290051.html
Copyright © 2011-2022 走看看