java第二十九天(Http协议&Servlet)

Http协议

1.安装抓包工具HttpWatch(IE插件)

    直接安装,桌面是没有东西出来的,打开IE浏览器,右键勾选全部显示;栏,点工具http watch professional出现如下界面表示已经安装好css

2.http使用HttpWatch抓包

用IE浏览器打开tomcat首页html

  • examples--servelet example --- request paramaters请求参数----excute---编辑数据提交
  • 再打开这个界面,输入数据,点提交以后点rcord捕获再点record下面第一行的彩色区---下方stream查看对接细节

3.Http请求数据解释

请求数据包含三个内容:请求行,请求头,请求体
	请求行:Post/Examples/Servlets/RequestParametersExamples/Http/1.1
		post  请求方式,以postqu提交数据
		/Examples/Servlets/RequestParametersExamples 服务器请求的地址路径 
		Http/1.1  协议版本

	请求头:
		accept                客户端向服务器表示支持什么类型的数据
		Referer               真正请求的地址路径  全路径
		Accept-Language       支持语言格式
		User-Agent            用户代理向服务器代表当前来访的客户端信息
		Content-type          提交的数据类型  form表单数据
		Accept-Ecording:gzip,deflate       压缩算法
		Host                  主机地址
		Content-length        数据长度
		Connection:keep-Alive 保持链接
		Cache-Control         对缓存的操做

	请求体:浏览器真正发送给服务器的东西
		发送的数据实现是key=value,若是存在多个数据那么使用&

4.Http响应数据解析

响应解析也包含三个部分:响应行,响应头,响应体
	响应行:Http/1.1 200 ok
		Http/1.1  协议版本
		200       表示状态码
			200              成功正常处理,获得数据
			403:for bidden   拒绝访问
			404:Not Found    
			500              服务器异常
		ok        对应状态码

	响应头:
		servlet               服务器类型  Tomcat
		Content-type          提交的数据类型  form表单数据
		Content-length        数据长度
		Date                  通信的日期,响应的时间

5.GET请求和POST请求的区别

1.   请求路径不一样:
	post   url后面不跟任何数据
	get    url地址后面跟上数据
2.   带上的数据不一样:
	post   使用流的方式写数据
	get    在地址栏上跟数据
3.   post使用流写数据因此必定须要Content-length来讲明数据长度

4.   安全性:
	post  使用流的方式写数据,不在地址栏上,安全性高,通常提交数据到服务器使用post,并且没有限制数据大小
	get   在地址栏后跟数据,不安全,应用于从服务器获取且客户端不须要提交数据的时候 ,带的数据有限:1kb

web资源

(服务器可以返回的一切东西均可以看做是web资源)
在http协议当中,规定了请求和响应双方,客户端和服务器端,与web相关的资源

有两种分类java

  • 静态资源 html 、 js 、 css
  • 动态资源 servlet/jsp

Servlet(重中之重)

Servlet是啥Servlet是啥

- 其实就是一个Java程序,运行在咱们的web服务器上,用于接受和响应客户端的http请求

- 更多的是配合动态资源来作,当静态资源也须要使用到servlet,只不过是Toomcat里面已经定义好了一个DefaultServlet

Servlet初次使用 HelloServlet

  1. 写一个工程,要有一个服务器web

  2. 测试运行servlet算法

    • 新建一个类实现servlet接口浏览器

      在Java Resources下面的src中新建一个类实现servlet接口实现方法,本次用方法sevice()举例 缓存

    • 配置Servlet,在WEB-INF下的web.xml中写如下内容,用意:告诉服务器咱们的应用有这么些servlettomcat

      <!-- 向Tomcat报告,这个应用里面有这个Servlet,名字叫作HelloServlet,具体的路径是s20190711.mine.servlet.HelloServlet-->
        <servlet>
      	<servlet-name>HelloServlet</servlet-name>
      	<servlet-class>s20190711.mine.servlet.HelloServlet</servlet-class>
        </servlet>
        <!-- 注册Servlet映射,
      		servlet-name:找到上面注册的具体的servlet,
      		url-pattern:在地址栏上的path,注意以/开头不然报错 -->
        <servlet-mapping>
      	<servlet-name>HelloServlet</servlet-name>
      	<url-pattern>/a</url-pattern>
        </servlet-mapping>

  3. 从新将工程右键发送到servlet,在地址栏上输入http://localhost:8080/项目名称/a ,查看console结果以下图表示成功 安全

问题记录:建立web工程下的web-inf中没有web.xml,缘由建立的过程当中一键finish就没有,若是一直点next会出现建立的同时自动建立web.xml;解决:右键工程找到 java EE Tools 中的generate deployment descripter stub点击,这个时候打开web-inf中就有web.xml服务器

Servlet执行过程

  1. 找到tomcat应用
  1. 找到项目
  1. 找到项目中的web.xml,而后再里面找到url-pattern有没有哪个内容是/a
  1. 找到servlet-mapping中那个servlet-name[HelloServlet]
  1. 找到上面定义的servlet元素中的servlet-name中的[HelloServlet]
  1. 找到下面定义的servlet-class而后开始建立类的实例
  1. 继而执行该servlet中的service方法

Servlet通用写法

因为继承servlet接口要实现的方法太多了,而实际只用一个service方法,所以能够看看servlet下面的实现类,httpservlet

  1. 定义一个类继承httpservlet,(这里能够复写service方法于运行servlet),

  2. 推荐复写doGet方法和doPost方法

    由于父类httpservlet中有service方法且方法中判断请求是post或者get分别执行dopost、doget,这是servlet的通用写法
     这里注意若是有出现抛异常能够去掉方法中的super.doPost(req, resp);和super.doGet(req, resp);
  3. 配置Servlet,在WEB-INF下的web.xml中

  4. 从新将工程右键发送到servlet,在地址栏上输入http://localhost:8080/HelloServlet/HelloServlet1 ,查看console结果

    import java.io.IOException;
    
    	import javax.servlet.ServletException;
    	import javax.servlet.http.HttpServlet;
    	import javax.servlet.http.HttpServletRequest;
    	import javax.servlet.http.HttpServletResponse;
    
    	public class HelloServlet1 extends HttpServlet{
    		/*
    		 * @Override protected void service(HttpServletRequest req, HttpServletResponse
    		 * resp) throws ServletException, IOException { super.service(req, resp); }
    		 */
    		@Override
    		protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    			super.doGet(req, resp);
    			System.out.println("get请求helloservlet");
    		}
    
    		@Override
    		protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    			super.doPost(req, resp);
    			System.out.println("post请求helloservlet");
    		}
    	}
    <servlet>
    		<servlet-name>HelloServlet1</servlet-name>
    		<servlet-class>s20190711.mine.servlet.HelloServlet1</servlet-class>
    	  </servlet>
    	  <servlet-mapping>
    		<servlet-name>HelloServlet1</servlet-name>
    		<url-pattern>/HelloServlet1</url-pattern>
    	  </servlet-mapping>

servlet的生命周期

  • 生命周期

从建立到销毁的一段时间

  • 生命周期方法

从建立到销毁,所调用的那些方法。

生命周期方法

是指,熊对象的建立到销毁必定会执行的方法,doget和dopost不是生命周期方法

  • init方法

    在建立该servlet的实例就执行该方法init()初始化,默认状况下是初次访问servlet时就建立实例,init方法只会执行一次

  • service方法

    只要客户端来请求就会执行service方法,service()方法能够被执行不少次,一次请求对应一次service的调用

  • destroy方法

    servlet销毁的时候执行destroy方法:
    	1. 该项目从tomcat中移除
    	2. 正常关闭服务器  tomcat-bin-shutdown

提早初始化:

由于初次访问可能会在init方法中停留过久时间,能够将初始化时间提早

因此在配置web.xml中servlet元素下再加一句,这里的数字越小初始化越早,通常不写负数从2开始,发布到servlet的时候就会提早调用init方法而不是访问的时候

<load-on startup>2<load-on startup>

ServletConfig 配置对象

ServletConfig 能够获取servlet在配置的一些信息

获得ServletConfig 对象:getServletConfig(),专门用于配置servlet的信息

获取到的是配置servlet里面的servlet-name的文本内容:getservletname

能够获取具体的某一个参数:getInitParameter()

//1. 获得servlet配置对象 专门用于在配置servlet的信息
	ServletConfig config = getServletConfig();
	
	//获取到的是配置servlet里面servlet-name 的文本内容
	String servletName = config.getServletName();
	System.out.println("servletName="+servletName);
	
	//二、。 能够获取具体的某一个参数。 
	String address = config.getInitParameter("address");
	System.out.println("address="+address);

	//3.获取全部的参数名称
	Enumeration<String> names = config.getInitParameterNames();
	//遍历取出全部的参数名称
	while (names.hasMoreElements()) {
		String key = (String) names.nextElement();
		String value = config.getInitParameter(key);
		System.out.println("key==="+key + "   value="+value);
	}

为啥须要ServletConfig

将来咱们本身开发一些应用,使用到了一些技术或者一些代码。可是有人写出来;了,他的diamagnetic放置在本身的servlet类里面

恰好这个servlet里面须要一个数字或者叫作变量值,可是这个值不能是固定的,因此要求使用到这个servlet的公司在注册这个servlet的时候,必需要在web.xml里面声明 init-params

总结:

  • Http协议

    1. 使用httpwatch抓包看一看http请求背后的细节
      2. 基本了解 请求和响应的数据内容
      	请求行、请求头、请求体
      	响应行、响应头、响应体
      3. get和post区别
  • Servlet

    会使用简单的servlet
      	写一个类实现接口servlet
      	配置servlet
      	访问servlet
    
      servlet生命周期
      	init 一次  建立对象,默认初次访问胡总和经过配置提早
      	service 屡次,一次请求对应一次service
      	destroy 一次 销毁的时候 从服务器移除或者正常关闭
    
      ServletConfig
      	获取配置的信息,params
相关文章
相关标签/搜索