一.servlet简介
servlet(server applet)是sun公司提供的一门用于开发动态web资源的技术
sun公司在其API中提供了servlet接口,如果用户想要开发web资源,需要:
1.编写一个java类,实现servlet接口
2.把开发好的java类部署到web服务器中
二.servlet的运行过程
servlet是由web服务器调用,web服务器收到客户端的servlet访问请求后:
1.web服务器首先检查是否已经装载并创建了该servlet的实例对象
是----执行第4步
不是--执行第2步
2.装载并创建该servlet的一个实例对象
3.调用servlet实例对象的init()方法
4.创建一个用于封装http请求消息的HttpServletRequest对象和封装http响应消息的HttpServletResponse对象,然后调用servlet的service()方法,并将请求和响应作为参数传递进去
5.web应用程序被停止或重新启动之前,servlet引擎将卸载Servlet,并在卸载之前Servlet的destory()方法
与生命周期有关的方法
可见Servlet的方法是与生命周期有关的方法,那么来看一下它的与生命周期有关的方法
·public void init(ServletConfig config)throws ServletException
多个客户请求Servlet时,引擎会为每个客户启动一个线程,所以Servlet类的成员变量被所有的线程共享(Servlet是单实例多线程)
·public void service(HttpServletRequest request ,HttpServletResponse response)
throw ServletException,IOException
处理用户的请求和响应,每个用户的请求Servlet都会调用该方法,但是调用的时候在不同的线程中,所以互不干扰
·public destory()
当Servlet引擎终止服务时,比如关闭服务器,destory就会被执行,消灭servlet对象
三.Servlet接口的实现类
Servlet接口Sun公司定义了两个默认实现类GenericServlet(空实现)和HttpServlet(能够处理htpp请求的servlet)
在开发中我们只需要继承HttpServlet类,再其service()方法中进行请求处理和数据相应
四.访问开发好的Servlet资源
由于客户端(浏览器)是通过URL地址访问web服务器中的资源,所以Servlet程序想要被访问就必须把Servlet映射到一个URL地址上
·在web.xml中配置
<servlet>元素用来注册Servlet,它包含有两个主要的子元素
<servlet-name>注册名称
<servlet-class>完整类名
<load-on-startup>创建web应用程序的时候装载该Servlet
<init-param>配置属性
<servlet>
<servlet-name>Servlet</servlet-name>
<servlet-class>cctv.Session.Servlet</servlet-class>
</servlet>
<servlet-mapping>元素用来映射一个已注册的Servlet的一个对外访问路径
<servlet-name>注册名称
<url-pattern>对外访问路径
<servlet-mapping>
<servlet-name>Servlet</servlet-name>
<url-pattern>/servlet/servlet</url-pattern>
</servlet-mapping>
五.Servlet的特点
1.针对客户端的多次Servlet请求,服务器只会创建一个Servlet实例对象,也就是说Servlet实例对象一旦创建,它就会驻留在内存中,为后续的其它请求服务,直至web容器退出,servlet实例对象才会销毁.
2.在Servlet生命周期中init()方法只会调用一次,对于service()方法,每次请求都会去调用该方法并且实例请求响应对象
六.线程安全(等待更新)
实现SingleThreadModel接口
七.Servlet的一些对象
ServletConfig对象
Config翻译过来是配置的意思,可想而知这个对象是用来配置文件的,那么它是如何来配置文件的?
在web.xml文件中利用<init-param>为servlet配置一些初始化参数
储存以键值对的形式进行
<init-param>
<param-name>url</param-name>
<param-value>jdbc:mysql://localhost:3306</param-value>
</init-param>
通过该对象的getInitParameter(name)方法获取name的value,或者通过getInitParameterNames()方法获取枚举器然后进行迭代获取所有的name与value
ServletContext对象
Context翻译过来是上下文的意思,可想而知这个对象是用来代表这个web应用的