直接安装,桌面是没有东西出来的,打开IE浏览器,右键勾选全部显示;栏,点工具http watch professional出现如下界面表示已经安装好css
用IE浏览器打开tomcat首页html
请求数据包含三个内容:请求行,请求头,请求体 请求行: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,若是存在多个数据那么使用&
响应解析也包含三个部分:响应行,响应头,响应体 响应行: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 通信的日期,响应的时间
1. 请求路径不一样: post url后面不跟任何数据 get url地址后面跟上数据 2. 带上的数据不一样: post 使用流的方式写数据 get 在地址栏上跟数据 3. post使用流写数据因此必定须要Content-length来讲明数据长度 4. 安全性: post 使用流的方式写数据,不在地址栏上,安全性高,通常提交数据到服务器使用post,并且没有限制数据大小 get 在地址栏后跟数据,不安全,应用于从服务器获取且客户端不须要提交数据的时候 ,带的数据有限:1kb
(服务器可以返回的一切东西均可以看做是web资源) 在http协议当中,规定了请求和响应双方,客户端和服务器端,与web相关的资源
有两种分类java
- 其实就是一个Java程序,运行在咱们的web服务器上,用于接受和响应客户端的http请求 - 更多的是配合动态资源来作,当静态资源也须要使用到servlet,只不过是Toomcat里面已经定义好了一个DefaultServlet
写一个工程,要有一个服务器web
测试运行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>
从新将工程右键发送到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服务器
- 找到tomcat应用
- 找到项目
- 找到项目中的web.xml,而后再里面找到url-pattern有没有哪个内容是/a
- 找到servlet-mapping中那个servlet-name[HelloServlet]
- 找到上面定义的servlet元素中的servlet-name中的[HelloServlet]
- 找到下面定义的servlet-class而后开始建立类的实例
- 继而执行该servlet中的service方法
因为继承servlet接口要实现的方法太多了,而实际只用一个service方法,所以能够看看servlet下面的实现类,httpservlet
定义一个类继承httpservlet,(这里能够复写service方法于运行servlet),
推荐复写doGet方法和doPost方法
由于父类httpservlet中有service方法且方法中判断请求是post或者get分别执行dopost、doget,这是servlet的通用写法 这里注意若是有出现抛异常能够去掉方法中的super.doPost(req, resp);和super.doGet(req, resp);
配置Servlet,在WEB-INF下的web.xml中
从新将工程右键发送到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>
从建立到销毁的一段时间
从建立到销毁,所调用的那些方法。
是指,熊对象的建立到销毁必定会执行的方法,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 能够获取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); }
将来咱们本身开发一些应用,使用到了一些技术或者一些代码。可是有人写出来;了,他的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