码迷,mamicode.com
首页 > 其他好文 > 详细

学习Servlet

时间:2015-07-24 12:28:58      阅读:76      评论:0      收藏:0      [点我收藏+]

标签:

学习完servlet然后写一个关于他它的总结,加深自己的印象,也希望读者能在其中学到点东西

 


HTTP协议
HTTP(Hypertext Transfer Protocol, 超文本传输协议)
    
   1 HTTP是以明文方式发送数据的
    
   2 用于从WWW服务器传输超文本到本地浏览器的传输协议。 是Web应用程序的基础
    
   3 HTTP协议是以TCP/IP为基础的高层协议。
    
   4 现在广泛使用的版本HTTP/1.1

   5 Http的缺省端口是80Http特点是:无状态、无连接

      


Servelet简介

    1 Servlet是服务器小应用程序
 
    2 用来完成B/S架构下,客户端请求的响应处理

    3 平台独立,性能优良,能以线程方式运行

    4 Servlet API为Servlet提供了统一的编程接口

    5 Servlet一般在容器中运行

    常见的Servlet容器
        Tomcat (在此用此容器)
        Jetty / Resin



tomcat启动与停止
    startup.bat
    shutdown.bat
    catalina.bat start
    catalina.bat stop /  shutdown.bat
    catalina debug 调试错误的时候
    run exit help
    设置环境变量JAVA_HOME(启动tomcat失败一般都是环境变量设置有问题)
     


tomcat目录结构

     bin/             二进制可执行文件和脚本
     catalina start stop
     catalina debug run exit
     common/    Catalina本身和web应用可加载的类目录
     conf/           配置文件目录
     logs/           日志目录
     server/        服务器所需的类库目录
     shared/        Web App共享的类库
     webapps/    Web应用所存放的目录applications
     work/           Tomcat的工作目录(存放jsp产生的class文件)
    temp/        存放临时产生的文件



Servlet的生命周期

  生命全过程:
       加载 ClassLoader
       实例化 new
       初始化 init(ServletConfig) 仅执行一次
       处理请求 service doGet doPost
       退出服务 destroy()

只有一个对象


API中的过程:
    init()//只执行一次, 第一次初始化的时候
    public void init(ServletConfig config) throws ServletException
    service()
    public void service(ServletRequest req, ServletResponse res) throws ServletException, java.io.IOException
    destroy()//webapp 退出的时候
    public void destroy()

 

 

doGet和doPost的区别:

Get方法:用户数据作为 URL 中的查询字符串传递给服务器,而body中的数据为空
Post方法:用户数据在body中传输给服务器

Get方法所传输的数据量有限制,Post方法则没有限制,当不会修改服务器端的数据时,应该使用 doGet() 方法
Get方法所传输的数据在url中可见,post则不可见,当需要修改服务器端的数据时,应该使用 doPost() 方法

 
Servelet的类层次结构

    Servelet创建的文件默认继承于HTTPServlet
    HttpServlet实现了javax.servlet.GenericServlet接口
    HttpServlet类是专门处理基于HTTP协议的Servlet
   Servlet还可以处理http以外的其他处理请求。

 

Cookie概述

          1 cookie 是当你浏览每个网站时,由WEB服务器置于你硬盘上的一个非常小的文本文件,它可以记录你的用户ID号、密码、浏览过的网页、停留的时间等等。
          2 服务器通过cookie的响应头将cookie发送给客户机,其形式为名称=值
          3 客户机则以文件的形式将cookie存放在本地硬盘上,具体存储位置与浏览器相关
          4 Cookie就是这样的一种机制。它可以弥补HTTP协议无状态的不足。
          5 Cookie在客户端是由浏览器来管理的,浏览器判断一个网站是否能操作另一个网站Cookie的依据是域名。Google与Baidu的域名不一样,因此Google不能操作Baidu.

 


Cookie的有效期


      Cookie的maxAge决定着Cookie的有效期,单位为秒(Second)。Cookie中通过getMaxAge()方法与setMaxAge(int maxAge)方法来读写maxAge属性。
      如果maxAge属性为正数,则表示该Cookie会在maxAge秒之后自动失效。
      如果maxAge为负数,则表示该Cookie仅在本浏览器窗口以及本窗口打开的子窗口内有效,关闭窗口后该Cookie即失效。

 

 


Cookie原理

        Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。



Cookie使用步骤

   使用Cookie:

      1 创建cookie对象:
        Cookie color = new Cookie(“color”,”red”);

      2 在响应中加入cookie:
          response.addCookie(color);

      3 通过request取回cookie
          Cookie[] cookie = request.getCookies();


Cookie示例
   示例:记录用户访问次数
   

 Cookie[] c = request.getCookies();

int count = 1;

if(c!=null) {      for(int i=0;i<c.length;i++) {
    
     Cookie accountCookie = c[i];
    
     if(accountCookie.getName().equals("accountCount")) {
        
        count = Integer.parseInt(accountCookie.getValue())+1;
        
        break;
        
        }
    }
}
        
response.addCookie(new Cookie("accountCount",String.valueOf(count)));



Session机制

      除了使用Cookie,Web应用程序中还经常使用Session来记录客户端状态。Session是服务器端使用的一种记录客户端状态的机制,使用上比Cookie简单一些,相应的也增加了服务器的存储压力。

 


 什么是Session?

        Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。
      如果说Cookie机制是通过检查客户身上的“通行证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份。Session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了。

 

Session概述
     1 服务器的一块内存(存key-value)
     2 和客户端窗口对应(子窗口)(独一无二)
     3 客户端和服务器有对应的SessionID
     4 客户端向服务器端发送SessionID的时候两种方式:
           (1)cookie(内存cookie)
           (2)rewriten URL
     5 浏览器禁掉cookie,就不能使用session(使用cookie实现的session)
     6 如果想安全的使用session(不论客户端是否禁止cookie),只能使用URL重写(大大增加编程负担),所以很多网站要求客户端打开cookie

 

 实现用户登录

       Session对应的类为javax.servlet.http.HttpSession类。每个来访者对应一个Session对象,所有该客户的状态信息都保存在这个Session对象里。Session对象是在客户端第一次请求服务器的时候创建的。Session也是一种key-value的属性对,通过getAttribute(Stringkey)和setAttribute(String key,Objectvalue)方法读写客户状态信息。Servlet里通过request.getSession()方法获取该客户的Session


Session的生命周期

       Session保存在服务器端。为了获得更高的存取速度,服务器一般把Session放在内存里。每个用户都会有一个独立的Session。如果Session内容过于复杂,当大量客户访问服务器时可能会导致内存溢出。因此,Session里的信息应该尽量精简。
       Session在用户第一次访问服务器的时候自动创建。需要注意只有访问JSP、Servlet等程序时才会创建Session,只访问HTML、IMAGE等静态资源并不会创建Session。如果尚未生成Session,也可以使用request.getSession(true)强制生成Session。
       Session生成后,只要用户继续访问,服务器就会更新Session的最后访问时间,并维护该Session。用户每访问服务器一次,无论是否读写Session,服务器都认为该用户的Session“活跃(active)”了一次。
   

Session的有效期

      由于会有越来越多的用户访问服务器,因此Session也会越来越多。为防止内存溢出,服务器会把长时间内没有活跃的Session从内存删除。这个时间就是Session的超时时间。如果超过了超时时间没访问过服务器,Session就自动失效了。





学习Servlet

标签:

原文地址:http://www.cnblogs.com/lianggnail/p/4672869.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!