服务程序,javaWeb三大组件之一。属于动态资源,
作用:主要功能在于交互式的浏览和修改数据,生成动态Web内容。
理解:处理动态请求,如果请求的是动态资源,服务器把接收到的请求交给serlet处理。
servlet的工作:
接收请求数据
处理请求
完成响应
在服务器中,每个servlet都是唯一的,他们处理的请求不同。 可理解为不同的话务员。
1)实现javax.servlet.Servlet接口
2)实现javax.servlet.GenericServlet接口
3)继承javax.servlet.http.HttpServlet类
三者关系:
Servlet是一个接口,其中含有很多方法如:init(),service(),destory()方法。
GenericServlet是一个实现了Servlet接口的实现类,他可以使用Servlet中的方法。
HttpServlet是GenericServlet的实现类(儿子),也就是说间接的实现了Servlet接口,
1)实现javax.servlet.Servlet接口
特性:
单例:一个类只能有一个对象,但是存在多个类
线程不安全,效率最高
注:Servlet类由我们来写,对象由服务器创建,方法由服务器调用
步骤:
1)创建实现接口的类,重写五个方法
2)编写web.xml
<servlet>
A------- <servlet-name>xxx</servlet-name> //姓名1 1和2名称相同,则访问姓名1对应的类
B------- <servlet-class>servlet.AServlet</servlet-class> //被访问的类
</servlet>
<servlet-mapping>
C------- <servlet-name>xxx</servlet-name> //姓名2 在servlet中找相同名称
D------- <url-pattern>/AServlet</url-pattern> //与接收的url匹配。
</servlet-mapping>
过程: 浏览器接收url后 D --> C --> A --> B
3)访问url
***********localHost:8080/项目名/url地址
生命周期方法:
出生 // void init(ServletConfig arg0)
处理 // void service(ServletRequest arg0, ServletResponse arg1)
结束 // destroy()
ServletConfig在内存中存放对应 web.xml中Servlet配置信息(初识化参数)
2)继承javax.servlet.GenericServlet类 实现service方法
内部实现原理:GenericServlet是一个实现了Servlet接口的实现类
实现了Servlet接口,并帮我们做了一些常用操作:
1.init方法 保存config对象并实现getServletInfo,getServletConfig,
2.增加一个空参init方法,供开发人员初始化,为了防止开发人员重写原生init方法
3.service方法空实现=> 抽象方法(强制开发人员实现该方法)
4.destory方法空实现
5.实现了servletConfig接口. 接口中的方法直接调用config实现类实现.
//service方法需要重写
public void service(ServletRequest arg0, ServletResponse arg1)
throws ServletException, IOException {
String value = getInitParameter("p1");
System.out.println(value);
}
知识点:
ServletContext类中方法---
ServletContext getServletContext();获取Servlet上下对象
String getServletName() 获取 中的文本
String getInitParameter(String name); 获取指定名称初始化参数的值
Enumeration getInitParameterNames(); 获取所有初识化参数名称
3)javax.servlet.http.HttpServlet接口
内部原理:HttpServlet是GenericServlet的实现类
//继承GenericServlet
HttpServlet extends GenericServlet{
1)用此方法强转两个参数为http协议相关的类型
void service(ServletRequest,ServletResponse)
2)然后调用本类的service(HttpServletRequest,HttpServletResponse)
void service(HttpServletRequest,HttpServletResponse)
//参数是和http协议相关的使用起来将更加方便
3)会根据request得到当前请求的请求方式来调用方法
doGet() 或 doPost()
}
用MyEclipse创建HttpServlet实现类步骤
1.包名 右键
2.servlet
此时已经自动继承HttpServlet类
下面的选项是是否需要自动生成的方法。
选择自己需要的。(一般只留下doGet和doPost)
3.自动添加xml文件的选项
类名、 地址名、 被添加的xml文件路径、两个默认展示的描述
1.避免在servlet内创建成员,局部变量即可 //初学阶段
2.创建无状态成员 (成员只有无参方法) //进阶
3.创建只读对象(只有get方法) //高级
目的: 防止出现多线程同时操作(读,写)一个servlet对象
时间点1 : 一般在首次访问时自动创建。 第一次惩罚---首次访问会慢
时间点2 :在服务器启动时创建。 --需要在web.xml中进行配置
做法:在中添加,
标签内容为非负整数。内容为0时表示在服务器启动时创建
整数大小为servlet创建顺序
1. 必须以"/"开头
2.可以有多个url路径表示
3.通配符 "*" 可以同时绑定多个url
匹配前缀(部分路径匹配)或后缀(扩展名匹配)。
Tomcat的conf/web.xml 是所有xml文件的父文件。
Servlet作为Web服务器的补充功能在运行时需要受到Servlet容器的管理:
1)浏览器依据IP建立与容器的连接
2)浏览器将请求数据打包
3)容器解析请求数据包,封装request和response对象
4)容器依据请求资源路径找到Servlet创建对象
5)容器将request和response对象作为参数传入service方法,并调用
6)容器将响应数据打包发给浏览器
7)浏览器取出结果,生成页面
HttpServlet的子类中,必须要有空参的构造方法(默认的构造方法)
当Servlet被调用时,Servlet容器将会调用该Servlet的默认构造函数,
来建立一个Servlet实体
步骤: (3)(4)为重点
1)根据请求的URL地址,找到相应的url-pattern。
2)利用匹配url-pattern找到相应的servlet类,
3)反射技术获取Servlet对象,
//Class c=class.forName(路径)得到相应的Class,
4)通过c.newInstance()获得实例对象。
5)调用实例对象的service方法
通过Method method=c.getMethod("service",ServletRequest.class,ServletResponse.class)
6)通过method.invoke()完成对该方法的调用。
注:以上过程都是Tomcat帮助我们做的,不用我们来实现。我们知道处理过程及原理即可。