关于GenericServlet和HttpServlet

1.GenericServlet:
1).是一个Servlet 。是Servlet接口和ServletConfig接口的实现类。但是一个抽象类。其中的service方法为抽象类
2).如果新建的Servlet程序 直接继承GenericServlet会使开发更简洁。
3).具体实现:
①.在GenericServlet中声明了一个ServletConfig类型的成员变量,在init(ServletConfig)方法中对其进行了初始化
②.利用servletConfig 成员变量的方法实现了ServletConfig接口的方法
③.还定义了一个init()方法,在init(ServletConfig)方法中对其进行调用,子类可以直接覆盖init()在其中实现对Servlet的初始化
④.不建议直接覆盖init(ServletConfig),因为如果忘记编写super.init(config);,而还是用了ServletConfig接口的方法,
则会出现空指针异常。
⑤.新建的init(){}并非Servlet 的生命周期方法。而init(ServletConfig)是生命周期相关的方法。

 

public abstract  class MyGenericServlet implements Servlet ,ServletConfig{	
	/*以下方法为Servlet接口的方法*/
	@Override
	public void destroy() {
		// TODO Auto-generated method stub
	}
	@Override
	public ServletConfig getServletConfig() {
		// TODO Auto-generated method stub
		return servletConfig;
	}
	@Override
	public String getServletInfo() {
		// TODO Auto-generated method stub
		return null;
	}
	private ServletConfig servletConfig;
	@Override
	public void init(ServletConfig arg0) throws ServletException {
		this.servletConfig=arg0;
		init();
	}
	public void init() throws ServletException {
		// TODO Auto-generated method stub
		
	}
	@Override
	public abstract void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException ;
	
	@Override
	public String getInitParameter(String arg0) {
		// TODO Auto-generated method stub
		return servletConfig.getInitParameter(arg0);
	}
/*以下方法为ServletConfig接口的方法*/
	@Override
	public Enumeration<String> getInitParameterNames() {
		// TODO Auto-generated method stub
		return servletConfig.getInitParameterNames();
	}
	@Override
	public ServletContext getServletContext() {
		// TODO Auto-generated method stub
		return servletConfig.getServletContext();
	} 
	@Override
	public String getServletName() {
		// TODO Auto-generated method stub
		return servletConfig.getServletName();
	}
}

2.HttpServlet
1).是一个Servlet(),继承自GenericServlet。针对于HTTP协议所定制。
2)在service()方法中直接把ServletRequest和ServletResponse转为HttpServletRequest和HttpServletResponse
并调用了重载的service(HttpServletRequest request, HttpServletResponse response)获取了请求方式:request.getMethod().
根据请求方式又创建了doXXX()方法(XXX代表具体的请求方式 ,比如doGET,doPOST)
代码:

 

@Override
	public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
		// TODO Auto-generated method stub
		if (arg0 instanceof HttpServletRequest) {
			HttpServletRequest request=(HttpServletRequest)arg0;
			
			if (arg1 instanceof HttpServletResponse) {
				HttpServletResponse response=(HttpServletResponse) arg1;
				service(request,response);//重载
			}
		}
		
		
	}
	private void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
		// TODO Auto-generated method stub
		//1.获得请求方式
		String method =request.getMethod();
		//2.根据请求方式在调用对应的处理方法。
		if ("GET".equalsIgnoreCase(method)) {
			doGet(request,response);
		}else if ("POST".equalsIgnoreCase(method)) {
			doPost(request,response);
		}
	}
	private void doPost(HttpServletRequest request, HttpServletResponse response) {
		// TODO Auto-generated method stub
		
	}
	private void doGet(HttpServletRequest request, HttpServletResponse response) {
		// TODO Auto-generated method stub
		
	}		

3).实际开发中, 直接继承HttpServlet,并根据请求方式复写doXXX()方法即可。
4).好处:直接有针对性的覆盖doXXX()方法;直接使用HttpServletRequest和 HttpServletResponse ,不在需要强转。
 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值