不怕千万人阻挡,就怕自己投降。
文章目录
概念:运行在服务器端的小程序
servlet就是一个接口,定义了Java类被浏览器访问到(tomcat识别)的规则。将来我们自定义一个类,实现servlet接口,复写方法。所以servlet就是实现了Servlet接口的类。
01.Servlet快速入门
1.创建javaEE项目
2.定义一个类,实现servlet接口
public class servletDemo1 implements servlet
3.实现接口中的抽象方法
4.配置Servlet,在xml中配置。demo1 servlet-name>cn.itcast.web. servlet.ServletDemo1demo1 servlet-name>/demo1
执行原理:
1,当服务器接受到客户端浏览器的请求后,会解析请求uRL路径,获取访问的servlet的资源路径2.查找web.xml文件,足否有对应的标签体内容。
3.如果有,则在找到对应的全类名
4. tomcat会将字节码文件加载进内存,并且创建其对象
5,调用其方法。
servlet中的生命周期方法∶
1.被创建:执行init方法,只执行一次
对象被创建后再执行Servlet方法。
servlet什么时候被创建?
默认情况下,第一次被访问时,servlet被创建。可以配置其执行servlet的创建时机。
在标签下配置
1,第一次被访问时,创建
的值为负数。
2.在服务器启动时,创建
的值为0或正整数。
Servlet的init方法,只执行一次,说明一个servlet在内存中只存在一个对象,Servlet是单例的。
多个用户同时访问时,可能存在线程安全问题。
解决∶尽量不要在servlet中定义成员变量。即使定义了成员变量,也不要对修改值。
2.提供服务:执行service方法,执行多次。
每次访问Servlet时,Service方法都会被调用一次。
3.被销毁:执行destroy方法,只执行一次。
servlet被销毁时执行,服务器关闭时,Servlet被销毁。
只有服务器正常关闭时,才会执行destroy方法。
destroy方法在servlet被销毁之前执行,一般用于释放资源。02.Servlet3.0注解配置
java6支持Serlet3.0.
java8支持Serlet4.0.
好处:支持注解配置。
可以不需要web.xml。
步骤:
1.创建JavaEE项目,选择Servelt3.0以上的,可以不创建web.xml。
2.定义一个类,实现Servlet接口。
3.复写方法。
4.在类上使用@WebServlet注解,进行配置。
因为注解是加在类上的,所以不需要关心类名,只需要关心资源路径。@WebServlet(urlPatterns="/demo")//可以配置多个路径public class ServletDemo implement Servlet{}
或者@WebServlet("/demo")//可以配置多个路径public class ServletDemo implement Servlet{}
IDEA与tomcat的相关配置
1.IDEA会为每一个tomcat部署的项目单独建立一份配置文件.
查看控制台的log : Using CATALINA_BASE:“c: \users\fay.Intelli]Idea2018.1\system\tomcatl_itcast"
2.工作空间项目和 tomcat部署的web项目。
tomcat真正访问的是"“tomcat部署的web项目”",“tomcat部署的web项目"对应着”"工作空间项目”的web目录下的所有资源。
WEB-INF目录下的资源不能被浏览器直接访问。03.GenericServlet&HttpServlet(Serlvet的体系结构)
GenericServlet是Servlet的子类(子);
HttpServlet是GenericServlet的子类(孙);
问题提出:有时候我们只需要重写Servlet的service方法。然而我们继承Servlet类必须实现Servlet的所有抽象方法。这样就与我们意愿相左。有什么解决办法呢?
【解决办法】:GenericServlet为Servlet的子类,并且已经(空)实现了Servlet的4个方法,只有service方法没有实现。
因此我们可以写一个类,继承GenericServlet抽象类。实现service方法即可。
将来我们在定义自己的serlvet类时,可以继承抽象类GenericServlet即可,如果需要使用到其他方法,重些该方法即可。
可以看出,此时代码书写已经很方便,但是我们以后开发并不使用这种方式。
那我们使用哪种方式呢?
【HttpServlet】:为什么要使用这个类呢?
那我们得问自己,我们实现service方法干嘛呢?
我们在写service方法体时,需要判断前端给后台的请求方式,并根据其获取数据。每次都需要判断,有没有一种方式,可以简洁的达到效果呢?
HttpServlet抽象类,帮我们把这些事情都做好了,我们只需要重写HttpServlet对应得方法即可。
如:doGet(){//重写部分};doPost(){//重些部分};
因此我们将来需要屏蔽请求方式的处理逻辑,继承HttpServlet就显得格外好用。
HttpSerlvet:对http协议的一种封装,简化操作。
因此我们以后开发:就不再定义类继承GenericServlet实现service方法。而是定义类继承HttpServlet重写doGet(),或doPost()方法。
Servlet的urlpartten配置
因为urlpattten是一个数组,所以可以为其配置多个资源路径@WebServlet({"/d4","dd4","ff"})public class ServletDemo extends HttpServlet{}
一个servlet可以设置多个访问路径。
路径的定义规则1./xxx2./xxx/xxx(多层路径)(/xxx/*)
3.*.do04.HTTP
概念:Hyper Text Transfer Protocol超文本协议。
传输协议:定义了,客户端和服务器端通信超时,发送数据的格式。
请求和响应一一对应。
无状态:每次请求之间相互独立,不能交互数据。
历史版本:
1.0:每一次请求响应都会建立新的连接(http1.0)
1.1:复用连接(http1.1)。
请求消息数据格式:
1.请求行
请求方式 请求url 请求协议/版本
GET /index.html HTTP/1.1
HTTP协议有7种请求方式。
GET:
(1.请求参数在请求行中,在url后。
(2.请求的url的长度有限制。
(3.不安全
POST:
(1.请求参数在请求体中。
(2.请求的url的长度没有限制。
(3.相对安全
2.请求头
请求头名称:请求头值
常见的请求头:</