• Servlet & JSP


    Servlet & Generic & HttpServlet

    类图

    Servlet 的生命周期

    init、service 和 destroy 是 servlet 的生命周期方法,它们的调用规则如下:

    init: 当第一次请求 servlet 时,servlet 容器会调用此方法,而后面即使再接收到请求,容器也不会再调用此方法。因此,可以在 init 方法内做一些初始化的操作。当调用此方法时,容器会传递一个 ServletConfig 参数,可以使用一个类级别的变量将该参数保留。Servlet 不是单例的,但是 servlet 容器对每个 Servlet 类只会构造一个实例。

    service: 当接收到请求时,servlet 容器调用此方法。

    destory: 当 servlet 被销毁时,容器会调用此方法。这通常是 web 应用从 servlet 容器卸载或者 servlet 容器关闭的时候。可以在 destroy 方法做一些清理操作。

    load-on-startup 参数

    默认情况下,当 servlet 第一次接收到请求,servlet 容器才会去构造并初始化 servlet 实例。使用 load-on-startup 参数,可以指定容器启动时就加载 servlet。当初始化操作比较复杂,耗时长时,load-on-startup 参数特别有用。load-on-startup 是一个整型的参数,它指定了容器加载 servlet 的顺序。当取值小于 0 或没有指定时,servlet 容器可以选择在任意时候实例化 servlet。当取值大于或等于 0 时,值越小,servlet 容器越优先实例化 servlet。当 load-on-startup 取值一样,servlet 容器自行选择加载 servlet 的顺序。load-on-startup 参数不同通过 @WebServlet 注解指定,而只能 web.xml 中配置:

    <servlet>
        <servlet-name>myServlet</servlet-name>
        <servlet-class>com.huey.hello.servlets.MyServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    ServletRequest & HttpServletRequest

    ServletRequest(HttpServletRequest) 封装了一个(HTTP)请求。下面是 ServletRequest(HttpServletRequest)常用的方法:

    getServletContext: 获取 servlet 上下文实例。

    getSession: 获取会话实例。

    getCookies: 获取 Cookie。

    getHeader: 获取 HTTP 请求的首部。类似的方法还有 getIntHeader。还有一些获取特定首部的方法:getContentLength、getContentType 等。

    getParameter: 获取表单和 URL 的请求参数。类似的方法还有 getParameterValues、getParameterNames 和 getParameterMap。

    getAttribute: 获取请求的属性。

    getRemoteAddr: 返回发送请求的客户端或最后一个代理的 IP 地址。

    getRemoteHost: 返回发送请求的客户端或最后一个代理的完全限定名称。

    getUserPrincipal: 返回当前已经验证过的用户的 java.security.Principal 对象。如果用户没有经过验证,则返回 null。

    ServletResponse & HttpServletResponse

    ServletResponse(HttpServletResponse) 封装了一个(HTTP)响应。下面是 ServletResponse(HttpServletResponse)常用的方法:

    setContentType: 设置响应的内容。

    addCookie: 将指定的 cookie 添加至响应。

    addHeader: 将指定的首部添加至响应。

    ServletConfig

    在调用 servlet 的 init 方法时,servlet 容器会传递一个 ServletConfig 对象,ServletConfig 封装了 servlet 的配置信息。有两种方法可以配置 servlet 的初始参数。

    在 web.xml 中配置 servlet 的初始参数:

    <servlet>
        <servlet-name>myServlet</servlet-name>
        <servlet-class>com.huey.hello.servlets.MyServlet</servlet-class>
        <init-param>
            <param-name>user</param-name>
            <param-value>huey</param-value>
        </init-param>
    </servlet>

    使用 Servlet3.0,还可以通过 @WebServlet 配置初始参数:

    @WebServlet(name = "myServlet", urlPatterns = {"/my"}, 
            initParams = { @WebInitParam(name="user", value="huey")})
    public class MyServlet extends HttpServlet {
        // ...
    }

    getInitParameter、getInitParameterNames 等方法可以获取初始参数:

    ServletConfig servletConfig = this.getServletConfig();
    Enumeration<String> initParamNames = servletConfig.getInitParameterNames();
    while (initParamNames.hasMoreElements()) {
        String paramName = (String) initParamNames.nextElement();
        resp.getWriter().println(paramName + ": " + servletConfig.getInitParameter(paramName));
    }

    ServletContext

    ServletContent 表示的是 servlet 应用,每个 web 应用都只有一个上下文。在分布式环境,一个应用部署在多个容器中,则每个 JVM 有一个 ServletContext 对象。可以通过 servletConfig.getServletContext() 方法获取 ServletContext 对象。下面是 ServletContext 类常用的方法:

    getInitParameter: 获取应用的初始参数。初始参数在 web.xml 中 <context-param> 元素指定。类似的方法还有 getInitParameterNames。

    getAttribute: 获取应用的属性, 类似的方法还有 getAttributeNames。

    setAttribute: 设置应用的属性。

    removeAttribute: 删除应用的属性。

    getContextPath: 返回 Web 应用程序的上下文路径。

    getRealPath(String path): 为给定的虚拟路径返回服务器文件系统上的绝对文件路径。

    getResource(String path): 返回指向映射到指定路径的资源的 URL。该路径必须以 "/" 开头,并相对于当前上下文根进行解释。

    getResourceAsStream(String path): 类似 getResource,返回的是 InputStream 对象。

  • 相关阅读:
    HDU1272---(并查集)简单应用
    HDU1232 畅通工程---(经典并查集应用)
    HDU 1877 又一版 A+B(进制转换)
    L1-020. 帅到没朋友
    L2-001. 紧急救援---(Dijkstra,记录路径)
    JVM Class字节码之三-使用BCEL改变类属性
    JVM Class详解之一
    Jvm原理剖析与调优之内存结构
    虚拟化的发展历程和实现原理——图文详解
    JVM学习笔记(四)------内存调优
  • 原文地址:https://www.cnblogs.com/huey/p/5445892.html
Copyright © 2020-2023  润新知