详解Servlet

  • Server + Applet
  • Servlet接口(拿到一套规范 我们第一时间 关注接口)
//javax.servlet.Servlet
public interface Servlet{
    public void init(ServletConfig config) throws ServletException;
    public ServletConfig getServletConfig();
    //service方法用于具体处理一个请求
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException;
    public String getServletInfo();
    public void destroy();
}

以上 我们可以看到ServletConfig需要了解一哈
init方法被调用时会接收到一个ServletConfig类型的参数,是容器传进去的。顾名思义,就是Servlet的配置
比如web.xml中

    <!-- spring config -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring-config.xml</param-value>
    </context-param>

<!-- spring character encoding -->
    <filter>
        <filter-name>Character Encoding</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>

这里面init-param标签配置的参数就保存在ServletConfig里面
Spring MVC的Servlet指定配置文件位置的contextConfigLocation也保存于此

  • init方法
    Tomcat里面init方法是在org.apache.catalina.core.StandardWrapper里面的initServlet方法中调用的,ServletConfig传入的是StandardWrapper(里面封装着Servlet)自身的门面类StandardWrapperFacade(https://www.jianshu.com/p/8cda90bdf90b)。其实这也很好理解,Servlet是通过xml文件配置的,在解析xml时就会把配置参数给设置进去,这样StandardWrapper本身就包含配置项了,当然,并不是所有StandardWrapper的内容都是和Config相关的,所以就用了其门面列。
    ServletConfig接口定义
package javax.servlet;

import java.util.Enumeration;

public interface ServletConfig {
    String getServletName();

    ServletContext getServletContext();

    String getInitParameter(String var1);

    Enumeration getInitParameterNames();
}

其中getServletContext()返回的代表这个应用本身(ServletContext其实就是tomcat中context的门面类ApplicationContextFacade)既然ServletContext代表应用本身,那么ServletContext里面设置的参数就可以被当前应用的所有Servlet共享了。平时项目中参数可以保存在Session中,也可以保存在Application中,而后者很多时候就保存在了ServletContext中。
我们可以这么理解,ServletConfig是Servlet级的,而ServletContext是Context级的(也就是Application)。当然ServletContext的功能要强大很多,并不只是保存一下配置参数,不然干脆叫ServletContextConfig好咯

  • GenericServlet
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 什么是Servlet[https://www.jianshu.com/writer#] Servlet是Serve...
    Chandler_珏瑜阅读 7,024评论 4 22
  • Java是一个支持并发、基于类和面向对象的计算机编程语言。下面列出了面向对象软件开发的优点: 代码开发模块化,更易...
    安安静静写代码阅读 4,716评论 0 8
  • Java 面试题 整理自牛客网 什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”? Java虚拟...
    GuaKin_Huang阅读 13,607评论 19 265
  • 面向对象编程(OOP) Java是一个支持并发、基于类和面向对象的计算机编程语言。下面列出了面向对象软件开发的优点...
    hutuxiaogui阅读 4,440评论 0 2
  • 书名:《温暖消逝》作者:迈克尔·雷明、乔治·迪金森金句:科学而理性地对待死亡,学会“向死而生”,让生命变得更有质量...
    精力满满阅读 851评论 0 0