1. 实现Servelt的第一种方法 实现servlet接口
一.servelt是以个普通类,创建一个servlet接口的实现类
1).public class HelloServlet implements Servlet{}
2).web.xml中配置和映射servlet
<!-- 配置servlet和映射servlet -->
<!-- 注册一个servlet -->
<servlet>
<!-- 注册名 -->
<servlet-name>hello</servlet-name>
<!-- servlet类的全类名 -->
<servlet-class>com.java.servlet.HelloServlet</servlet-class>
</servlet>
<!-- 映射servlet -->
<servlet-mapping>
<!-- 必须和注册名一致 -->
<servlet-name>hello</servlet-name>
<!-- 浏览器访问路径/代表当前web应用的根目录 -->
<url-pattern>/hello</url-pattern>
</servlet-mapping>
访问路径:
http://localhost:8080/demo1/hello
二.servlet容器,运行servlet或者jsp等软件环境
1)可以创建servlet和管理servlet的生命周期
2)servlet的生命周期是由servlet容器负责管理
构造器:执行时调用,只有第一次请求servlet时调用。
init():只被调用一次,在创建好实例以后直接调用。
service():被调用多次,每一次请求的时候都调用service方法,用于获取和响应请求。
destory():只被调用一次,当前web应用程序被卸载时被调用,用于释放资源。
三.load-on-startup:
1)配置:
hello
com.java.servlet.HelloServlet
2
2).load-on-startup:指定servlet被创建和初始化的时机,
如果是负数:在第一次请求时被创建
如果是正数或0:在当前web应用被加载的时候创建servlet实例和初始化,数值越小越早创建。
四. servlet-mapping
1).同一个servlet可以有多个servlet-mapping,即多个
的子节点的设置值可以是同一个servlet注册名
2)<url-pattern>通配符:.html和/url/*俩者不能同时使用,会出现端口冲突
五.ServletConfig:代表当前servlet,可以获取当前servlet的配置信息,还可以获取ServletContext对象
常用方法:
1).//getInitParameter(String) 获取当前Servlet指定名称的初始化参数的值
String initParameter = config.getInitParameter(“username”);
2).//getInitParameterNames() 获取当前Servlet所有初始化参数的名字组成的枚举
Enumeration<String> names = config.getInitParameterNames();
while (names.hasMoreElements()) {
String name1 = (String) names.nextElement();
String value=config.getInitParameter(name1);
System.out.println("name1:"+name1+",value:"+value);
}
3).//getServletName() 获取当前Servlet在web.xml中配置的名字
String servletName = config.getServletName();
4).//getServletContext() 获取代表当前web应用的ServletContext对象
ServletContext sc = config.getServletContext();
sc.getContextPath();//获取web应用的根目录
2. 实现servlet的第二种方法
GenericServlet是一个抽象方法,继承该抽象方法
一.
1)GenericServlet是一个servlet,是servlet和servletConfig接口的实现类,
是一个抽象类,其中service是一个抽象方法
2)具体实现
1.GenericServlet中声明了一个成员变量ServletConfig,并且init(ServletConfig config)
里面对象这个变量初始化
2.利用servletConfig成员变量实现了servletConfig接口里面的方法
3.还定义了init()方法,如果子类需要在初始化的时候完成一些特定功能,可以重写无参的init方法,并且在init(ServletConfig config)
里面调用了init方法,注意:重写的init的方法不是生命周期方法,init(ServletConfig config)才是生命周期方法
3. 第三中servlet的实现方式
一.
HttpServlet是实现servlet最常用的一种方式
1).继承GenericServlet,他是针对http协议定制的
2).在service(ServletRequest req,ServletResponse res)中直接把俩个参数
转换为HttpServletRequest req, HttpServletResponse resp 并调用service(HttpServletRequest req, HttpServletResponse resp)
在重载的service(HttpServletRequest req, HttpServletResponse resp)方法中,获取请求方式,并且根据请求方式调用doGet或doPost
3).继承HttpServlet只需要重写doGet()和doPost()方法即可
二.
//ServletContext:当前web应用对象(在当前web应用下所有的地方都可以获取他,只有一个,相当于这个项目的全局变量)
//获取ServletContext对象的方式
//1
ServletContext context = getServletContext();
//2
ServletContext context2 = getServletConfig().getServletContext();
ServletContext常用方法:
//getInitParameter(String) 获取当前Servlet指定名称的初始化参数的值
String initParameter = config.getInitParameter("username");
//getInitParameterNames() 获取当前Servlet所有初始化参数的名字组成的枚举
Enumeration<String> names = config.getInitParameterNames();
//getServletName() 获取当前Servlet在web.xml中配置的名字
String servletName = config.getServletName();
//getServletContext() 获取代表当前web应用的ServletContext对象
ServletContext sc = config.getServletContext();
sc.getContextPath();//获取web应用的根目录