Core Servlets and JSP Volume I 读后感 Servlet(三)

一 Servlet工作
   (1) 接收客户端显示数据,
   (2) 接收HTTP隐式数据(报头、cookie),
   (3) 负责与后台交互(EJB,WebService等),
   (4) 发送显示数据到客户端,
   (5) 发送隐式数据到客户端(如cookie信息)。

二 传统CGI技术与Servlet
 效率:
  并发(多进程"CGI",多线程"servlet"),
  载入内存(运行一次CGI载入一次,只保留一份类)
  缓存机制(不缓存"CGI",缓存"servlet")
 servlet基于java平台,使这项技术
  强大、安全、可移植、廉价、主流、便利

三 Servlet与JSP
   Serlet:编译jsp代码、Request过来的代码,然后Response给客户端Html代码。
   JSP:jsp其实就是Servlet的另外一种表达方式,只不过jsp更易于网页设计(表现),而Servlet更易于流程处理。
 
四 servlet的生命周期
   servlet创建:一般在第一次访问URL的时创建,也可以配置web.xml在服务器加载的时候创建。
   (1) init方法 "在首次servlet的时候,加载此方法,只执行一次"
        常规初始化(初始化参数)。
   (2) service方法 "每次访问创建一个线程调用此方法"
       service:提供GET,POST,PUT,HEAD,OPTION,TRACE请求的自动支持。
   (3) doXxx方法 "如doPost/doGet方法"
        常用请求:
        GET:正常的URL请求,没有指定METHOD的HTML表单
       POST:METHOD=POST的HTML表单。
   PUT,DELET,OPTIONS,TRACE,HEAD
   (4) destroy

五 servlet SingleThreadModel模式
   servlet可以通过SingleThreadModel的方式去独立访问一个servlet。
   SingleThreadModel针对高并发servlet有非常大劣势:
   (1) servlet访问排队时间长,导致IO堵塞。
   (2) servlet的规范允许容器启动多个servlet实例以线程池的方式去访问,将导致同样的同步问题,或数据的不共享等问题。
   解决方案:对于高并发的servlet,最好还是使用synchronized的方式去处理代码同步块儿。
  
六 Servlet 核心 API
  HttpServletRequest 
  1.request封装:
    Request-Line封装
    Request-Line =Method SP Request-URL SP HTTP-Version CRLF
    Method:最主要用到的是GET 和 POST方法
            public abstract String getMethod();
    Request-URL:URL地址
            public abstract String getRequestURI();
      public abstract StringBuffer getRequestURL();
      public abstract String getQueryString();//GET请求的查询字符串
    SP:空格
    HTTP-Version:HTTP版本
    CRLF:空行
   
    报头封装 
        public abstract String getHeader(String s);
     public abstract Enumeration getHeaders(String s);
     public abstract Enumeration getHeaderNames();
     
     //报头便利封装
     public abstract String getAuthType();
     public abstract long getDateHeader(String s);
     public abstract int getIntHeader(String s);
  public abstract String getCharacterEncoding();
     public abstract String getContentType();
     public abstract void setCharacterEncoding(String s);
     public abstract void setContentLength(int i);
     public abstract void setContentType(String s);
   
  public abstract Cookie[] getCookies();
     public abstract HttpSession getSession();
   
    Servlet信息
     public abstract String getPathInfo();
     public abstract String getPathTranslated();
     public abstract String getContextPath();
     public abstract String getServletPath();
 
     public abstract ServletOutputStream getOutputStream() throws IOException;
  public abstract PrintWriter getWriter() throws IOException;

  HttpServletResponse
  2.response封装
      //状态行封装:
      Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF
      HTTP-Version:HTTP版本
      Status-Code:设置状态代码 public abstract void setStatus(int i);
      eason-Phrase:原因短语
                       
        //报头封装
  public abstract void addCookie(Cookie cookie);
     public abstract boolean containsHeader(String s);
     
     public abstract void setDateHeader(String s, long l);
     public abstract void addDateHeader(String s, long l);
 
     public abstract void setHeader(String s, String s1);
     public abstract void addHeader(String s, String s1);
 
     public abstract void setIntHeader(String s, int i);
     public abstract void addIntHeader(String s, int i);
 
  //设置服务器错误| 重发状态代码
     public abstract void sendError(int i, String s)
         throws IOException;
     public abstract void sendRedirect(String s)
         throws IOException;
  
  //地址编码
     public abstract String encodeURL(String s);
     public abstract String encodeRedirectURL(String s);
七  绝对URL
    对于HTML/JSP标签中的url,必需重整个web server应用位置开始
    对于serverlt forward的url,必需相对于当前应用的位置开始

posted on 2009-11-05 21:32  john.huang  阅读(543)  评论(0编辑  收藏  举报

导航