1.从零开始写一个spring mvc框架之 - 可行性分析

写在前面

整个项目基于servlet 3.0开发,纯粹用于学习spring mvc框架原理的。框架设计的使用方式也尽量是参考spring mvc的,配置全部使用注解做,不要xml。由于作者本人水平有限(第一次写博客),代码若有错误或是遗漏,欢迎指正,再或是有更好的实现,更是跪求指教了。(联系qq1455066227@gmail.com)

本节内容

  1. 怎么做容器的初始化(ServletContextListener)
  2. 明确控制器的分发流程 (IServlet)

怎么做容器的初始化

其实对servlet稍微熟悉的同学就知道了,初始化的工作在servlet-api一直都有提供。只要我们实现ServletContextListener这个接口就OK了。而servlet 3.0后可以支持使用注解来配置WebListener,而不用写入web.xml中。具体代码如下

@WebListener
public class Application implements ServletContextListener
{
    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent)
    {
        // todo: 这边servlet容器启动完毕,可以做相关的初始化工作
    }

    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent)
    {

    }
}
复制代码

明确控制器的分发流程

我们知道spring mvc中有一个默认的Servlet叫做dispatcherservlet,所有的控制器都是从这个servlet中进去的,所以我们也可以使用一个Servlet,这里我把他取名叫IServlet,照样使用注解来配置,代码如下:

@WebServlet(urlPatterns = "/")
public class IServlet extends HttpServlet
{
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException
    {
        // todo: 其实设置urlPatterns = "/"后,除了jsp的静态资源也会被匹配到这个servlet中,需要处理。

        req.setCharacterEncoding("UTF-8");
        resp.setContentType("text/html; charset=utf-8");
        IServletInitiator.allocateRequest(req, resp); // 这里我们对url进行匹配分发到对应的控制器中的路由
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException
    {
        doPost(req, resp);
    }

    @Override
    protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws IOException
    {
        doPost(req, resp);
    }

    @Override
    protected void doDelete(HttpServletRequest req, HttpServletResponse resp) throws IOException
    {
        doPost(req, resp);
    }

    @Override
    protected void doHead(HttpServletRequest req, HttpServletResponse resp) throws IOException
    {
        doPost(req, resp);
    }

    @Override
    protected void doOptions(HttpServletRequest req, HttpServletResponse resp) throws IOException
    {
        doPost(req, resp);
    }

    @Override
    protected void doTrace(HttpServletRequest req, HttpServletResponse resp) throws IOException
    {
        doPost(req, resp);
    }
}
复制代码

其实只要这两个东西可行,项目基本上就可以继续了。

转载于:https://juejin.im/post/5b17f1d05188257d53145533

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值