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 ...
随机推荐
- 驱动中如何给ring3层应用程序提权
为什么会有这个需求就不用我多说了吧:) 目前在驱动中提权我知道的有三种办法 1. 该方法来源于stoned bootkit,主要原理是把services.exe的EPROCESS中的Token值取出来 ...
- 4.Lucene3.案例介绍,创建索引,查询等操作验证
案例: Article.java package cn.toto.lucene.quickstart; publicclassArticle { privateintid; private St ...
- 关于activitygroup过时,用frament替换操作
现在Fragment的应用真的是越来越广泛了,之前Android在3.0版本加入Fragment的时候,主要是为了解决Android Pad屏幕比较大,空间不能充分利用的问题,但现在即使只是在手机上, ...
- 【Android应用开发】Android Studio 错误集锦 -- 将所有的 AS 错误集合到本文
. 一. 编译错误 1. "AndroidManifest.xml file not found" 错误 (1) 报错信息 报错信息 : -- Message Make : Inf ...
- 最简单的视频网站(JavaEE+FFmpeg)
本文记录一个最简单的视频网站系统.此前做过一些基于JavaEE中的SSH (Strut2 + Spring + Hibernate)的网站系统,但是一直没有做过一个视频网站系统,所以就打算做一个&qu ...
- ubuntu中安装samba
为了方便的和Windows之间进行交互,samba必不可少. 当然,他的安装使用也很简单: 安装: sudo apt-get install samba sudo apt-get install sm ...
- Ext JS 6开发实例(四) :调整主视图
上文把主界面设置好,但是主视图因为界面的微调出现了显示问题,本文将把它调整好了. 打开app/view/main/Main.js,可以看到主视图是派生于标签面板(Ext.tab.Panel)的.在视图 ...
- Dynamics CRM 2015Online Update1 new feature之表单页Tabs切换
CRM2011的界面相对于CRM4.0进行了比较大的改动,N久没见过4.0的界面了所以忘了表单是什么样子的了,但2011的表单中若含有多个tab的话,是可以通过左侧栏进行切换,话说2013的界面相对2 ...
- myeclipse一直停留在Loading workbench界面上的处理办法
找到工作目录比如我的叫work,在.metadata中删掉以下两个文 件,再次重启myeclipse走一个! org.eclipse.ui.workbench org.eclipse.ui.workb ...
- 【一天一道LeetCode】#349. Intersection of Two Arrays
一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given t ...