1. 程式人生 > 實用技巧 >Servlet 03 ----【javaweb-06】

Servlet 03 ----【javaweb-06】

SERVLET

ServletContext

  web容器在啟動的時候,它會為每個web程式都建立一個對應的ServletContext物件,它代表了當前的web應用。

接下來,讓我們來看看ServletContext物件有什麼用處吧。

1. 資料傳輸

  我們可以在儲存一個類中的servlet的同時,在另一個類獲取該servlet資料。

程式碼展示:

類1:

package com.charels.servlet;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class HelloServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
     //this.getServletContext() Servlet上下文 ServletContext context
= this.getServletContext(); String name = "小明"; context.setAttribute("name",name); } }

類2.

package com.charels.servlet;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class GetServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { ServletContext context = this.getServletContext(); String name = (String)context.getAttribute("name"); resp.setContentType("text/html"); resp.setCharacterEncoding("GBK"); resp.getWriter().print("名字"+name); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req,resp); } }

在web.xml註冊,兩個servlet。

  <!--  註冊servlet-->
  <servlet>
    <servlet-name>hello</servlet-name>
    <servlet-class>com.charels.servlet.HelloServlet</servlet-class>
  </servlet>

  <!--  servlet的請求路徑-->
  <servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello</url-pattern>
  </servlet-mapping>

  <servlet>
    <servlet-name>getc</servlet-name>
    <servlet-class>com.charels.servlet.GetServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>getc</servlet-name>
    <url-pattern>/getc</url-pattern>
  </servlet-mapping>

接下來,讓我們康康執行Tomcat後的展示結果:

在這裡要注意,根據程式碼的意思,要獲取上下文資料,則需要先訪問第一個類的servlet,再訪問第二個才能獲取資料。

第一個類的網頁:

第二個類的網頁:

2. 獲取初始化引數

程式碼展示:

首先在web.xml中配置初始化資料:

    <!--配置一些web應用初始化引數-->
    <context-param>
        <param-name>url</param-name>
        <param-value>jdbc:mysql://localhost:3306/mybatis</param-value>
    </context-param>

接下來編寫獲取初始化資料的程式碼:

package com.charels.servlet;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class GetUrl extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext context = this.getServletContext();
        String url = context.getInitParameter("url");

        resp.getWriter().print(url);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

編寫完畢後,註冊servlet,然後執行Tomcat:

3. 請求與轉發

  我們可以通過一個servlet的類來實現頁面的轉發。

程式碼展示:

package com.charels.servlet;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class Dri extends GetUrl{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("進入Dri");

        ServletContext context = this.getServletContext();
        context.getRequestDispatcher("/g1").forward(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

結果展示:

  控制檯:

    

  頁面展示:

    

4. 讀取資原始檔

  首先,在properties的包中建立一個db.properties並編寫資料

  

  在servlet類中編寫讀取資源的程式碼:

package com.charels.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class GetPro extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setCharacterEncoding("gbk");

        InputStream is = this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties");

        Properties pro = new Properties();
        pro.load(is);
        String username = pro.getProperty("username");
        String passsword= pro.getProperty("password");

        resp.getWriter().print(username + ':' + passsword);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

編寫完畢後,執行Tomcat,展示結果: