springmvc 源码分析(一)

2021-05-06 22:28

阅读:317

标签:col   依赖   doget   get   nbsp   现在   listen   write   loading   

一. servlet 3.0 的使用

  1.1 环境搭建:

         servlet跟spring没有任何关系,我创建一个servlet可以不依赖spring,现在搭建一个纯的servlet项目,并实现简单的类似springMVC的功能:

引入依赖:

   dependency>
      groupId>javax.servlet.jspgroupId>
      artifactId>jsp-apiartifactId>
      version>2.0version>
      scope>providedscope>
    dependency>
    dependency>
      groupId>javax.servletgroupId>
      artifactId>javax.servlet-apiartifactId>
      version>4.0.0version>
      scope>providedscope>
    dependency>
    dependency>
      groupId>javaxgroupId>
      artifactId>javaee-apiartifactId>
      version>8.0.1version>
      scope>providedscope>
    dependency>

 

项目的结构:

               技术图片

 

 

 1.2    web 三大组件的创建 servlet filter listener:

           自己创建的servlet可以直接实现Servlet接口,也可以继承HttpServlet

               

public class DispatcherServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       resp.getWriter().write("test");
    }
}

        自己创建的filter要实现Filter接口:

public class MyFilter implements Filter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest httpServletRequest=(HttpServletRequest) request;
        String userName = httpServletRequest.getParameter("userName");
        if(!"xiaoMing".equals(userName)){
            response.getWriter().write("用户名不正确");
            return;
        }
        chain.doFilter(request,response);
    }
}

    
       自己创建的监听器需要实现下面接口:

技术图片

 

 

public class MyServletContextListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        ServletContext sc = sce.getServletContext();
        //todo 可以用sc注册各种组件

    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {

    }
}

 

 

web组建注册到tomcat容器的三种方式:

     方式1: 在web.xml中配置:

     技术图片

 

 

 

      方式2: servlet3.0的方式,使用注解实现

     技术图片

     技术图片

 

    技术图片

 

 

 

      方式3: 通过servletContex来注册:这里要用到servlet的3.0的一个SPI规范: tomcat容器在启动时,会找到类路径下:  META-INF/services/javax.servlet.ServletContainerInitializer 这个文件,文件名是固定的,为ServletContainerInitializer类的全限定类名,

    文件里面的内容,为实现ServletContainerInitializer该接口的类的全限定类名,tomcat会调用该类的onStartup方法:

      那么我们可以定义一个类来实现它:

     技术图片

 

     然后在类路径下:

     技术图片          技术图片

上面的方式一和方式三在springMVC中有使用到:
    1.3.自定义简单的springMVC功能:

     猜想:

 

 

 

 
 

 

 

    

 

    

    

 

 


   

     


      

 

 

springmvc 源码分析(一)

标签:col   依赖   doget   get   nbsp   现在   listen   write   loading   

原文地址:https://www.cnblogs.com/yangxiaohui227/p/13187719.html


评论


亲,登录后才可以留言!