码迷,mamicode.com
首页 > 编程语言 > 详细

springmvc 源码分析(一)

时间:2020-06-24 15:55:11      阅读:64      评论:0      收藏:0      [点我收藏+]

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

一. servlet 3.0 的使用

  1.1 环境搭建:

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

引入依赖:

   <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.0</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>4.0.0</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>javax</groupId>
      <artifactId>javaee-api</artifactId>
      <version>8.0.1</version>
      <scope>provided</scope>
    </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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!