Servlet , GenericServlet和HttpServlet
Servlet是一套规范,表现为一套接口,留给开发人员去实现,Servlet接口定义如下(附加servlet-api source来查看源码)
其中init方法被Servlet容器调用,servlet容器就是比如说Tomcat Server中的Service中的Connector和Container中的Container。
public interface Servlet {
public void init(ServletConfig config) throws ServletException;
public ServletConfig getServletConfig();
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException;
public String getServletInfo();
public void destroy();
}
其中还有一个很重要的一个接口ServletConfig, 实现该接口必须实现如下方法: 这些方法是有关获取Servlet参数和ServletContext的。Servlet参数如何传递呢, 可以在web.xml中通过init-param传递参数,这个参数就是通过ServletConfig来保存的,ServletContext代表应用本身,整个应用都可以访问到。ServletConfig中保存的参数是Servlet级别的,ServletContext则是应用级的。
比如使用Spring的时候,一般会设置applicationContext.xml的路径,通常就是在context-param里设置contextConfigLocation。而Spring MVC中设置的参数则是在init-param中,这是Servlet级别的,存在ServletConfig中。
public interface ServletConfig {
public String getServletName();
public ServletContext getServletContext();
public String getInitParameter(String name);
public Enumeration getInitParameterNames();
}
GenericServlet是Servlet的默认实现,该类还实现了ServletConfig方法。它帮我们做了一些事儿,比如我们可以直接getServletContext。而不用getServletConfig().getServletContext();因为该方法内部帮我们做了这个操作。另外还帮我们做了一个无参init方法,无参init被实现的有参init方法调用,有参init方法中实现如下,这可以帮我们不关注config赋值,让子类重写init变得纯粹
,只处理我们自己的业务逻辑。如果重写了有参init方法,要记得调用super.init(config), 这样为config赋值。其实也没有必要重写这个了~
public void init(ServletConfig config) throws ServletException {
this.config = config;
this.init();
}
HttpServlet是和协议相关的实现,它继承了GenericServlet,实现中丰富了service方法,将ServletRequest和ServletResponse转换为HttpServletRequest和HttpServletResponse,并将不同的请求类型路由到不同的处理方法中。因为后者接口继承了前者。
HttpServletRequest extends ServletRequest
public class HttpServletRequestWrapper extends ServletRequestWrapper implements HttpServletRequest
Servlet , GenericServlet和HttpServlet的更多相关文章
- servlet、genericservlet、httpservlet之间的区别
转自:http://blog.csdn.net/rat9912345/article/details/5161789 当编写一个servlet时,必须直接或间接实现servlet接口,最可能实现的方法 ...
- servlet实现的三种方式对比(servlet 和GenericServlet和HttpServlet)
第一种: 实现Servlet 接口 第二种: 继承GenericServlet 第三种 继承HttpServlet (开发中使用) 通过查看api文档发现他们三个(servlet 和GenericSe ...
- Servlet,GenericServlet和HttpServlet的继承关系
HttpServlet是GenericServlet的子类. GenericServlet是个抽象类,必须给出子类才能实例化.它给出了设计servlet的一些骨架,定义了servlet生命周期,还有一 ...
- servlet、genericservlet、httpservlet之间的区别(转)
当编写一个servlet时,必须直接或间接实现servlet接口,最可能实现的方法就是扩展javax.servlet.genericservlet或javax.servlet.http.httpser ...
- Servlet的 GenericServlet 和 HttpServlet
一.GenericServlet? servlet 是一个接口 下面有两个抽象类 GenericServlet 和 HttpServlet 需要被 继承并重写其中的方法. package javawe ...
- Javaweb学习笔记——(九)——————Servlet的进入,及ServletConfig、GenericServlet、HttpServlet、ServletContext、获取类路径资源
Servlet1.什么是Servlet? *Servlet是Javaweb三大组件之一(Servlet,Filter,Listener) *Servlet是用来处理客户端请求的动态资源 *Servle ...
- Servlet】(2)有关Servlet实现的几个类:GenericServlet、HttpServlet、ServletConfig、ServletContext
一.GenericServlet 1.所有的成员方法: 1.在javaWeb项目中: 2.web.xml <?xml version="1.0" encoding=" ...
- 超全面的JavaWeb笔记day09<Servlet&GenericServlet&HttpServlet&ServletContext>
1.Servlet概述 2.Servlet接口 3.GenericServlet 4.HttpServlet 5.Servlet细节 6.ServletContext(重要) Servlet概述 生命 ...
- Java Servlet(六):HttpServlet实现原理(jdk7+tomcat7+eclipse)
本篇记录了HttpServlet的实现过程,主要讲述了如何依赖Servlet,GenericServlet实现的原理. HttpServlet实现过程:1.是一个Servlet,继承自GenericS ...
随机推荐
- Seminar Schedule
Seminar Schedule (C2017 | 2019.9-12 | 3rd semester S0500783) *************************************** ...
- Eclipse启动发生的错误:An internal error occurred during: "Initializing Java Tooling".
1.启动Eclipse时,初始化异常:An internal error occurred during: "Initializing Java Tooling". 解决方案:wi ...
- Java调用api使用企业邮箱账户发送邮件
package cn.ucmed.otaka.healthcare.rubik.common; import lombok.extern.slf4j.Slf4j; import javax.mail. ...
- <每日 1 OJ> -LeetCode20. 有效的括号
题目: 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合.左括号必须以正确的顺序闭合.注意空字符串可 ...
- java基础之 hashmap
Hashmap是一种非常常用的.应用广泛的数据类型,最近研究到相关的内容,就正好复习一下.网上关于hashmap的文章很多,但到底是自己学习的总结,就发出来跟大家一起分享,一起讨论. 1.hashma ...
- 生成随机验证码,上传图片文件,解析HTML
1.生成随机图片验证码 1.1 页面调用createvalidatecode 生成随机图片验证码方法: <div class="inputLine"><label ...
- volatile 和 内存屏障
接下来看看volatile是如何解决上面两个问题的: 被volatile修饰的变量在编译成字节码文件时会多个lock指令,该指令在执行过程中会生成相应的内存屏障,以此来解决可见性跟重排序的问题. 内存 ...
- windows x64安装与测试redis
说明:安装与测试的系统为windows X64: 1.下载redis:https://github.com/microsoftarchive/redis/releases 2.解压Redis-x64- ...
- 【源码阅读】SpringBoot-v2.2.0启动过程以及细节
启动流程 图如下: 以上流程图源文件(可导入https://www.processon.com):https://github.com/Mysakura/DataFiles 相关Event(org.s ...
- BJFU-225-基于链表的两个递增有序序列的合并
#include<stdio.h> #include<stdlib.h> typedef struct Lnode{ int num; struct Lnode * next; ...