zoukankan      html  css  js  c++  java
  • 手写SpringMVC框架(一)-------项目搭建

    SpringMVC处理请求的大致流程:
    在这里插入图片描述
    我们来开始着手手写一个SpringMVC框架。

    新建一个springMVC项目,流程参见
    SpringMVC框架搭建流程

    引入servlet相关的jar包:

    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
    </dependency>
    

    新建一个servlet:
    模拟springmvc,起名为LgDispatcherServlet

    package com.lagou.edu.mvcframework.servlet;
    
    
    import javax.servlet.http.HttpServlet;
    
    
    /**
    * @author liuyj
    * @Title: LgDispatcherServlet
    * @create 2020-06-11 14:22
    * @ProjectName springmvc-demo
    * @Description: TODO
    */
    public class LgDispatcherServlet extends HttpServlet {
    }
    

    web.xml中注册我们新建的LgDispatcherServlet:

    <servlet>
      <servlet-name>lgmvc</servlet-name>
      <servlet-class>com.lagou.edu.mvcframework.servlet.LgDispatcherServlet</servlet-class>
    </servlet>
    
    
    <servlet-mapping>
      <servlet-name>lgmvc</servlet-name>
      <url-pattern>/*</url-pattern>
    </servlet-mapping>
    

    新建几个自定义注解:

    @Documented
    @Target(ElementType.FIELD)
    @Retention(RetentionPolicy.RUNTIME)
    public @interface LagouAutowired {
         String value() default "";
    }
    
    @Documented
    @Target(ElementType.TYPE)
    @Retention(RetentionPolicy.RUNTIME)
    public @interface LagouController {
         String value() default "";
    }
    
    
    @Documented
    @Target({ElementType.TYPE,ElementType.METHOD})
    @Retention(RetentionPolicy.RUNTIME)
    public @interface LagouRequestMapping {
         String value() default "";
    }
    
    @Documented
    @Target(ElementType.TYPE)
    @Retention(RetentionPolicy.RUNTIME)
    public @interface LagouService {
         String value() default "";
    }
    

    新建demo包下的service及implement实现类及controller并加上相应的注解:
    service:

    package com.lagou.edu.demo.service;
    
    
    public interface IDemoService {
    
    
        String get(String name);
    }
    

    impl:

    package com.lagou.edu.demo.service.impl;
    
    
    import com.lagou.edu.demo.service.IDemoService;
    import com.lagou.edu.mvcframework.annotations.LagouService;
    
    
    @LagouService("demoService")
    public class DemoServiceImpl implements IDemoService {
        @Override
        public String get(String name) {
            System.out.println("service 实现类中的name参数:" + name) ;
            return name;
        }
    }
    

    controller:

    package com.lagou.edu.demo.controller;
    
    
    import com.lagou.edu.demo.service.IDemoService;
    import com.lagou.edu.mvcframework.annotations.LagouAutowired;
    import com.lagou.edu.mvcframework.annotations.LagouController;
    import com.lagou.edu.mvcframework.annotations.LagouRequestMapping;
    
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    
    @LagouController
    @LagouRequestMapping("/demo")
    public class DemoController {
    
    
    
    
        @LagouAutowired
        private IDemoService demoService;
    
    
    
    
        /**
         * URL: /demo/query?name=lisi
         * @param request
         * @param response
         * @param name
         * @return
         */
        @LagouRequestMapping("/query")
        public String query(HttpServletRequest request, HttpServletResponse response,String name) {
            return demoService.get(name);
        }
    }
    

    本节到此结束。
    下一节我们来开始结构开发设计。

    欢迎访问:

    微信公众号(程序员资料站):code_data

  • 相关阅读:
    数据结构与算法分析
    案例分析作业
    实验六——循环结构程序练习总结
    实验五——循环结构学习总结
    实验四——多分支结构及本章总结
    实验三——for 语句及分支结构else-if
    第二次作业及总结——数据类型和运算符
    2-c语言作业
    自然博物馆参观
    2019-2020-1学期 20192409《网络空间安全专业导论》第四周学习总结
  • 原文地址:https://www.cnblogs.com/liuyj-top/p/13225525.html
Copyright © 2011-2022 走看看