servlet 详解(一)
servlet 详解(一)
手动创建动态项目
1.创建一个Java项目:HelloServletWeb;
2.在HelloServletWeb中创建一个文件夹webapp,表示Web项目的根;
3.在webapp中创建WEB-INF文件夹
4.在WEB-IN中创建文件夹:lib,classes
5.在WEB-IN中去Tomcat根/conf拷贝web.xml文件,只需要保留根元素
6.把当前项目的classpath路径改成webapp/WEB-IN下的classes中
Servlet的第一个程序编写步骤:
1:拷贝Tomcat根/lib/servlet-api.jar到项目的WEB-INF/lib目录中,并做build path
2:编写Servlet程序,使之实现javax.servlet.Servlet接口,并覆盖接口中的方法.
public class HelloServlet implements javax.servlet.Servlet{...实现方法...}
3:发现方法中参数出现arg0,arg1的情况是因为没有关联Servlet的源代码.
是否关联源代码和程序最终的运行没有关系,只是在开发阶段参数美观,可阅读源代码.
Tomcat的源代码程序:apache-tomcat-7.0.57-src.zip
4:在service(ServletRequest req, ServletResponse res)方法,打印一句话.
引导:此时HelloServlet类,和Tomcat一点关系都没有:我们需要告诉Tomcat来帮我们管理HelloServlet类.(Tomcat是Servlet的容器,会负责Servlet对象的生命周期和方法调用).所以,得以配置的形式,告诉Tomcat来帮我们管理自定义的Servlet类.
5:Servlet配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
部署项目,并访问:
server.xml中:
<Context docBase="D:\javapro\demo\webapp" path="day3" />
访问:
http://ip:port/contextPath/资源名
http://localhost:80/day3/hello
生命周期:从出生--->死亡,中间的过程
Servlet的生命周期:创建对象,初始化操作,运行操作,销毁操作.
Tomcat管理了Servlet对象的生命周期,Servlet对象整个过程都是由Tomcat来管理的.
Servlet的创建,初始化,运行,销毁的行为都是Tomcat来负责调用的.
javax.servlet.Servlet接口中的方法:
String getServletInfo():获取Servlet的信息(Servlet的作者,版本,版权相关).
ServletConfig getServletConfig():获取Servlet的配置信息对象.
void init(ServletConfig config):初始化Servlet对象方法
void service(ServletRequest req, ServletResponse resp):服务方法,Web动态网页的操作就编写在该方法.
void destroy():销毁Servlet对象方法.
生命周期方法:
在Web的生命周期中(Tomcat启动->Tomcat关闭),Servlet是单例的.
构造器:在服务端程序第一次被请求的时候,调用,只被调用一次.
void init(ServletConfig config):在构造器执行完毕之后,调用init方法,也只会执行一次.
void service(ServletRequest req, ServletResponse resp):每一次请求都会执行该方法.
void destroy():正常关闭Tomcat才会执行(该方法不一定会被执行,我们没必要在其中编写扫尾的操作).
总结:构造器--->init方法---->[ service方法 ]循环 ---->destory方法
注意:
1):Servlet类的构造器必须使用public修饰.
2):Servlet类必须是无参数构造器.
原因:底层创建Servlet对象:Class.newInstance()方式.--->公共的无参数构造器.
总结:保证Servlet必须有一个公共的无参数构造器,方便Tomcat底层创建Servlet的对象.