HttpServlet基本原理:
HttpServlet 继承GenericServlet 也就是说GenericServlet中的所有方法都能被HttpServlet所使用的但是HttpServlet也有自己的方法, 比较常用的就是doPost(),doGet(),这是对jsp页面的提交请求所使用的。下面图片是GenericServlet的源码,这里是实现了接口Servlet 中的方法,也就是说你继承HttpServlet就是间接的调用Servlet中的方法,但是servlet中有一些是周期方法init(),destory() ,service()我记得好像就这三个周期方法,但是呢Service是必须执行的每次请求都会执行一次,但是呢init()只是第一次请求时执行,这里我说init方法并不是servlet中无参的init,而是带参数的。无参的init只是一个构造方法并不是周期方法,而周期方法你不用调用它们都会自己来执行,每当你启动服务器是,他们就init就开始执行了。还有一个周期就是destory(),每当你关闭服务器之前结束,并不是和服务器一起死掉,注意之前。Servlet中还有一些方法:public String getServletInfo() ,public ServletContext getServletContext()….这些在Tomcat中说的足够详细。
这就是我对HttpServlet一些简单的理解,并不是特别的深入。
下面是GenericServlet的源代码:
/*
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the “License”); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
http://www.apache.org/licenses/LICENSE-2.0
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an “AS IS” BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
*/
package javax.servlet;
import java.io.IOException;
import java.util.Enumeration;
/**
-
Defines a generic, protocol-independent servlet. To write an HTTP servlet for
-
use on the Web, extend {@link javax.servlet.http.HttpServlet} instead.
-
-
GenericServlet
implements theServlet
and -
ServletConfig
interfaces.GenericServlet
may be -
directly extended by a servlet, although it’s more common to extend a
-
protocol-specific subclass such as
HttpServlet
. -
-
GenericServlet
makes writing servlets easier. It provides simple -
versions of the lifecycle methods
init
anddestroy
-
and of the methods in the
ServletConfig
interface. -
GenericServlet
also implements thelog
method, -
declared in the
ServletContext
interface. -
-
To write a generic servlet, you need only override the abstract
-
service
method. -
@version V e r s i o n Version Version
*/
public abstract class GenericServlet implements Servlet, ServletConfig,
java.io.Serializable {private static final long serialVersionUID = 1L;
private transient ServletConfig config;
/**
- Does nothing. All of the servlet initialization is done by one of the
init
methods.
*/
public GenericServlet() {
// NOOP
}
/**
- Called by the servlet container to indicate to a servlet that the servlet
- is being taken out of service. See {@link Servlet#destroy}.
*/
@Override
public void destroy() {
// NOOP by default
}
/**
- Returns a
String
containing the value of the named - initialization parameter, or
null
if the parameter does not - exist. See {@link ServletConfig#getInitParameter}.
-
- This method is supplied for convenience. It gets the value of the named
- parameter from the servlet’s
ServletConfig
object. - @param name
-
a <code>String</code> specifying the name of the
-
initialization parameter
- @return String a
String
containing the value of the -
initialization parameter
*/
@Override
public String getInitParameter(String name) {
return getServletConfig().getInitParameter(name);
}/**
- Returns the names of the servlet’s initialization parameters as an
Enumeration
ofString
objects, or an emptyEnumeration
if the servlet has no initialization parameters.- See {@link ServletConfig#getInitParameterNames}.
-
- This method is supplied for convenience. It gets the parameter names from
- the servlet’s
ServletConfig
object. - @return Enumeration an enumeration of
String
objects -
containing the names of the servlet's initialization parameters
*/
@Override
public Enumeration getInitParameterNames() {
return getServletConfig().getInitParameterNames();
}/**
- Returns this servlet’s {@link ServletConfig} object.
- @return ServletConfig the
ServletConfig
object that -
initialized this servlet
*/
@Override
public ServletConfig getServletConfig() {
return config;
}/**
- Returns a reference to the {@link ServletContext} in which this servlet
- is running. See {@link ServletConfig#getServletContext}.
-
- This method is supplied for convenience. It gets the context from the
- servlet’s
ServletConfig
object. - @return ServletContext the
ServletContext
object passed to -
this servlet by the <code>init</code> method
*/
@Override
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
*/
@Override
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}.
-
- This implementation stores the {@link ServletConfig} object it receives
- from the servlet container for later use. When overriding this form of
- the method, call
super.init(config)
. - @param config
-
the <code>ServletConfig</code> object that contains
-
configuration information for this servlet
- @exception ServletException
-
if an exception occurs that interrupts the servlet's
-
normal operation
- @see UnavailableException
*/
@Override
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
super.init(config)
. -
- Instead of overriding {@link #init(ServletConfig)}, simply override this
- method and it will be called by
GenericServlet.init(ServletConfig config)
. TheServletConfig
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 {
// NOOP by default
}/**
- 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
*/
public void log(String msg) {
getServletContext().log(getServletName() + ": " + msg);
}/**
- Writes an explanatory message and a stack trace for a given
Throwable
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}.
-
- This method is declared abstract so subclasses, such as
HttpServlet
, 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
*/
@Override
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
*/
@Override
public String getServletName() {
return config.getServletName();
}
}
学习 Javaweb的话Servlet很重要!要更多去了解,学习!