web-servlet servlet源码解析

来源:互联网 发布:淘宝p图一般多少钱啊 编辑:程序博客网 时间:2024/05/22 04:42

其实提到servlet 大家做Java web的都不陌生了。但是现在一般都直接使用springmvc 很少去关注这个东西了。最近也是在看springmvc的源码,正好记录了一些东西 给大家分享一下吧。

这里写图片描述

下面来看一下servlet源码下面都写了啥。

    /**     * 获取servlet名称     */    public String getServletName();    /**     * 获取servlet上下文对象 下面看看这个对象下面都有啥     */    public ServletContext getServletContext();    /**     * 根据名称获取到初始化参数的值 value     */    public String getInitParameter(String name);    /**     * 获取初始化参数的集合 这边他是用的Enumeration     */    public Enumeration<String> getInitParameterNames();

看一下Servlet下面的内容 其实还是很简单的一些规范,初始化 销毁 在获取当前信息 还有配置信息:

    /**     * 处理花 在服务启动的时候调用  地球人都知道的,为什么? 后期研究     */    public void init(ServletConfig config) throws ServletException;    /**     * 获取上面对象     */    public ServletConfig getServletConfig();    /**     * 获取servlet信息     */    public String getServletInfo();    /**     * 销毁对象     */    public void destroy();

下面看到 GenericServlet 实现了上面的2个接口,

public abstract class GenericServlet     implements Servlet, ServletConfig, java.io.Serializable

实现的代码有点多 就补贴代码了。大概讲述一下:

1:加载当前jar javax.servlet.LocalStrings这个文件夹下面的所有的配置文件 读取, 配置文件内容大概如下:

err.not_iso8859_1=Not an ISO 8859-1 character: {0}err.servlet_config_not_initialized=ServletConfig has not been initializedvalue.true=truevalue.false=false

大致实现了上面2个接口定义下来的规范,

有人说 :怎么获取的初始化的参数以及value。
答:首先获取了ServletConfig对象 然后调用ServletConfig的对应的方法。 下面看一段代码

public void init(ServletConfig config) throws ServletException {    this.config = config;    this.init();}public void init() throws ServletException {} public String getServletName() {        ServletConfig sc = getServletConfig();        if (sc == null) {            throw new IllegalStateException(                lStrings.getString("err.servlet_config_not_initialized"));        }        return sc.getServletName();    }

下面看一下大家最熟悉的HttpServlet

public abstract class HttpServlet extends GenericServlet
    private static final String METHOD_DELETE = "DELETE";    private static final String METHOD_HEAD = "HEAD";    private static final String METHOD_GET = "GET";    private static final String METHOD_OPTIONS = "OPTIONS";    private static final String METHOD_POST = "POST";    private static final String METHOD_PUT = "PUT";    private static final String METHOD_TRACE = "TRACE";

HttpServlet 下面是把 services方法拆分了8种方式 并且做了一些验证。