• Servlet技术基础


    由于Servlet部分涉及较多的类,要想尽快掌握Servlet基础,必须熟悉使用这些类之间的关系以及其常用的方法。

    主要讲解部分包括:

    1)通过实现Servelt接口来编写Servlet

    2)熟悉ServletRequest/ServletResponse/ServletConfig接口

    3)学习GernericServlet/HttpServlet抽象类

    4)熟悉HttpServletRequest和HttpServletResponse接口

    5)Servlet开发中一些方法和技巧的使用、Servlet异常、Servlet上下文

    6)RequestDispatcher对象的使用

    7)区分sendRedirect()和forward()方法的使用,即重定向和转发的区别。


    1 Servlet API

    开发Servlet需要使用的核心类和接口如下图:熟悉接口或者类中的常用方法。

    1)Servlet接口

    Servlet运行在服务器端的Servlet容器中,具有生命周期:

    该接口中定义了5个方法:

    public abstract void init(ServletConfig servletconfig)throws ServletException;

    public abstract ServletConfig getServletConfig();

    public abstract void service(ServletRequest servletrequest, ServletResponse servletresponse)throws ServletException, IOException;

    public abstract String getServletInfo();

    public abstract void destroy();

    下面分别介绍这五个方法的主要作用:

    init()方法:

      在Servlet实例化之后,Servlet容器会调用Init()方法,来初始化该对象,主要是为了让Servlet对象在处理客户请求前可以完成一些初始化工作。比如说建立数据库连接、获取配置信息等,对于每一个Servlet实例,init()方法只能被调用一次,init()方法有一个类型为ServletConfig的参数,Servlet容器通过这个参数向Servlet传递配置信息。Servlet使用ServletConfig对象从web应用程序的配置信息中(web.xml中Servlet标签内配置的参数)获取以名-值对形式提供的初始化参数。另外,在Servlet中,还可以通过ServletConfig对象获取描述Servlet运行环境的ServletContext对象,使用该对象,Servlet可以和其他的Servlet容器进行通信,共享一些信息。

    service()方法:

      容器调用service()方法来处理客户端的请求,注意:在service()调用之前,必须确保init()方法正确完成。容器会构造一个表示客户端请求信息的请求对象ServletRequest和一个用于对客户端进行响应的响应对象ServletResponse作为参数传递给service()方法。在service()方法中通过ServletRequest得到客户端的相关信息和请求信息,在对请求进行处理后,调用ServletResponse对象的方法设置响应信息。

    getServletConfig()方法:

      该方法返回容器调用init()方法时传递给Servlet对象的ServletConfig对象,ServletConfig对象包含Servlet的初始化参数。

    destroy()方法:

      当容器检测到一个Servlet对象应该从服务中被移除时,容器会调用该Servlet对象的destroy()方法,以便让Servlet对象可以释放它所使用的资源,保存数据到持久化存储设备中。在Servlet容器调用destroy()方法前,如果还有其他的线程正在执行service()方法,容器会等待这些线程执行完毕或者等待服务器设定的超时值到达。一旦Servlet对象的destroy()方法被调用,容器不会再把其他的请求发送给该对象,如果需要该Servlet对象再次服务,容器将会重新产生一个Servlet对象来处理客户端的请求。在destroy()方法调用之后,容器会释放这个Servlet对象,在随后的时间内,该对象会被java的垃圾回收器回收。(一旦执行此方法,该对象就不能再使用了)

    2)ServletRequest和ServletResponse接口

        Servlet由Servlet容器来管理,当客户端请求到来时,容器会创建一个ServletRequest对象,并封装请求数据,同时创建一个ServletResponse对象,封装响应数据。这两个对象被容器作为service()方法的参数传递给Servlet,Servlet利用ServletRequest对象获取客户端发来的请求数据,利用ServletResponse对象发送响应数据。

    ServletRequest常用的方法:

    public abstract Object getAttribute(String s);

    public abstract Enumeration getAttributeNames();

    public abstract String getCharacterEncoding();

    public abstract void setCharacterEncoding(String s)throws UnsupportedEncodingException;

    public abstract int getContentLength();

    public abstract String getContentType();

    public abstract ServletInputStream getInputStream()throws IOException;

    public abstract String getParameter(String s);

    public abstract Enumeration getParameterNames();

    public abstract String[] getParameterValues(String s);

    public abstract String getProtocol();

    public abstract String getServerName();

    public abstract int getServerPort();

    public abstract BufferedReader getReader()throws IOException;

    public abstract String getRemoteAddr();

    public abstract String getRemoteHost();

    public abstract void setAttribute(String s, Object obj);

    public abstract void removeAttribute(String s);

    public abstract RequestDispatcher getRequestDispatcher(String s);

    public abstract int getRemotePort();

    public abstract String getLocalName();

    public abstract String getLocalAddr();

    public abstract int getLocalPort();

    public abstract ServletContext getServletContext();

    ServletResponse常用的方法:

    3)ServletConfig接口

    注意:一个Servlet只有一个ServletConfig对象

    方法:

    public abstract String getServletName();

    public abstract ServletContext getServletContext(); //返回Servlet上下文的引用,ServletContext将在后面详细介绍

    public abstract String getInitParameter(String s);  //初始化参数在web.xml文件中进行配置,如果不存在返回null

    public abstract Enumeration getInitParameterNames();

  • 相关阅读:
    Spring Boot 搭建项目阶段Group和Artifact的含义
    设置Mysql数据库账号密码以及时区
    反射
    线程与进程
    网络编程
    队列和栈
    linux下的mysql
    积累的关于linux的安装卸载软件基本命令
    各种url编码
    解决浏览器传值乱码
  • 原文地址:https://www.cnblogs.com/zwbg/p/5943779.html
Copyright © 2020-2023  润新知