servlet随笔

实现servlet的三种方式:
-Servlet
 -GenericServlet
  -HttpServlet
  
【servlet】  
servlet里边的所有方法:
 init(ServletConfig config):servlet对象之后调用一次。
 getServletConfig():可以获取servlet的配置信息。
 getServletInfo():获取servlet的描述信息,返回一个字符串。没啥用。
 service(ServletRequest resuqest,ServletResponse response):每次请求都会调用。
 destroy():servlet对象销毁之前调用一次。
 
 servlet中的方法大多数(innit、service、destroy)不由我们来调用,而是由服务器(如tomcat)来调用。
 servlet中的对象也是由服务器来创建。
要想通过浏览器访问servlet,就需要在web.xml中为servlet配置一个访问路径url:servlet[name,class]、servlet-mapping[name,url]
servlet的特点:
 servlet是在第一次接受请求访问时生成的(基于java反射),在服务器关闭时关闭。
 servlet是单例的,线程不安全。效率高。
ServletConfig:(在init方法中被赋值)
 getServletName():获取servlet配置名。<servlet><servlet-name>xxx</servlet-name></servlet>
 ServletContext getServletContext():获取Servlet上下文对象。
 String getInitparameter(String name):根据名称虎丘初始化参数值。
 Enumeration getInitParameterNames():获取所有的初始化参数名称。
  {<init-param>
   <param-name>p1</param-name>
   <param-value>v1</param-value>
   </init-param>
  }
 
 ServletContext:
  上下文信息,attribute
【GenericServlet】--抽象类,简化Servlet。实现Servlet和ServletConfig。
 本质:将ServletConfig的功能直接委托到自定义在Servlet中。
 主要需要子类实现service()方法即可。
【HttpServlet】--支持http协议的servlet
 service(ServletRequest resuqest,ServletResponse response){
  [类型强转:ServletRequest->HttpServletRequest;ServletResponse->HttpServletResponse]
  service(HttpServletRequest resuqest,HttpServletResponse response){
   if(GET){
    doGet()
   }
   if(POST){
    doPost()
   }
  }
 }
 
 需要用户实现doGet()或doPost()。这两个方法的默认实现时给客户端相应一个405错误。所以有必要的话就需要用户重写此方法。
 
【servlet的细节】
线程安全:
 1、不要在servlet中创建成员,而使用局部变量。
 2、可以创建无状态成员,无变量(即不受多线程影响的成员)。
 3、可以创建有状态的成员,但是内容只读。
servlet的创建:
 默认情况servlet会在第一次被调用是创建(“第一次惩罚”)。如果想保证在容器启动即创建,可以为servlet添加load-on-starup配置。
 <servlet>
  <load-on-starup>0</load-on-starup>--各个servlet之间的创建顺序
 </servlet>
url-pattern:
 一个servlet可以配置多个访问路径。可以使用通配符。
 <serlvet-mappring>
  <servlet-name>xxx</servlet-name>
  <url-pattern>/A</url-pattern>
  <url-pattern>/B</url-pattern>
  <url-pattern>/servlet/*</url-pattern>--路径匹配
  <url-pattern>*.do</url-pattern>--扩展名匹配
  <url-pattern>/*</url-pattern>--匹配所有URL
  (注意:*只能出现在两端,不能出现在中间,如/a/*/c)
 </serlvet-mappring>
web.xml文件的继承:
 tomcat config文件夹下的web.xml是所有项目web.xml的父文件。
  ①里面配置了一个默认的servlet[DefaultServlet]。url-pattern是“/”。是一个返回404的servlet。
  ②还有一个处理jsp的servlet[JspServlet]。功能是将一个动态资源转换为一个静态资源。
  ③session超时时间配置
  <session-config>
   <session-timeout>30</session-timeout>
  </session-config>
  ④扩展名,mine类型。
  <mime-mapping>
   <extension>jpg</extension>
   <mime-type>image/jpeg</mime-type>
  </mime-mapping>
【ServletContext】--上下文对象,一个项目只有一个ServletContext。与天地同寿!也叫Application(应用程序)
 获取ServletContext:
  GenericServlet#getServletContext()
  ServletConfig#getServletContext()
  HttpSession#getServletContext()
  ServletContextEvent#getServletContext()
 功能:
  ①多个Servlet之间的"通信员",资源共享。
  ②获取公共的初始化参数。
   <context-param>
    <param-name>context-param</param-name>
    <param-value>context-value</param-value>
   </context-param>
  ③获取资源信息
   String realPath = servletContext.getRealPath("/index.jsp");--获取绝对路径
   InputStream is = servletContext.getResourceAsStream("/index.jsp");--获取资源流对象  
  
【域对象的功能】
 域对象的功能是在各个servlet之间传递数据。
 ServletContext是javaWeb四大域对象之一:
  PageContext;
  ServletRequest;
  HttpSession;
  ServletContext。
   {
    void setAttribute(String name,Object value);
    Object getAttribute(String name);
    void removeAttribute(String name);
    Enumeration getAttributeNames();
   }
【其他:获取类路径下资源】--重要!重要!重要!
通过ClassLoader获取:
 loader.getResourceAsStream("a/b/temp.txt");--获取src下/a/b包下的temp.txt资源
通过Class获取:
 加"/":
  与ClassLoader一样。class.getResourceAsStream("/a/b/temp.txt")
 不加"/":
  class.getResourceAsStream("temp.txt")。表示获取当前类路径下的资源。
  
【servlet过滤器】
 Fileter:说白了就是一个特殊的servlet。过滤器在Web容器启动的时候创建完成,只创建一次。
 web.xml 中的 filter-mapping 元素的顺序决定了 Web 容器应用过滤器到 Servlet 的顺序。
 
 
 
 
 
 
 
 
 
"我们所要追求的,永远不是绝对的正确,而是比过去的自己更好"
原文地址:https://www.cnblogs.com/zomicc/p/12260331.html