Servlet小结
 
1、Servlet的init()和构造方法仅仅调用一次,仅仅会在第一次请求时候被调用一次,或者当Servlet配置为启动时候最先加载则会在启动时候调用,配置方法是:<load-on-startup>0</load-on-startup>
 
2、由于Servlet只会调用构造方法一次,因此Servlet是单例的,在Servlet容器中,一个Servlet类只有一个Servlet实例存在。
 
3、Servlet处理请求是方式是多线程的,也就是说,一个请求会开启一个独立线程来处理。因此,在Servlet的处理方法应该注意线程安全。
 
4、Servlet可以配置参数,在Servlet类里可以读取参数。
 
    <init-param>
     <param-name>n1</param-name>
     <param-value>v1</param-value>
    </init-param>
    <init-param>
     <param-name>n2</param-name>
     <param-value>v2</param-value>
    </init-param>
 
    ServletConfig cfg = getServletConfig();
    String p1 = cfg.getInitParameter("n1");
    String p2 = cfg.getInitParameter("n2");
 
5、Servlet有输出流,输出流分两种,一种是字节流,一种是字符流,也可以获取输入流,比如上传文件时候就有输入流,输入流的只能是字节流。
    ServletOutputStream os = response.getOutputStream();
    PrintWriter out = response.getWriter();
    
    ServletInputStream is = request.getInputStream();
 
6、一个Servlet的配置对象ServletConfig对象只有一个,配置的参数也只读一次,在调用init()时候读取Servlet配置,并构建ServletConfig对象。
 
7、ServletConfig对象只能在Servlet中访问,不能被JSP访问。ServletContext对象可以被JSP访问。
 
8、一个Servlet有且只有一个ServletConfig对象,一个Web应用有且仅有一个ServletContext对象,ServletContext对象在JSP中通过application内置对象来访问。
 
9、ServletContext也可也配置自己参数,在web.xml中配置,在任何JSP或Servlet中均能获取到。
<context-param>
    <param-name>cn1</param-name>
    <param-value>cv1</param-value>
</context-param>
<context-param>
    <param-name>cn2</param-name>
    <param-value>cv2</param-value>
</context-param>
 
    ServletContext ctx= getServletContext();
    String c1 = ctx.getInitParameter("cn1");
    String c2 = ctx.getInitParameter("cn2");