javaWeb-Servlet(一)

一:什么是Servlet:

  Servlet是javaWeb的三大组件之一,它属于动态资源。Servlet的作用是处理请求,服务器会把接收到的请求交给Servlet来处理,在Servlet中通常需要:

    1.接收请求数据

    2.处理请求

    3.完成响应

    例如客户端发来登陆请求,获取输出注册请求,这些请求都应该由Servlet来完成处理!Servlet需要我们自己编写,每个Servlet必须实现                       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 "";
    }

 

    

   

   

    

    

    

   

    

原文地址:https://www.cnblogs.com/sacai/p/11618604.html