zoukankan      html  css  js  c++  java
  • 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 "";
        }

     

        

       

       

        

        

        

       

        

  • 相关阅读:
    【python cookbook】找出序列中出现次数最多的元素
    2018/1/21 Netty通过解码处理器和编码处理器来发送接收POJO,Zookeeper深入学习
    读《风雨20年》小感
    两个知识点的回顾(const指针和动态链接库函数dlopen)
    小试牛刀
    chmod,chown和chgrp的区别
    node.js中使用node-schedule实现定时任务
    在 Node.js 上调用 WCF Web 服务
    nodejs发起HTTPS请求并获取数据
    openstack 之~云计算介绍
  • 原文地址:https://www.cnblogs.com/sacai/p/11618604.html
Copyright © 2011-2022 走看看