详解Servlet

2018-06-19  本文已影响0人  DerrickWang
//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也保存于此

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好咯

上一篇下一篇

猜你喜欢

热点阅读