Servlet源码分析

/**
 * 这是一个接口,自己写的Servlet服务可以直接实现这个接口;如果通过实现该接口来定义Servlet服务,则需要实现所有方法,相对来说比较麻烦,
 * 一般写业务逻辑根本不需要直接实现该接口来写功能
 * 一般继承HttpServlet,其次可以继承GenericServlet,最后当然也可以实现Servlet接口。
 * 方便程度顺序递减。
 * 下面介绍而所有接口,三个感叹号个人感觉是非常重要的地方。
 */
public interface Servlet {

    /**
     * 该方法属于生命周期方法!!!
     * 只会调用一次!!!
     * 是在第一次访问时才调用的!!!之后在整个服务运行过程中都不会再调用,如果服务运行中,该Servlet服务没有被访问过,也不会调用。
     * 在创建对象时调用(构造方法之后调用)。
     * 该方法一般情况下只需要覆写一个空方法就行。这个ServletConfig也是一个接口,在这里不是重点介绍内容,不再赘述,只要记得该参数不需要自己配置
     * 如果使用tomcat,服务启动,web.xml中相关配置参数,可以通过该参数的方法获得。
     * @param config
     * @throws ServletException
     */
    public void init(ServletConfig config) throws ServletException;


    /**
     * 获取该Servlet的配置信息。注意只是本Servlet的配置信息,每一个你写的Servlet都对应一个ServletConfig;
     * 实现空方法即可,基本没用,如果对你来说有用,不如继承GenericServlet类,至于为什么,自行查看GenericServlet类就明白,之后也会专门写文章分析GenericServlet源码。
     * @return
     */

    public ServletConfig getServletConfig();


    /**
     * 这里就是需要处理业务的方法,具体用法不用多说,事实上,一般情况下,只需要在这里实现自己的业务逻辑即可。
     * 这是第二个生命周期方法!!!
     * 每次访问,该方法都会执行!!!
     * @param req 请求
     * @param res 响应
     * @throws ServletException
     * @throws IOException
     */
    public void service(ServletRequest req, ServletResponse res)
            throws ServletException, IOException;


    /**
     * 覆写空方法即可,几乎没有用,说几乎都感觉有点谦虚了。
     * @return
     */
    public String getServletInfo();


    /**
     * 第三个,也是最后一个生命周期方法!!!
     * 只会执行一次,在对象销毁前执行!!!
     * 可以在这里处理服务正常停止时,该Servlet必须在销毁之前执行的逻辑。
     * 一般情况下只需要覆写空方法即可,如果是正常的业务逻辑,一般也不会在这里写服务停止时必须执行完的业务逻辑。
     */
    public void destroy();
}

一个示例:

import javax.servlet.*;
import java.io.IOException;

public class MyServlet01 implements Servlet {
    ServletConfig config;
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        /**
         * TODO 这里实现初始化
         */
        this.config = servletConfig;
    }

    @Override
    public ServletConfig getServletConfig() {
        return this.config;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        // TODO 业务逻辑
    }

    @Override
    public String getServletInfo() {
        return "";
    }

    @Override
    public void destroy() {
        // TODO 销毁
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
SpringMVC 是 Spring 框架的一部分,主要用于构建 Web 应用程序。它采用了基于请求的模型,通过将请求映射到控制器类和处理方法来处理请求,并使用视图解析器来渲染响应。SpringMVC 的核心是 DispatcherServlet,它充当前端控制器,负责协调处理请求,并调用适当的处理器来处理请求。 下面是 SpringMVC 的源码分析: 1. DispatcherServlet:DispatcherServlet 是 SpringMVC 的核心类,它充当前端控制器,负责协调处理请求,并调用适当的处理器来处理请求。DispatcherServlet 的主要任务是将请求委托给适当的处理器来处理,然后将处理结果返回给客户端。 2. HandlerMapping:HandlerMapping 是一个接口,用于将请求映射到控制器类和处理方法。SpringMVC 提供了多种 HandlerMapping 实现,例如 BeanNameUrlHandlerMapping、SimpleUrlHandlerMapping 和 RequestMappingHandlerMapping 等。 3. HandlerAdapter:HandlerAdapter 是一个接口,用于将请求委托给适当的处理器来处理。SpringMVC 提供了多种 HandlerAdapter 实现,例如 SimpleControllerHandlerAdapter、RequestMappingHandlerAdapter 和 HttpRequestHandlerAdapter 等。 4. HandlerInterceptor:HandlerInterceptor 是一个接口,用于在控制器执行之前或之后执行一些操作。SpringMVC 提供了多种 HandlerInterceptor 实现,例如 LocaleChangeInterceptor、ThemeChangeInterceptor 和 HandlerInterceptorAdapter 等。 5. ViewResolver:ViewResolver 是一个接口,用于将逻辑视图名称解析为实际的视图对象。SpringMVC 提供了多种 ViewResolver 实现,例如 InternalResourceViewResolver、FreeMarkerViewResolver 和 VelocityViewResolver 等。 6. HandlerExceptionResolver:HandlerExceptionResolver 是一个接口,用于处理控制器抛出的异常。SpringMVC 提供了多种 HandlerExceptionResolver 实现,例如 SimpleMappingExceptionResolver、AnnotationMethodHandlerExceptionResolver 和 DefaultHandlerExceptionResolver 等。 7. ModelAndView:ModelAndView 是一个类,用于封装控制器处理结果和逻辑视图名称。它包含一个模型对象和一个视图名称。 总之,SpringMVC 的源码分析需要深入了解 Spring Framework 的各个方面,包括 IoC 容器、AOP、Servlet API 等。同时,需要对 Web 应用程序的基本概念和架构有一定的了解。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

_evenif

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

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

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

打赏作者

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

抵扣说明:

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

余额充值