• Servlet的基本使用2


    1、ServletContext基本介绍(系统上下文)

    ServletContext,即 servlet 上下文。服务器会为每一个工程创建一个对象,这个对象就是 ServletContext 对象,一个web应用对应一个ServletContext。一个Web服务器可以运行一个或多个WebApp,对于每个WebApp,Web服务器都会为其创建一个全局唯一的ServletContext实例。这个对象全局唯一,而且工程内部的所有servlet都共享这个对象,所以叫全局应用程序共享对象。

    1.1、servletContext的作用

    servletContext 是一个域对象,它代表整个web应用,可以和程序的容器即服务器进行通信。ServletContext实例最大的作用就是设置和共享全局信息。servletContext 可以用于在不同动态资源(servlet)之间传递与共享数据,servletContext 可以共享所有用户所有请求的数据。该域对象在服务器启动时即创建,在服务器关闭时才销毁。

    1. 获取文件的 MIME 类型
    2. 域对象:共享数据
    3. 获取文件在服务器文件系统上的绝对文件路径
    4. 可以读取全局配置参数
    5. 可以搜索当前工程目录下面的资源文件
    6. 可以获取当前工程名字

    凡是域对象都有如下3个方法:

    2、servletContext的基本使用

    获取 servletContext 对象:

    publicvoid doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //通过reque对象可以获取
            request.getServletContext();
    
            //直接通过 HttpServlet 获取也行。跟上面获取到的是同一个对象
            //this.getServletContext();
    }

    2.1、获取文件的 MIME 类型(getMimeType())

    servletContextObj.getMimeType(str) 方法返回文件的MIME类型。

    publicvoid doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            ServletContext context =  this.getServletContext();
        
            //文件名称
            String fileName = "a.jpg";
            //获取MIME类型
            String mimeType = context.getMimeType(fileName);
    }

    MIME 类型是根据文件的后缀名来进行判断的,而且不同文件后缀名对应的 MIME 类型是在服务器内已经配置好的,比如我们可以在 tomcat 的安装目录下的 conf/web.xml 文件下看到配置信息,类似:

    2.2、共享数据

    servletContext 可以在整个服务器内共享数据,并且就算是不同用户的数据也能够共享。

    存数据:

     publicvoid doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
             //往serlvetContext里面存数据
             getServletContext().setAttribute("username", "admin");
    }

    在另一个servlet里可以获取数据,就算下面的 servlet 是另一用户访问的也可以获取到数据,因为 servletContext 的对象范围是所有用户所有请求的数据。

    publicvoid doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
             //获取ServletContext里面的用户名数据
             String username = getServletContext().getAttribute("username");
    }

    2.3、获取文件在服务器文件系统上的绝对文件路径(getRealPath())

    通过 servletContextObj.getRealPath(fileName) 可以虎获取文件在服务器文件系统上的绝对文件路径 。

    比如说应用中有个JSP页面 index.jsp,调用 getRealPath("index.jsp"),则返回index.jsp文件在服务器文件系统中的绝对路径。在windows下或许是这样:D:xxxxxxindex.jsp,在linux下或许是这样:/root/xxx/index.jsp。

    运行结果:

    比如:

    getRealPath("/a.txt") 方法返回的是在 webcontent 目录下的文件在服务器的绝对路径;

    getRealPath("/WEB-INF/a.txt") 方法返回的是在 webcontent/WEB-INF 目录下的文件在服务器的绝对路径;

    getRealPath("/WEB-INF/classes/a.txt") 方法返回的是在 src 目录下的文件在服务器的绝对路径,因为在 src 下的文件经编译过后都将存放在项目根目录下的 WEB-INF/classes 文件夹下。

  • 相关阅读:
    【血型】+【星座】准到吓人
    一落叶而知秋为什么有些树到冬天要落叶?
    WebDAV介绍
    Ruby concurrency explained
    lexus.cnblogs.com
    微博拉近了大家的距离
    High Performance Ruby Part 3: nonblocking IO and web application scalability
    Taglib确实减轻了开发负担[转]
    php中urldecode()和urlencode()起什么作用啊
    header中ContentDisposition的作用
  • 原文地址:https://www.cnblogs.com/wenxuehai/p/14659417.html
Copyright © 2020-2023  润新知