Java-GenricServlet
public abstract class GenericServlet implements Servlet, ServletConfig, java.io.Serializable { private transient ServletConfig config; /** * Does nothing. All of the servlet initialization * is done by one of the <code>init</code> methods. */ //空构造函数,所有的servlet初始化已经被init函数执行 public GenericServlet() { } /** * Called by the servlet container to indicate to a servlet that the * servlet is being taken out of service. See {@link Servlet#destroy}. */ //servlet容器调用,表明servlet被移除服务 public void destroy() { } /** * Returns a <code>String</code> containing the value of the named * initialization parameter, or <code>null</code> if the parameter does * not exist. See {@link ServletConfig#getInitParameter}. * <p>This method is supplied for convenience. It gets the * value of the named parameter from the servlet's * <code>ServletConfig</code> object. * @param name a <code>String</code> specifying the name * of the initialization parameter * @return String a <code>String</code> containing the value * of the initialization parameter */ //获得初始化参数name的值 public String getInitParameter(String name) { return getServletConfig().getInitParameter(name); } //初始化参数枚举 public Enumeration getInitParameterNames() { return getServletConfig().getInitParameterNames(); } /** * Returns this servlet's {@link ServletConfig} object. * @return ServletConfig the <code>ServletConfig</code> object that initialized this servlet */ //获得servlet的初始化对象 public ServletConfig getServletConfig() { return config; } /** * Returns a reference to the {@link ServletContext} in which this servlet * is running. See {@link ServletConfig#getServletContext}. * <p>This method is supplied for convenience. It gets the * context from the servlet's <code>ServletConfig</code> object. * @return ServletContext the <code>ServletContext</code> object passed to this servlet by the <code>init</code>method */ //返回正在运行的servlet的ServletContext, public ServletContext getServletContext() { return getServletConfig().getServletContext(); } /** * Returns information about the servlet, such as author, version, and copyright. * By default, this method returns an empty string. Override this method * to have it return a meaningful value. See {@link Servlet#getServletInfo}. * @return String information about this servlet, by default an empty string */ //获得Servlet信息 public String getServletInfo() { return ""; } /** * Called by the servlet container to indicate to a servlet that the * servlet is being placed into service. See {@link Servlet#init}. * <p>This implementation stores the {@link ServletConfig} object it receives from the servlet container for later use. When overriding this form of the method, call * <code>super.init(config)</code>. * @param config the <code>ServletConfig</code> object that contains configutation information for this servlet * @exception ServletException if an exception occurs that interrupts the servlet's normal operation * @see UnavailableException */ //servlet容器进行调用,表明这个Servlet被放置进服务 public void init(ServletConfig config) throws ServletException { this.config = config; this.init(); } /** * A convenience method which can be overridden so that there's no need * to call <code>super.init(config)</code>. * <p>Instead of overriding {@link #init(ServletConfig)}, simply override * this method and it will be called by<code>GenericServlet.init(ServletConfig config)</code>. * The <code>ServletConfig</code> object can still be retrieved via {@link #getServletConfig}. * @exception ServletException if an exception occurs that interrupts the servlet's normal operation */ public void init() throws ServletException { } /** * Writes the specified message to a servlet log file, prepended by the * servlet's name. See {@link ServletContext#log(String)}. * @param msg a <code>String</code> specifying * the message to be written to the log file */ //写Servlet名和信息日志 public void log(String msg) { getServletContext().log(getServletName() + ": "+ msg); } /** * Writes an explanatory message and a stack trace * for a given <code>Throwable</code> exception * to the servlet log file, prepended by the servlet's name. * See {@link ServletContext#log(String, Throwable)}. * @param message a <code>String</code> that describes the error or exception * @param t the <code>java.lang.Throwable</code> error or exception */ public void log(String message, Throwable t) { getServletContext().log(getServletName() + ": " + message, t); } /** * Called by the servlet container to allow the servlet to respond to * a request. See {@link Servlet#service}. * * <p>This method is declared abstract so subclasses, such as * <code>HttpServlet</code>, must override it. * @param req the <code>ServletRequest</code> object that contains the client's request * @param res the <code>ServletResponse</code> object that will contain the servlet's response * @exception ServletException if an exception occurs that interferes with the servlet's normal operation occurred * @exception IOException if an input or output exception occurs */ //servlet 容器调用来运行Servlet 对请求进行回复 public abstract void service(ServletRequest req, ServletResponse res) throws ServletException, IOException; /** * Returns the name of this servlet instance. * See {@link ServletConfig#getServletName}. * @return the name of this servlet instance */ //Servlet名称 public String getServletName() { return config.getServletName(); } }
Java-GenricServlet的更多相关文章
- Spark案例分析
一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...
- Java Servlet(五):GenericServlet与Servlet、HttpServlet之间的关系(jdk7+tomcat7+eclipse)
本篇主要记录下,对GenericServlet的作用理解,及其与Servlet/HttpServlet之间的关系. 示例完成业务: 1.新建一个login.jsp页面,要求改页面能输入username ...
- 故障重现(内存篇2),JAVA内存不足导致频繁回收和swap引起的性能问题
背景起因: 记起以前的另一次也是关于内存的调优分享下 有个系统平时运行非常稳定运行(没经历过大并发考验),然而在一次活动后,人数并发一上来后,系统开始卡. 我按经验开始调优,在每个关键步骤的加入如 ...
- Elasticsearch之java的基本操作一
摘要 接触ElasticSearch已经有一段了.在这期间,遇到很多问题,但在最后自己的不断探索下解决了这些问题.看到网上或多或少的都有一些介绍ElasticSearch相关知识的文档,但个人觉得 ...
- 论:开发者信仰之“天下IT是一家“(Java .NET篇)
比尔盖茨公认的IT界领军人物,打造了辉煌一时的PC时代. 2008年,史蒂夫鲍尔默接替了盖茨的工作,成为微软公司的总裁. 2013年他与微软做了最后的道别. 2013年以后,我才真正看到了微软的变化. ...
- 故障重现, JAVA进程内存不够时突然挂掉模拟
背景,服务器上的一个JAVA服务进程突然挂掉,查看产生了崩溃日志,如下: # Set larger code cache with -XX:ReservedCodeCacheSize= # This ...
- 死磕内存篇 --- JAVA进程和linux内存间的大小关系
运行个JAVA 用sleep去hold住 package org.hjb.test; public class TestOnly { public static void main(String[] ...
- 【小程序分享篇 一 】开发了个JAVA小程序, 用于清除内存卡或者U盘里的垃圾文件非常有用
有一种场景, 手机内存卡空间被用光了,但又不知道哪个文件占用了太大,一个个文件夹去找又太麻烦,所以我开发了个小程序把手机所有文件(包括路径下所有层次子文件夹下的文件)进行一个排序,这样你就可以找出哪个 ...
- Java多线程基础学习(二)
9. 线程安全/共享变量——同步 当多个线程用到同一个变量时,在修改值时存在同时修改的可能性,而此时该变量只能被赋值一次.这就会导致出现“线程安全”问题,这个被多个线程共用的变量称之为“共享变量”. ...
- Java多线程基础学习(一)
1. 创建线程 1.1 通过构造函数:public Thread(Runnable target, String name){} 或:public Thread(Runnable target ...
随机推荐
- 【Unity Shader】新书封面 — Low Polygon风格的渲染
写在前面 最近又开心又担心,因为我的书马上就要上市了,开心当然是因为等了这么久终于可以如愿了,担心是因为不少人对它的期待都很大,我第一次写书,能力也有限,不知道能不能让大家满意,让大家也都喜欢上它.不 ...
- Markdown对应Yelee主题语法
概述 这里说的是Yelee主题的语法和原生语法是有些区别的:更多的基础语法可以到Cmd Markdown上面去查看:但是我觉得都会各有不同吧 注意这里说的不是真正意义上的Markdown语法 标题 一 ...
- 【伯乐在线】100个高质量Java开发者博客
本文由 ImportNew - 夏千林 翻译自 programcreek.欢迎加入翻译小组.转载请见文末要求. ImportNew注:原文中还没有100个.作者希望大家一起来推荐高质量的Java开发博 ...
- Maven简介(Maven是什么)
简介 Maven,在意第绪语中意为对知识的积累.Maven最初用来在Jakarta Turbine项目中简化该项目的构建过程.Jakarta Trubine项目有多个工程,每个工程都有自己的多个Ant ...
- 1.Cocos2dx 3.2中vector,ValueMap,Touch触摸时间的使用.iconv字符编解码
Cocos2dx3.2以后使用Vector<T>代替了CCArray.案例如下: 头文件:T02Vector.h #ifndef __T02Vector_H__ #define __ ...
- Android插件化的思考——仿QQ一键换肤,思考比实现更重要!
Android插件化的思考--仿QQ一键换肤,思考比实现更重要! 今天群友希望写一个关于插件的Blog,思来想去,插件也不是很懂,只是用大致的思路看看能不能模拟一个,思路还是比较重要的,如果你有兴趣的 ...
- webstorm工具使用详解
webstorm简单介绍 官网地址:http://www.jetbrains.com/webstorm/features/index.html 参考地址:http://www.html5jscss.c ...
- sybase isql命令参数详解
isql 实用工具使您得以输入 Transact-SQL 语句.系统过程和脚本文件. 语法 isql [-?] | [-L] | [ { {-U login_id [-P password]} | - ...
- Java Socket输入流如何检测到EOF
对于InputStream的 read(b, off, len) 方法 public int read(byte[] b, int off, int len) throws IOException,J ...
- XML之DTD(文档类型定义)
文档类型定义(DTD)可定义合法的XML文档构建模块.它使用一系列合法的元素来定义文档的结构. DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用. 声明元素 在 DTD 中,XML 元素 ...