美文网首页
详解Servlet

详解Servlet

作者: DerrickWang | 来源:发表于2018-06-19 17:41 被阅读0次
    • 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.haomeiwen.com/subject/ddczeftx.html