1 HTTP协议特点
 
1)客户端->服务端(请求request)有三部份
a)请求行
b)请求头
c)请求的内容,如果没有,就是空白字符  
 
2)服务端->客户端(响应response)有三部份
a)响应行
b)响应头
c)响应的内容,如果没有,就是空白字符  

*2 HTTP请求头和响应头含义
 
1)请求(客户端->服务端[request])
    GET(请求的方式)
/books/java.html(请求的目标资源) HTTP/1.1(请求采用的协议和版本号)
    Accept:
*/*(客户端能接收的资源类型)
    Accept-Language:
en-us(客户端接收的语言类型)
    Connection:
Keep-Alive(维护客户端和服务端的连接关系)
    Host:
localhost:8080(连接的目标主机和端口号)
    Referer:
http://localhost/links.asp(从来于哪里)
    User-Agent:
Mozilla/4.0(客户端版本号的名字)
    xxxxxxxxxxxxxxx: gzip,
deflate(客户端能接收的压缩数据的类型)
    If-Modified-Since: Tue,
11 Jul 2000 18:23:51 GMT(缓存时间) 
   
Cookie(客户端暂存服务端的信息)
    Date: Tue, 11 Jul 2000
18:23:51 GMT(客户端请求服务端的时间)
 
2)响应(服务端->客户端[response])
    HTTP/1.1(响应采用的协议和版本号)
200(状态码) OK(描述信息)
   
302(客户端请求服务端,但服务端没有对应的资源,服务端要客户端再次请求找其它的服务端,即客户端二次请求,重定向) 
   
307(客户端请求服务端,但服务端没有对应的资源,服务端自行再次请求找其它的服务端,即客户端一次请求,转发)
   
304(客户端请求服务端,此时客户端缓存中有,无需再从服务端下载新的内容,服务端叫客户端自行找缓存,优化)
   
500(客户端请求的资源,服务端存在,但在执行时出错)
    Location:
http://www.baidu.com(服务端需要客户端访问的页面路径) 
    Server:apache
tomcat(服务端的Web服务端名)
    Content-Encoding:
gzip(服务端能够发送压缩编码类型) 
    Content-Length:
80(服务端发送的压缩数据的长度) 
    Content-Language:
zh-cn(服务端发送的语言类型) 
    Content-Type: text/html;
charset=GB2312(服务端发送的类型及采用的编码方式)
    Last-Modified: Tue, 11
Jul 2000 18:23:51 GMT(服务端对该资源最后修改的时间)
    Refresh:
1;url=http://www.it315.org(服务端要求客户端1秒钟后,刷新,然后访问指定的页面路径)
    Content-Disposition:
attachment; filename=aaa.zip(服务端要求客户端以下载文件的方式打开该文件)
    Transfer-Encoding:
chunked(分块传递数据到客户端)  
    Set-Cookie:SS=Q0=5Lb_nQ;
path=/search(服务端发送到客户端的暂存数据)
    Expires:
-1//3种(服务端禁止客户端缓存页面数据)
    Cache-Control:
no-cache(服务端禁止客户端缓存页面数据)  
    Pragma:
no-cache(服务端禁止客户端缓存页面数据)   
    Connection:
close(1.0)/(1.1)Keep-Alive(维护客户端和服务端的连接关系)  
    Date: Tue, 11 Jul 2000
18:23:51 GMT(服务端响应客户端的时间)
  
  3)总结
   
想让浏览器有何种行为,服务端只能通过响应头的方式来设置
   
想让服务器知道何种行为,浏览器只能通过请求头的方式来设置
  

  2)常用的提交方式
    a)GET
特点:请求参数无论多少,都会根着URL后传递到服务端,以明文方式传递
   
 GET方式传递有大小限制
   
 GET方式传递信息不安全

    b)POST
特点:
   
 请求参数无论多少,都不会根着URL后传递到服务端,而是以参数形式在请求体中传递到服务端
   
 POST方式传递无大小限制
   
 POST方式传递信息相对安全
     
     
  
*3 Servlet入门
 
1)Servlet是SUN公司基于Java技术的一个开发动态资源支持的规范,以接口的形式出现,最终的实现类与服务器有关
 
2)Servlet是一种特殊的Java类,运行时服务端/容器中,接收每一个客户端的请求并响应,尊循HTTP协议
 
3)Servlet手工开发过程,参见<<手工创建Servlet的全过程.txt>>

*4 开发Servlet
  1)类 实现 Servlet接口 在web.xml中配置
   
Demo11[servlet名字,可以任意]
   
cn.itcast.web.servlet.Demo11[servlet全路径]
 
     
 
 
 Demo11[servlet名字,必须和上述一致]
 
 /qq[以/开头,提供外界用户访问的路径]
     
 
  2) 类 扩展 GenericServlet 在web.xml中配置
   
 如果需要输出中文,需要在Servlet中如下设置:
//服务端通知浏览器以指定的编码方式来显示中文
response.setContentType("text/html;charset=UTF-8");
response.getWriter().write("欢迎学习JavaServlet程序");

  3) 类 扩展 HttpServlet 在web.xml中配置
   
 HttpServlet已经覆写service()方法,程序员无需再次覆写,只需覆写doXxxx()方法

5 Servlet工作原理和生命周期
 
1)当浏览器第一次访问Servlet时,服务器会根据浏览器访问的路径,例如/Demo2,在web.xml文件中找到该Servlet的全路径,
   
 进行反射。
  2)调用init()为Servlet作初始化工作
  3)调用doXxxxx()为浏览器响应
 
4)如果浏览器再次访问相同的Servlet,直实现从服务端维护的Servlet实例集合中取得对应的实现,为浏览器响应
  5)同一个Servlet实例,在服务端只有一个
 
6)服务器在决定销毁Servlet实例之前,调用destory()方法,每个Servlet实例只会调用一次,在重新部署情况下 

*6 Servlet细节
 
1)浏览器访问的url-pattern只是一个符合格式的任意字符串,以/开头
 
2)一个Servlet的url-pattern可以是1个或多个,有二种形式;
a)*.xx
     
  b)/xx/*
     
  注意:/*不能一起直接使用
  3)/*和*.do的映射关系,*.do最后
 
4)程序员编写的Servlet其实是由tomcat容器中的Servlet引擎来处理的,引擎会产生对应的HttpServletRequest和
   
HttpServletResponse对应传入到Servlet的doXxxx()方法中
  5)通过在web.xml文件中配置代码,让Servlet在部署时就创建
   
     
Demo21
     
cn.itcast.web.servlet.Demo21
     
1
 
 
数字小的先加载,数据大的后加载,最小为0,如果为负数和没有设置一样,需要在浏览器第一次访问时创建 
 
6)url-pattern为/的servlet是一个缺省的servlet,用于处理当前web应用下,访问路径错误的请求 
   
任何web服务端都有一个缺省的servlet来处理
  7)每个线程会共享同一个Servlet的实例变量,所以要对敏感数据加锁
    产生线程安全条件如下:
a)单例
  &&
b)实例变量
  &&
     
  c)实例变量进行修改操作
   
通过加锁的方式,对敏感数据块进行代码同步(正道)
    
   
如果你实现SingleThreadModel来解决线程安全有二个不足之处:
a)SingleThreadModel接口的值与web服务器最多接收的线程数有关,可能会出现大值变小值的情况
b)SingleThreadModel接口如果发现某个线程正在占用该Servlet实例,会自动创建一个新的Servlet实例为浏览器服务,
  这就违背了Servlet单例的原则
   

7 ServletConfig对象
 
1)想让当前Servlet读取一些在web.xml文件配置的初始化参数,可以使用ServletConfig对象,它是Servlet运行时的配置对象
 
2)init(ServletConfig)方法由Web容器调用,调用时,会传入与容器相关的ServletConfig接口的实现

 
 关键代码:(前提:web.xml中有设置 
    tel
    1363233****
   
   
    email
    runsin0723@163.com
    )数据
String tel = config.getInitParameter("tel");
if(tel!=null){
System.out.println("tel=" tel);
}
Enumeration enums = config.getInitParameterNames();
while(enums.hasMoreElements()){
String key = enums.nextElement();
String value = config.getInitParameter(key);
System.out.println(key "-" value);
}

JAVA-Web05的更多相关文章

  1. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  2. Java第三阶段学习(十三、会话技术、Cookie技术与Session技术)

    一.会话技术  1. 存储客户端状态 会话技术是帮助服务器记住客户端状态(区分客户端)的.  2. 会话技术 从打开一个浏览器访问某个站点,到关闭这个浏览器的整个过程,称为一次会话.会话技术就是记录这 ...

  3. 故障重现(内存篇2),JAVA内存不足导致频繁回收和swap引起的性能问题

    背景起因: 记起以前的另一次也是关于内存的调优分享下   有个系统平时运行非常稳定运行(没经历过大并发考验),然而在一次活动后,人数并发一上来后,系统开始卡. 我按经验开始调优,在每个关键步骤的加入如 ...

  4. Elasticsearch之java的基本操作一

    摘要   接触ElasticSearch已经有一段了.在这期间,遇到很多问题,但在最后自己的不断探索下解决了这些问题.看到网上或多或少的都有一些介绍ElasticSearch相关知识的文档,但个人觉得 ...

  5. 论:开发者信仰之“天下IT是一家“(Java .NET篇)

    比尔盖茨公认的IT界领军人物,打造了辉煌一时的PC时代. 2008年,史蒂夫鲍尔默接替了盖茨的工作,成为微软公司的总裁. 2013年他与微软做了最后的道别. 2013年以后,我才真正看到了微软的变化. ...

  6. 故障重现, JAVA进程内存不够时突然挂掉模拟

    背景,服务器上的一个JAVA服务进程突然挂掉,查看产生了崩溃日志,如下: # Set larger code cache with -XX:ReservedCodeCacheSize= # This ...

  7. 死磕内存篇 --- JAVA进程和linux内存间的大小关系

    运行个JAVA 用sleep去hold住 package org.hjb.test; public class TestOnly { public static void main(String[] ...

  8. 【小程序分享篇 一 】开发了个JAVA小程序, 用于清除内存卡或者U盘里的垃圾文件非常有用

    有一种场景, 手机内存卡空间被用光了,但又不知道哪个文件占用了太大,一个个文件夹去找又太麻烦,所以我开发了个小程序把手机所有文件(包括路径下所有层次子文件夹下的文件)进行一个排序,这样你就可以找出哪个 ...

  9. Java多线程基础学习(二)

    9. 线程安全/共享变量——同步 当多个线程用到同一个变量时,在修改值时存在同时修改的可能性,而此时该变量只能被赋值一次.这就会导致出现“线程安全”问题,这个被多个线程共用的变量称之为“共享变量”. ...

  10. Java多线程基础学习(一)

    1. 创建线程    1.1 通过构造函数:public Thread(Runnable target, String name){}  或:public Thread(Runnable target ...

随机推荐

  1. matlab新手入门(二)(翻译)

    矩阵和数组 MATLAB是“矩阵实验室”的缩写.虽然其他编程语言大多数一次使用数字,但MATLAB®主要用于整个矩阵和数组.所有MATLAB变量都是多维数组,无论数据类型如何.矩阵是通常用于线性代数的 ...

  2. 反射学习:(System.Reflection)

    反射为了动态(运行时动态) 原理:读取metadata(?)   Assembly assembly = Assembly.Load("TestReflections");//反射 ...

  3. SpringMVC基础配置及使用

    SpringMVC基础配置及使用 SpringMVC:1.SpringMVC和Spring的关系:    软件开发的三层架构: web层[表示层.表现层]---->Service层----> ...

  4. cat命令详解及here doc

    以下内容转自:http://www.cnblogs.com/peida/archive/2012/10/30/2746968.html cat命令的用途是连接文件或标准输入并打印.这个命令常用来显示文 ...

  5. python 模拟事件触发机制

    EventManager.py # -*- encoding: UTF-8 -*- # 系统模块 from queue import Queue, Empty from threading impor ...

  6. 洛谷P2647 最大收益

    P2647 最大收益 题目描述 现在你面前有n个物品,编号分别为1,2,3,……,n.你可以在这当中任意选择任意多个物品.其中第i个物品有两个属性Wi和Ri,当你选择了第i个物品后,你就可以获得Wi的 ...

  7. 洛谷P1137 旅行计划

    P1137 旅行计划 题目描述 小明要去一个国家旅游.这个国家有N个城市,编号为1-N,并且有M条道路连接着,小明准备从其中一个城市出发,并只往东走到城市i停止. 所以他就需要选择最先到达的城市,并制 ...

  8. 洛谷 P2731 骑马修栅栏 Riding the Fences

    P2731 骑马修栅栏 Riding the Fences 题目背景 Farmer John每年有很多栅栏要修理.他总是骑着马穿过每一个栅栏并修复它破损的地方. 题目描述 John是一个与其他农民一样 ...

  9. Python之for循环和while循环

    Python中有两种循环,分别为:for 循环和 while 循环. 循环语句就是在某种条件下,循环的执行某段代码块,并在符合条件的情况下跳出该段循环, 其目的是处理想要进行处理的相同任务.它的关键词 ...

  10. React入门看这篇就够了

    摘要: 很多值得了解的细节. 原文:React入门看这篇就够了 作者:Random Fundebug经授权转载,版权归原作者所有. React 背景介绍 React 入门实例教程 React 起源于 ...