Servlet的概念问题以及相关接口

1、Servlet

1.1、定义:

JavaWeb三大组件之一,用于处理请求,一般Servlet需要接收请求数据,处理请求,完成响应。

1.2实现方式:

1、实现javax.servlet.Servlet接口;
2、继承javax.servlet.GenericServlet抽象类;
3、继承javax.servlet.http.HttpServlet抽象类;

1.3 生命周期
1、出生:

void init(ServletConfig);// 出生方法
该方法是在Servlet第一次被访问的时候调用,而且Servlet一生只会调用一次该方法,所以我们可以在该方法做一些数据的初始化

2、服务:

void service(ServletRequest,ServletResponse);
每次接收请求时,都会调用该方法,可以多次调用

3、离去:

void destroy();
不轻易离去,只有服务器关闭的时候才会离去,在服务器关闭之前,会“临死”之前调用该方法。

4、测试Servlet生命周期的方法:
public class HelloServlet implements Servlet {	     
    public void init(ServletConfig config) throws ServletException {		
        System.out.println("Servlet出生了!");
    }	     
    public ServletConfig getServletConfig() {   
        return null;
    }	     
    public void destroy() {	
        System.out.println("Servlet死亡!");	
    }	     
    public String getServletInfo() {     
        return null;
    }      
    public void service(ServletRequest req, ServletResponse res)throws      ServletException, IOException {	
        System.out.println("hello servlet!");	
    }
}

这也是第一种实现方式。

1.4、Servlet相关接口
1、ServletRequest:

service() 方法的参数,它表示请求对象,它封装了所有与请求相关的数据,它是由服务器创建的;

2、ServletResponse:

service()方法的参数,它表示响应对象,在service()方法中完成对客户端的响应需要使用这个对象;

3、ServletConfig:

init()方法的参数,它表示Servlet配置对象,它对应Servlet的配置信息,那对应web.xml文件中的<servlet>元素。这里面有几个方法需要提一下:

  • String getServletName():获取Servlet在web.xml文件中的配置名称,即指定的名称;
  • ServletContext getServletContext():用来获取ServletContext对象,ServletContext会在后面讲解;
  • String getInitParameter(String name):用来获取在web.xml中配置的初始化参数,通过参数名来获取参数值;
  • Enumeration getInitParameterNames():用来获取在web.xml中配置的所有初始化参数名称;
1.5、GenericServlet类

GenericServlet是Servlet接口的实现类,我们可以通过继承GenericServlet来编写自己的Servlet。
我们可以看看它的源代码:

public abstract class GenericServlet implements Servlet, ServletConfig,    java.io.Serializable {       
    private  static  final long serialVersionUID = 1L;       
    private  transient ServletConfig config;       
    public   GenericServlet() {} 
    @Override
    public void destroy() {}  
    @Override       
    public String getInitParameter(String name) {         
        return getServletConfig().getInitParameter(name);  
    }  
    @Override       
    public Enumeration<String> getInitParameterNames() {         
        return getServletConfig().getInitParameterNames();  
    }  
    @Override       
    public ServletConfig getServletConfig() {         
        return config;  
    }  
    @Override       
    public ServletContext getServletContext() {         
        return getServletConfig().getServletContext();  
    }
    @Override       
    public String getServletInfo() {         
        return      "";  
    }  
    @Override       
    public void init(ServletConfig config) throws ServletException {         				this.config = config;
        this.init();  
    }       
    public void init()throws ServletException {}       
    public void log(String msg) {    
        getServletContext().log(getServletName() + ": " + msg); 
    }       
    public void log(String message, Throwable t) {
        getServletContext().log(getServletName() + ": " + message, t);  
    }  
    @Override       
    public abstract void service(ServletRequest req, ServletResponse res) throws ServletException, IOException; 
    @Override       
    public String getServletName() {         
        return config.getServletName();  
    }
}

它有一个属于自己的方法,init()方法,注意这个是无参的,Servlet接口里面的init方法是有参数的,所以我们如果需要初始化的话只要重写这个无参数的init()方法就行,另外再重写service方法就行。

1.6、 HttpServlet类

是GenericServlet的子类,该类提供了对HTTP请求的特殊支持,所以一般都会通过继承HttpServlet来完成对Servlet的定义,这个类是里面有着自己的service方法,能够把ServletRequest和ServletResponse强转成HttpServletRequest和HttpServletResponse,所以我们在继承这个类的时候只需要重写他的doGet()或者doPost()就行。
eg:

public class AServlet extends  HttpServlet {	     
    public void doGet(HttpServletRequest request, HttpServletResponse response)		throws ServletException, IOException {	
        System.out.println("hello doGet()...");	
    }
}
 public class BServlet extends HttpServlet {	     
     public void doPost(HttpServletRequest request, HttpServletResponse response)	throws ServletException, IOException {	
         System.out.println("hello doPost()...");	
     }
 } 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值