tomcat javaweb开发基础( 9 servlet(2))
来源:互联网 发布:网络直播培训 编辑:程序博客网 时间:2024/06/02 21:06
一:首先介绍一下:servlet的执行过程和生命周期
Servlet的执行过程
每个Servlet作为Web应用程序的一个组件部署到容器中。当它被客户请求时,容器控制着它的执行。
Servlet的执行过程如图2.2所示:
在说一下servlet的生命周期:
读取web.xml文件
Servlet容器启动时,它将查找一组部署文件,这些配置文件描述了所有的Web应用程序
每个Web应用程序都有它自己的名为web.xml的部署描述文件,其中包括应用程序所使用的每个Servlet的入口。
一个入口指定了Servlet名称和对应的Java类名称。
创建实例
对每个Servlet类,Servlet容器使用
对每个Servlet类,Servlet容器使用
Class.forName(className).newInstance()
方法加载并创建一个实例。
1初始化
一旦容器创建了servlet实例,它将在新创建的实例上调用init(ServletConfig)方法。
ServletConfig对象包含了所有的在web应用程序的DD文件中指定的初始化参数。
在init()方法返回后,servlet就被初始化了。
2预初始化
当servlet第一次被请求时才对它初始化,这叫做延迟加载。
优点 :大大提高servlet容器的启动时间
缺点 :如果在初始化时servlet要完成很多任务,如从数据库中缓存静态数据,则发送第一个请求的客户的响应时间会很长。
servlet规范定义了<load-on-startup>元素,它可以在部署描述文件中指定当servlet容器启动时装载并初始化servlet。
在任何请求达到之前装载servlet的过程称为预装载或预初始化。
在webdemo下面新建一个文件夹serdemo里面新建In.htm
3为客户请求服务
在servlet实例正常初始化后,它就准备为客户提供服务。
当容器接收到请求时,都会创建一个新的线程,然后调用
service(ServletRequest,ServletResponse)方法。
service()方法将检查HTTP请求的类型(GET、POST等)并调用相应的doGet()、doPost()等方法。
4销毁和卸载Servlet当Servlet容器决定不再需要Servlet实例,它将在Servlet实例上调用destroy()方法,在该方法中,Servlet应该释放资源,如它在init()方法中获得的数据库连接。
在调用destroy()方法之前,容器会等待其他执行Servlet的service()方法的线程结束。
如果Servlet容器关闭,它也将销毁Servlet。
二;接受表单参数
二;接受表单参数
package org.lxh.servlet ;import java.io.* ;import javax.servlet.* ;import javax.servlet.http.* ;public class InputServlet extends HttpServlet{public void doGet(HttpServletRequest req,HttpServletResponse resp) throws ServletException,java.io.IOException{String param = req.getParameter("ref") ;System.out.println("*************"+param) ;}public void doPost(HttpServletRequest req,HttpServletResponse resp) throws ServletException,java.io.IOException{this.doGet(req,resp) ;}};
在webdemo下面新建一个文件夹serdemo里面新建In.htm
配置web.xml
<servlet> <servlet-name>inp</servlet-name> <servlet-class>org.lxh.servlet.InputServlet</servlet-class></servlet><servlet-mapping><servlet-name>inp</servlet-name><url-pattern>/input</url-pattern></servlet-mapping>
很明显路径错误:文件夹serdemo里面新建In.htm所以这个路径inputservlet.java多了一个路径名
解决方式有两种:
第一种:
<form action=“../input" method="post">请输入参数:<input type="text" name="ref"><input type="submit" value="提交"></form>
比较好的是第二中:第二种
<servlet-mapping><servlet-name>inp</servlet-name><url-pattern>/serdemo/input</url-pattern></servlet-mapping>
三: Servlet生命周期实例
之前简单给大家说了一下servlet的生命周期,WEB容器负责servlet程序的生命周期,如果想要观察servlet的生命周期,则可以通过servlet本身提供的方法。
Servlet本身也只关心初始化,服务和销毁三个操作。
1.初始化:正常情况下只有一次初始化。
|-publicvoid init()throwsServletException:如果不需要取得初始化参数应用此方法。
|-publicvoid init(ServletConfigconfig)throwsServletException:可以取得初始化参数
2.服务:一个Servlet程序肯定会服务多次,如果一个程序长时间不服务,则认为没用了,等待销毁。
publicvoid service(ServletRequestreq,ServletResponse res)
publicvoid service(ServletRequestreq,ServletResponse res)
throwsServletException,IOException:
一般情况下不覆写此方法,一般情况下覆写doGet()方法和doPost()方法
publicvoiddoGet(HttpServletRequestreq,HttpServletResponseresp) throwsServletException,IOException
publicvoid doPost(HttpServletRequestreq,HttpServletResponseresp) throwsServletException,IOException
3.销毁:正常情况下也只有一次,容器关闭时销毁。
public voiddestroy() ;
LifeCycleServlet.java
package org.lxh.servlet ;import java.io.* ;import javax.servlet.* ;import javax.servlet.http.* ;public class LifeCycleServlet extends HttpServlet{public void init() throws ServletException{System.out.println("************** 初始化 **************") ;}public void doGet(HttpServletRequest req,HttpServletResponse resp) throws ServletException,java.io.IOException{System.out.println("************** 服务 **************") ;}public void doPost(HttpServletRequest req,HttpServletResponse resp) throws ServletException,java.io.IOException{this.doGet(req,resp) ;}public void destroy(){System.out.println("************** 销毁 **************") ;}};
编写web.xml进行配置
<servlet><servlet-name>life</servlet-name><servlet-class>org.lxh.servlet.LifeCycleServlet</servlet-class></servlet><servlet-mapping><servlet-name>life</servlet-name><url-pattern>/life</url-pattern></servlet-mapping>
public void destroy(){System.out.println("************** 销毁 **************") ;try{ Thread.sleep(3000); }catch(Exception e){ }}
正常情况下,初始化是在一个Servlet第一次使用的时候进行的。每一次提交请求,就会触发服务的操作。
public void init(ServletConfig config) throws ServletException{ System.out.println("*** 初始化"+config.getInitParameter("ref1")+" ***") ;}public void service(ServletRequest req,ServletResponse res){System.out.println("************** service服务 **************") ;}
在web.xml中设置参数
<servlet><servlet-name>life</servlet-name><servlet-class>org.lxh.servlet.LifeCycleServlet</servlet-class><load-on-startup>1</load-on-startup><init-param><param-name>ref1</param-name><param-value>MLDN</param-value></init-param></servlet>
解释如图:
- tomcat javaweb开发基础( 9 servlet(2))
- tomcat javaweb开发基础(8)servlet程序设计(1)
- tomcat javaweb开发基础(10servlet(3))
- tomcat javaweb开发基础(一)
- tomcat javaweb开发基础(三)
- tomcat javaweb 开发基础(4)
- tomcat javaweb 开发基础(5)
- tomcat Javaweb开发基础(6承接五)
- tomcat javaweb 开发基础(七接着六)
- 10003---JavaWeb开发基础--Servlet
- javaweb 基础(1)—— servlet
- tomcat javaweb(实验四 Servlet开发与MVC设计模式)
- javaweb总结(5) - servlet开发
- JAVAweb开发技术-------(二)Servlet技术
- javaweb开发基础(一)
- javaweb学习笔记:Servlet开发基础
- JavaWeb开发基础:Servlet登录小实例
- JavaWeb-开发基础-web、环境、jsp、servlet
- [x264] fps与timebase, num与den
- Spring中scope属性singleton和prototype使用的区别
- 项目中AppDelegate详解
- Windows多线程编程
- 使用4G的U盘和UltraISO工具安装Win8系统
- tomcat javaweb开发基础( 9 servlet(2))
- MC新手入门(五十一)------服务器连接 二
- javascript回调函数
- VLC 串流
- win7 0xc000000e bcdedit 无法打开启动配置数据存储 系统找不到指定的文件
- windows下进程通信方法
- Python 检索目录下所有文件中包含指定字符串的文件
- 图像缩放--OpenCV cvResize函数
- linux中使用pthread_kill函数测试线程是否存活