javaweb之GenericServlet和HttpServlet的区别以及原理实现

GenericServlet

实现了Servlet接口,并帮我们做了一些常用操作

1.init方法 妥善的保存config对象并实现getServletInfo,getServletConfig,

2.增加一个空参init方法,供开发人员初始化,为了防止开发人员重写 原生init方法

3.service方法空实现=> 声明城抽象(强制开发人员实现该方法)

4.destory方法空实现

5.实现了servletConfig接口. 接口中的方法直接调用config实现类实现.

自定义一个GeneriServlet类,加深原理的理解
public abstract class MyGenericServlet implements Servlet, ServletConfig {
	private ServletConfig servletConfig;

	@Override
	public void destroy() {
	}

	@Override
	public ServletConfig getServletConfig() {
		return this.servletConfig;
	}

	@Override
	public String getServletInfo() {

		return null;
	}

	@Override
	public abstract void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException;

	@Override
	public String getInitParameter(String arg0) {
		return servletConfig.getInitParameter(arg0);
	}

	@Override
	public ServletContext getServletContext() {
		return servletConfig.getServletContext();
	}

	@Override
	public Enumeration<String> getInitParameterNames() {
		return null;
	}

	@Override
	public String getServletName() {
		return null;
	}

	@Override
	public void init(ServletConfig config) throws ServletException {
		this.servletConfig = config;
		this.init();
	}

	public void init() throws ServletException {

	}

}

public class ServletTwo extends MyGenericServlet{ 普通的Servlet只需要继承自定义的Servlet,起到讲话的作用。Tomcat也自帶了一個GenericServlet我們可以用它。

HttpServlet

在GenericServlet的基础上针对http服务做的一些优化

1.service函数中强转参数
ServletRequest—>HttpServletRequest;
ServletResponse—>HttpServletResponse

2.根据不同的请求方式(get,post等)调用不同的方法(doGet,doPost等)

所以我们写http服务的话,直接继承HTTPServlet就可以了,然后再doGet等方法中处理响应

自定义一个HttpServlet类,,加深原理的理解
public abstract class MyHttpServlet extends MyGenericServlet {
	private static final String METHED_GET = "GET";
	private static final String METHED_POST = "POST";

	@Override
	public void service(ServletRequest servletRequest, ServletResponse servletResponse) {
		try {
			// 强转类型
			HttpServletRequest request = (HttpServletRequest) servletRequest;
			HttpServletResponse response = (HttpServletResponse) servletResponse;
			// 调用service(HttpServletRequest,HttpServletResponse)方法
			service(request, response);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	protected void service(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) {
		// 根据请求方式,决定使用的方法
		String method = httpServletRequest.getMethod();

		if (method.equalsIgnoreCase(METHED_GET)) {
			doGet(httpServletRequest, httpServletResponse);
		} else if (method.equalsIgnoreCase(METHED_POST)) {
			doPost(httpServletRequest, httpServletResponse);
		}
	}

	protected void doPost(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) {

	}

	protected void doGet(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) {

	}

}

从以上的代码中可以看出,我们自己写Servlet的时候,直接继承Httpservlet类就行。

GenericServlet和HttpServlet的联系

1、GenericServlet类是所有Servlet类的祖先类。

2、HttpServlet类继承了GenericServlet类。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值