



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
GenericServlet类1.GenericServlet原理分析GenericServlet类是一个抽象类,并且是Servlet接口的实现类,HttpServlet类的父类,下面我们通过一张图来更直观的了解GenericServlet的类结构,如图1-1所示:ServletConfig接口Servlet接口图1-1 GenericServlet类结构通过图1-1发现,GenericServlet类不仅实现了Servlet接口,还实现了ServletConfig接口。因此,在GenericServlet类中一定包含Servlet接口和ServletConfig接口的所有方法.。接下来,我们创建一个类来模拟GenericServlet的功能,详情请参考GenericServlet案例详解,点击此处下载源代码。(1)创建应用Example11,新建一个类MyServlet,该类实现了Servlet接口,具体代码如例1-1所示:例1-1 MyServlet.javapublic class MyServlet implements Servlet /* * 成员变量config * */ private ServletConfig config; public void init()Overridepublic void destroy() System.out.println(destroy run.); /* * 返回config,该方法一定在init方法之后执行 * */Overridepublic ServletConfig getServletConfig() return config;Overridepublic String getServletInfo() return MyServlet.;/* * init()方法是这些方法中,最先被调用的,在本类构造方法执行后执行. * */Overridepublic void init(ServletConfig servletConfig) throws ServletException /* * 将服务器创建的servletConfig对象赋值给本类的成员变量config,方便在其他方法中使用 * */this.config=servletConfig; init();Overridepublic void service(ServletRequest arg0, ServletResponse arg1)throws ServletException, IOException System.out.println(service run .); /* * 获得Servlet的初始化参数 * */public String getInitParameter(String name)return this.config.getInitParameter(name);/* * 获得ServletContext对象 * */public ServletContext getServletContext()return this.config.getServletContext();public String getServletName()return this.config.getServletName();由例1-1可知,当前的MyServlet类中不仅包含了Servlet接口的五个方法,还包含了以下方法:l public ServletConfig getServletContext()l public String getInitParameter(String name)l public String getServletName()由于GenericServlet类实现了ServletConfig接口,那么必然重写了ServletConfig的方法,因此在MyServlet 类中也要定义了ServletConfig的相关方法,这些方法的实现都是通过成员变量config调用自身的方法来实现的。另外MyServlet类中还有一个无参的init()方法,该方法不是生命周期方法,它会被生命周期方法init(ServletConfig)方法调用。 这样做的目的是为了方便继承MyServlet类的子类,完成自己所需要的初始化工作,而不用再定义一个ServletConfig类型的成员变量。(2)再创建一个Servlet类,让该类继承MyServlet 类,具体代码如例1-2所示:例1-2 SonServlet.javapublic class SonServlet extends MyServletOverridepublic void init(ServletConfig config) / TODO Auto-generated method stubSystem.out.println(i am sonservlet.);Overridepublic void service(ServletRequest arg0, ServletResponse arg1)throws ServletException, IOException String value=getInitParameter(name);由例1-2可知,在SonServlet中定义了本类的init(ServletConfig)方法,该方法会覆盖父类的init(ServletConfig)方法。那么第一次访问该Servlet时,服务器会调用子类的init()生命周期方法进行初始化,父类的init()生命周期方法没有被调用,那么父类的config成员就为null,当 SonServlet 类中的service方法调用父类的getInitParameter()方法时就会出现空指针异常。所以,SonServlet 类中不能覆写有参的init()方法,而应该覆写无参的init()方法。这也是为什么在MyServlet类中定义一个无参的init()方法,然后再在有参的init方法中调用无参的init方法的原因。以上案例就是为了方便开发人员开发Servlet,以后就不用去实现Servlet接口。现在我们来看一下GenericServlet的源码,源码的jar包点击此处进行下载。具体代码如例1-3所示:例1-3 GenericServlet.javapublic 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 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 Se
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 科研名师考试题及答案
- 中建兴业面试题及答案
- 统编版一上《我是小学生》说课课件
- 河南科技学院《水彩头像技法解析》2023-2024学年第二学期期末试卷
- 5.15《谁在动》课件 鄂教版科学三年级下册
- 唐山海运职业学院《基础工程(B)》2023-2024学年第二学期期末试卷
- 红河卫生职业学院《工程光学(2)》2023-2024学年第二学期期末试卷
- 道班翻新合同(2篇)
- 毕业自我鉴定总结
- 2025年健康养生食品行业市场细分领域:养生保健品研究报告
- 建筑工程公司安全生产管理实施细则(2篇)
- 钠离子电池-武汉大学杨汉西老师文档
- 2024年考研英语一阅读理解80篇试题及答案
- DB65-T 4824-2024 干旱区蒸散发量计算规范
- 2025届高考生物备考说课稿:生态系统的物质循环、信息传递和稳定性
- 我是为了您的孩子 您是为了我的学生-期中测试家长会 课件
- 2023年中考物理复习《三类液面高度变化问题的深度解析》
- 2024年全县金融工作会议讲话材料例文(5篇)
- 委托监护协议书格式
- 2024年保密培训课件:员工保密知识要点
- 车站值班员(高级)技能鉴定理论题库(浓缩400题)
评论
0/150
提交评论