zoukankan      html  css  js  c++  java
  • 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
Copyright © 2011-2022 走看看