一:什么是Servlet:
Servlet是javaWeb的三大组件之一,它属于动态资源。Servlet的作用是处理请求,服务器会把接收到的请求交给Servlet来处理,在Servlet中通常需要:
1.接收请求数据
2.处理请求
3.完成响应
javax.servlet.Servlet接口
二:实现Servlet的方式
实现Servlet有三种方式:
1.实现javax.servlet.Servlet接口
2.继承javax.servlet.GenericServlet类
3.继承javax.servlet.http.HttpServlet类
通常我们会继承HttpServlet类来完成我们的Servlet,但学习Servlet还要从java.servlet.Servlet接口开始学习。
实现Servlet.java
/**
*查看Servlet接口中的方法
*/
public class AServlet implements Servlet {
/*
*它也是生命周期方法
*它会在Servlet被销毁之前调用,并且它只会被调用一次!
*/
@Override
public void destroy() {
System.out.println("destory().....");
}
/*
* 可以用来获取Servlet的配置信息
*/
@Override
public ServletConfig getServletConfig() {
System.out.println("getServletConfig().........");
return null;
}
/*
*获取Servlet信息
*/
@Override
public String getServletInfo() {
System.out.println("getServletInfo()......");
return null;
}
/*
* 它是生命周期方法
* 它会在Servlet对象创建之后马上执行,并只执行一次!(出声之后调用)
*/
@Override
public void init(ServletConfig arg0) throws ServletException {
System.out.println("init()....");
}
/*
* 它是生命周期方法
* 它会被调用多次!
* 每次处理请求都是在调用这个方法
*/
@Override
public void service(ServletRequest request, ServletResponse response)
throws ServletException, IOException {
System.out.println("service()......");
}
编写完Servlet类需要在web.xml文件中配置Servlet;
<servlet>
<servlet-name>AServlet</servlet-name>
<servlet-class>cn.itcast.web.servlet.AServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>AServlet</servlet-name>
<url-pattern>/AServlet</url-pattern>
</servlet-mapping>
三:Servlet的生命周期
所谓xxx的生命周期,就是说xxx的出生、服务,以及死亡。Servlet生命周期也是如此!与Servlet的生命周期有关的方法有:
1. public void init(ServletConfig config) throws ServletException
2. public abstract void service(ServletRequest req,ServletResponse res) throws ServletException, java.io.IOException
3. public void destroy()
1.Servlet的出生
服务器会在Servlet第一次被访问是创建Servlet,或者是在服务器启东市创建Servlet。如果服务器启动时创建Servlet,那么需要在web.xm文件中配置。也就是说默认情况下,Servlet是在第一次被访问时有服务器创建的。
而已一个Servlet类型,服务器只创建一个实例对象,例如在我们首次访问http://localhost:8080/AServlet时,服务器通过“/AServlet”找到了绑定的Servlet名称为cn.itcast.servlet.AServlet,然后服务器查看这个类型的Servlet是否已经创建过,如果没有创建过,那么服务器才会通过反射来创建AServlt的实例。当我们再次访问
cn.itcast.servlet.AServlet时,服务器不会再次创建AServlet实例了,而是直接使用上次创建的实例。
在Servlet被创建后,服务器会马上调用Servlet的void init(ServletConfig config)方法。请记得,Servlet实例化对象创建后马上就会调用init()方法,而且一个Servlt的
一生只会调用一次这个方法。这个方法只会被调用一次。
我们可以爸一些对Servlet的初始化工作放在init()方法中!
2.Servlet服务
当服务器每次接收到请求时,都会调用Servlet的service()方法来处理请求。服务器接收到一次请求,就会调用seviet()方法一次,所用service()方法是会被调用多次的。
正是因为如此,所以我们才需要把处理请求的代码写在service()方法中!
3.Servlet的销毁
通常在服务器关闭时Servlet才会销毁。在服务器被关闭时,服务器会去销毁Servlet,在销毁Servlet之前会调用Servlet的destroy()方法,我们可以把Servlet的临终遗言
放到destroy()方法中,例如对某些资源的释放等代码放到destroy()方法中。
@Override
public void destroy() {
// NOOP by default
}
/**
* 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
*/
@Override
public String getInitParameter(String name) {
return getServletConfig().getInitParameter(name);
}
/**
* Returns the names of the servlet's initialization parameters as an
* <code>Enumeration</code> of <code>String</code> objects, or an empty
* <code>Enumeration</code> if the servlet has no initialization parameters.
* See {@link ServletConfig#getInitParameterNames}.
* <p>
* This method is supplied for convenience. It gets the parameter names from
* the servlet's <code>ServletConfig</code> object.
*
* @return Enumeration an enumeration of <code>String</code> objects
* containing the names of the servlet's initialization parameters
*/
@Override
public Enumeration<String> getInitParameterNames() {
return getServletConfig().getInitParameterNames();
}
/**
* Returns this servlet's {@link ServletConfig} object.
*
* @return ServletConfig the <code>ServletConfig</code> 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}.
* <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
*/
@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 "";
}