手写SpringMVC框架(一)-------项目搭建

本文介绍了手写SpringMVC框架的初步步骤,包括新建项目、引入servlet库、创建自定义注解、设计service和controller。通过跟随教程,读者可以了解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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员资料站

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值