关于GenericServlet和HttpServlet

原创 2018年04月15日 14:01:20
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 ,不在需要强转。

关于项目干系人

1、了解项目干系人的期望 2、识别和管理项目干系人 3、如何让项目干系人满意
  • 2017年07月18日 16:20

GenericServlet 、Servlet和httpServler他们之间的关系

1、GenericServlet类是所有Servlet类的祖先类。       2、HttpServlet类继承了GenericServlet类。       3、Servlet有两个非常重要的的对象...
  • u010108195
  • u010108195
  • 2016-03-31 19:39:23
  • 2706

Servlet与GenericServlet和HttpServlet的关系

  • sinat_28158055
  • sinat_28158055
  • 2017-02-10 11:03:13
  • 690

servlet 、GenericServlet 、HttpServlet 详解

今天突然想研究下servlet,总结下新的,希望对大家有帮助:首先,看看怎样才能实现一个servlet,方法有3种:1、实现servlet接口2、继承GenericServlet(实现service ...
  • woshiwu
  • woshiwu
  • 2011-05-15 00:49:00
  • 6055

Servlet实现方式之GenericServlet和HTTPServlet和Servlet接口的区别

继续阅读之前,请确保你已经了解了如何通过用实现Servlet接口的方式来实现Servlet了, 下面介绍GenericServlet,GenericServlet的区别 GenericServ...
  • rankun1
  • rankun1
  • 2016-09-25 23:12:40
  • 2121

Servlet,GenericServlet,HttpServlet源码解析

继承关系:GenericServlet实现了Servlet接口,HttpServlet抽象类是GenericServlet类的子类 GenericServlet.java public abs...
  • nuoWei_SenLin
  • nuoWei_SenLin
  • 2016-12-17 18:43:57
  • 942

---servlet(四)Servlet和GenericServlet和HttpServlet

Servlet和GenericServlet和HttpServletUML图: Servlet使用直接实现Servlet接口必须实现以下五个方法 init(servletconfig confi...
  • qq_25201665
  • qq_25201665
  • 2016-07-10 14:20:49
  • 282

Servlet——通过GenericServlet和HttpServlet开发Servlet

本文介绍了通过GenericServlet开发Servlet的方式,也介绍了主流的通过继承HttpServlet开发Servlet的方法,最后也总结了post提交和get提交的区别...
  • ggGavin
  • ggGavin
  • 2014-05-17 16:28:17
  • 1309

Servlet技术浅析(一)之GenericServlet抽象类

简介: servlet最常用的几个对象: 1、请求对象(ServletRequest和HttpServletRequest):Servlet从该对象中,获取来自客户端的请求信息。 2、响应...
  • u011159417
  • u011159417
  • 2017-01-03 14:42:30
  • 524

httpServlet,GenericServlet,Servlet源码分析

httpServlet源码: /* * Licensed to the Apache Software Foundation (ASF) under one or more * cont...
  • kyi_zhu123
  • kyi_zhu123
  • 2016-09-28 21:59:40
  • 1538
收藏助手
不良信息举报
您举报文章:关于GenericServlet和HttpServlet
举报原因:
原因补充:

(最多只允许输入30个字)