springboot第三天--实战练习--非增删改查

springboot错误处理机制
当发生错误时,会自动判别从哪里发出的请求,返回不同的数据
1、浏览器发出请求,默认返回一个错误页面
原理:浏览器发送的时候,发送到请求头中包含一个Accept:text/html
2、客户端发出请求,默认响应一个json数据
发送到请求头中包含一个Accept:/*

自己定制错误页面
1、有模板引擎的情况下;error/状态码;(将错误页面命名为 错误状态码.html,然后再把这个页面放到error文件夹下),发生对应的错误就会来到该错误页面。
但是如果这样写,会有很多的页面,所以可以使用4xx或者5xx来匹配相关类型的所有错误,精确优先(优先寻找有精确状态码的页面)
页面能够获取的信息有很多,时间戳,状态码,JSR303的信息等等。
2、如果没有模板引擎(或者模板引擎没有对应的错误页面),会去静态资源文件下寻找。
3、如果静态资源下寻找不到,那就是直接是使用默认模板

SpringBoot默认使用Tomcat作为嵌入式Servlet容器
注册Servlet,Filter,Listener.步骤均相同,三大组件的属性设置以及等等都可以设置
SpringBoot在帮我们配置SpringMVC的时候,自动帮我们注册了前端控制器DispatcherServlet
DispatcherServlet默认拦截的请求是:/拦截所有请求,也包括静态资源,但是不包括jsp,/*拦截所有请求,包括jsp.
Servlet
1、创建一个Servlet类,继承HttpServlet

public class MyServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.getWriter().write("Hello,Myservlet");
    }
}

2、注册Servlet(注意加注解)

@Configuration
public class MyServerConfig {
    @Bean
    public ServletRegistrationBean myServlet(){
        ServletRegistrationBean servletRegistrationBean =
                new ServletRegistrationBean(new MyServlet(),"/myServlet");//映射哪个路径
        //即当我们发送‘/myServlet’这个请求时,就访问这个MyServlet
        return servletRegistrationBean;
    }
}

Filter

 @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        System.out.println("Filter已拦截到。。。。。");
        // 这里是对所有拦截到的请求都放行
        //如果有需要,可以进行判断,将其转发到别的页面
        chain.doFilter(request, response);
    }

一定要加上Bean注解,一定要

@Bean
    public FilterRegistrationBean myFilter(){
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
        filterRegistrationBean.setFilter(new MyFilter());
        //下面这个方法的参数是传入一个集合,所以我们使用Arrays.asList()将数组转换为集合
        filterRegistrationBean.setUrlPatterns(Arrays.asList("/hello2","/myServlet"));
        return filterRegistrationBean;
    }

配置其他的嵌入式Servlet容器
1、把默认的tomcat的依赖排除
2、引入需要使用的Servlet的容器依赖
执行上面步骤的原理:
1、SpringBoot根据导入的依赖的情况进行判断,给容器中添加相应Servlet的定制器工厂,然后这个工厂会创建出指定的Servlet容器(默认是tomcat)
2、只要这个容器工厂中的组件创建对象,就会触发这个嵌入式定制器的后置处理器,只要是嵌入式工厂,后置处理器就会工作
3、后置处理器从容器中获取所有的Servlet容器的定制器,然后调用定制器的定制方法,(方法里面设置了端口号等等),这样Servlet就启动了

嵌入式Servlet容器启动的原理
1、SpringBoot应用启动,运行run方法
2、然后执行refreshContext(context)方法,SpringBoot刷新IOC容器(创建IOC容器,并且初始化容器,创建容器中的每一个组件),并且会进行判断,看是否是Web应用,来创建不同的容器
3、refresh(context) ,刷新刚才创建好的ioc容器
4、refresh()会调用onrefresh(),web容器中重写了onfresh()方法
5、web的ioc容器就会创建嵌入式的Servlet容器,然后获取Servlet容器工厂(默认是tomcat),这个tomcat Servlet容器工厂就创建tomcat Servlet容器,惊动了后置处理器,后置处理器就定制容器的相关配置。
6、然后再使用嵌入式容器工厂来获取嵌入式Servlet容器
7、嵌入式Servlet容器创建对象,并启动Servlet容器。

先启动Servlet嵌入式容器(先启动tomcat),然后再将ioc容器中没有创建的对象获取出来(我们自己写的一些Servlet,Filter,Listrner等组件)
ioc容器启动的时候会创建我们的Servlet容器

不使用嵌入式Servlet容器
SpringBoot使用IDEA创建Web项目(不使用内嵌tomcat服务器)
原理:jar包:执行SpringBoot主类的main方法,启动ioc容器,创建嵌入式Servlet容器。
war包:启动服务器,服务器启动SpringBoot应用,启动ioc容器。
不使用嵌入式创建项目,会多出来一个类,如下,当我们启动服务器的时候,就会自动启动添加到tomcat上的springboot应用


public class ServletInitializer extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
    //这里传入的是SpringBoot的主类
        return application.sources(SpringBootJspApplication.class);
    }

}

猜你喜欢

转载自blog.csdn.net/ilikejj0/article/details/81298369
今日推荐