1、直接实现Servlet接口
class MyServlet implements javax.servlet.Servlet{
//需要将5个方法都实现
}
2、继承通用实现类GenericServlet
2.1、通用实现类与协议无关的,抽象类,实现了4方法,但service方法是抽象的
abstract class GenericServlet implements Servlet{
public void init(ServletConfig){
}
…
public abstract void service(ServletRequest,ServletResponse);
}
2.2、通用实现类,缓存了ServletConfig
abstract class GenericServlet implements Servlet{
private ServletConfig config;
public void init(ServletConfig config){
this.config = config;
}
public ServletConfig getServletConfig(){
return this.config;
}
}
2.3、通用实现类,实现接口ServletConfig,提供4个api方便使用
abstract class GenericServlet implements Servlet,ServletConfig{
public String getServletName(){ //servletconfig接口
return getServletConfig().getServletName();
}
public String getInitParameter(String name){
return getServletConfig().getInitParameter(name); //从缓存的ServletConfig获得实际内容
}
public ServletContext getServletContext(){
return getServletConfig().getServletContext();
}
….
public ServletConfig getServletConfig(){ //servlet接口
return this.config; //缓存初始化的实际参数
}
}
2.4、继承通用实现类
class OneServlet extends GenericServlet{
public void service(ServletRequest,ServletResponse){
//1 获得ServletConfig对象
ServletConfig config = this.getServletConfig();
//2 获得ServletContext对象
ServletContext sc = config.getServletContext(); //先获得ServletCofing ,在获得sc
ServletContext sc = this.getServletContext(); //从父类获得需要对象
}
}
2.5、进行初始化
方法一:自己实现初始化
class OneServlet extends GenericServlet{
public void init(ServletConfig config ){
// 如果自己实现了初始化,父类的方法将不执行,父类缓存的对象null,必须手动的执行父类方法
super.init(config);
}
service{
this.getServletContext();
}
}
方法二:实现通用实现类(父类)的初始化方法
abstract class GenericServlet implements Servlet {
public void init(ServletConfig config ){
this.config = config;
this[OneServlet 当前运行类].init(); //提供没有参数的方法
}
public void init(){
}
}
class OneServlet extends GenericServlet{
public void init(){
1 先执行父类的
init(ServletConfig)
2 父类调用init(),将执行子类]{ //注意:不是生命周期,init(ServletConfig)
//操作 ,
}
service{
this.getServletContext();
}
}
3、继承HttpServlet
3.1、与协议有关的servlet实现,继承GenericServlet
HttpServlet 通过请求方式(get/post),将程序进行分流(细化)
get请求:将执行doGet方法
post请求:将执行doPost方法
class HttpServlet extends GenericServlet{
public void service(ServletRequest req,ServletResponse res){ //生命周期的方式
}
}
class HttpServlet extends GenericServlet{
public void service(ServletRequest req,ServletResponse res){ //生命周期的方法
//使用结论
HttpServletRequest request = (HttpServletRequest)req;
HttpServletResponse response = (HttpServletResponse)res;
service(request,response);
}
public void service(HttpServletRequest request,HttpServletResponse response){
//使用与http协议有关的api
String method = request.getMethod(); //获得请求方式 GET/POST ….
if(“GET”.equals(method)){
doGet(request,response);
} else if(“POST”.equals(method)){
doPost(request,response);
}
}
doPost {
抛异常
response.sendError(“405”,”提示信息”);//405 ;1.0 400
}
doGet{
}
}
class TwoServlet extends HttpServlet{
public void doGet(HttpServletRequest request,HttpServletResponse response){
}
public void doPost(HttpServletRequest request,HttpServletResponse response){
}
}
//******只有get请求才会出现304页面缓存。