国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - JavaWeb入門:ServletContext詳解和應用

JavaWeb入門:ServletContext詳解和應用

2021-10-14 11:46寧在春 Java教程

這篇文章主要介紹了Java ServletContext對象用法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

當Servlet 容器啟動的時候 會為每個web應用創建一個ServletContext 對象代表當前的web應用。

在web.xml 文件中不止可以配置Servlet的初始化信息 還可以給整個web應用配置初始化信息。

1、獲取web 程序啟動時初始化參數

web.xml 設置需要初始化的參數

?
1
2
3
4
5
6
7
8
9
<!--1、獲取web應用程序初始化參數-->
<context-param>
    <param-name>name</param-name>
    <param-value>crush</param-value>
</context-param>
<context-param>
    <param-name>school</param-name>
    <param-value>hngy</param-value>
</context-param>

寫一個Servlet繼承HttpServlet

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/**
 * @Author: crush
 * @Date: 2021-05-09 16:32
 * version 1.0
 */
@WebServlet("/servlet")
public class ServletContextTest extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //設置響應頭
        resp.setContentType("text/html;charset=utf-8");
        PrintWriter writer = resp.getWriter();
        ServletContext servletContext = this.getServletContext();
        // 根據名稱 獲取單個初始化參數
        String parameter = servletContext.getInitParameter("name");
        writer.print(parameter);
        writer.print("<br><hr>");
        // 獲取全部初始化參數
        Enumeration<String> initParameterNames = servletContext.getInitParameterNames();
        while (initParameterNames.hasMoreElements()){
            String name = initParameterNames.nextElement();
            String value = servletContext.getInitParameter(name);
            writer.print(name+":"+value);
            writer.print("<hr>");
        }
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

@WebServlet("/servlet6") 作用等于

?
1
2
3
4
5
6
7
8
<servlet>
    <servlet-name>/servlet1</servlet-name>
    <servlet-class>com.crush.servlet.ServletContextTest</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>/servlet1</servlet-name>
    <url-pattern>/servlet1</url-pattern>
</servlet-mapping>

2、實現多個Servlet 對象共享數據

一個web 應用中所有Servlet都共享ServletContext對象。在一定時候,ServletContext 也可以拿來傳遞信息

或者全局都需要的對象或者數據可以放進ServletContext中。

ServletContext接口的方法:這里講解增加、獲取、刪除、設置ServletContext 域屬性四個方法。

方法 描述
Enumeration getAttributeNames(); 返回一個Enumeration其中包含該ServletContext中所有的屬性名稱
Object getAttribute(String name); 返回具有給定名稱的servlet容器屬性;
void removeAttribute(String name); 從此ServletContext中刪除具有給定名稱的屬性。
setAttribute(String name,Object obj) 在此ServletContext中將對象綁定到給定的屬性名稱。
如果指定的名稱已經用于屬性,則此方法將使用新的屬性替換該屬性。
如果在ServletContext上配置了偵聽器,則容器會相應地通知它們。

設置值: ServletContextTest1

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/**
 * @Author: crush
 * @Date: 2021-05-09 16:59
 * version 1.0
 */
@WebServlet("/servlet1")
public class ServletContextTest1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 獲取ServletContext對象
        ServletContext servletContext = this.getServletContext();
        //設置值  ServletContext 域屬性 name 域屬性名 obj是值
        // 往ServletContext 中放進 username=crush 這個鍵值對
        servletContext.setAttribute("username","crush");
        // 在控制臺給出提示
        System.out.println("值已經設置完成");
        // 重定向
//        resp.sendRedirect("/servlet2");
        // 轉發
        req.getRequestDispatcher("servlet2").forward(req, resp);
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

取出值 :ServletContextTest2

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/**
 * @Author: crush
 * @Date: 2021-05-09 16:59
 * version 1.0
 */
@WebServlet("/servlet2")
public class ServletContextTest2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 獲取ServletContext對象
        ServletContext servletContext = this.getServletContext();
 
        // 通過之前的設置的名字 取出username 的值
        String username =(String) servletContext.getAttribute("username");
        PrintWriter writer = resp.getWriter();
        writer.print(username);
        //返回一個Enumeration其中包含該ServletContext中可用的屬性名稱
        // Enumeration<String> attributeNames = servletContext.getAttributeNames();
        //從此ServletContext中刪除具有給定名稱的屬性。
//        servletContext.removeAttribute("");
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

測試:

先訪問 /servlet1 存值進去

再訪問 /servlet2 取值出來

3、讀取web應用下的資源

使用ServletContext 可以讀取web應用下的資源

常用方法

方法 描述
String getRealPath(String path); 獲取與給定虛擬路徑相對應的真實路徑。
InputStream getResourceAsStream(String path); 返回位于指定路徑處的資源作為InputStream對象。
URL getResource(String path) 返回映射到給定路徑的資源的URL。

mysql.properties

?
1
2
3
4
user=root
password=123456
url=jdbc:mysql://localhost:3306/mysql
drive=com

讀取資源文件

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/**
 * 讀取資源內容
 * @Author: crush
 * @Date: 2021-05-09 16:59
 * version 1.0
 */
@WebServlet("/servlet3")
public class ServletContextTest3 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=utf-8");
        ServletContext servletContext = this.getServletContext();
        // 獲取相對路徑中的輸入流對象  是要獲取web應用程序的路徑
        InputStream inputStream = servletContext.getResourceAsStream("\\WEB-INF\\classes\\mysql.properties");
        // 資源類對象
        Properties properties = new Properties();
        // load 從輸入字節流中讀取屬性列表(鍵和元素對)
        properties.load(inputStream);
        PrintWriter writer = resp.getWriter();
        writer.print("user"+properties.getProperty("user")+"<br>");
        writer.print("password"+properties.getProperty("password")+"<br>");
        writer.print("url"+properties.getProperty("url")+"<br>");
        writer.print("drive"+properties.getProperty("drive")+"<br>");
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

對于mysql. properties 為什么是從WEB-INF/classes/ 目錄下取的解釋

resources和java文件夾下的 在web程序下的路徑都是classes的路徑下的 到之后我們會學到classpath的 一個路徑

會更了解一些。

JavaWeb入門:ServletContext詳解和應用

第二種方式

直接將mysql.properties文件放在WEB-INF/目錄下

JavaWeb入門:ServletContext詳解和應用

這個時候取的路徑就產生了變化了,可以直接那么取到

這個時候我們發現 如果文件是放在WEB-INF 下面 的話 編譯完后 是直接就在WEB-INF 下面 而不是在classes目錄下的。這個內容是maven 里的內容,好奇可以去查一查。

JavaWeb入門:ServletContext詳解和應用

4、請求轉發

ServletContextTest5 轉發到 ServletContextTest 去

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/**
 * 請求轉發
 * @Author: crush
 * @Date: 2021-05-09 16:59
 * version 1.0
 */
@WebServlet("/servlet5")
public class ServletContextTest5 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=utf-8");
        ServletContext servletContext = this.getServletContext();
        // RequestDispatcher對象可用于將請求轉發到資源或將資源包括在響應中。 資源可以是動態的也可以是靜態的。
        //路徑名必須以/開頭,并被解釋為相對于當前上下文根。 使用getContext獲取外部上下文中資源的RequestDispatcher
        servletContext.getRequestDispatcher("/servlet").forward(req,resp);
        //forward:將請求從servlet轉發到服務器上的另一個資源(servlet,JSP文件或HTML文件)
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

亂碼解決

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/**
 * 亂碼問題
 * @Author: crush
 * @Date: 2021-05-09 16:59
 * version 1.0
 */
@WebServlet("/servlet6")
public class ServletContextTest6 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 解決亂碼 只是解決單獨的響應亂碼 如果有請求 還要設置請求的編碼
        req.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");
        PrintWriter writer = resp.getWriter();
        writer.print("你好啊,JavaWeb");
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

總結

本篇文章就到這里了,希望能給你帶來幫助,也希望能夠您能夠關注服務器之家的更多內容!

原文鏈接:https://blog.csdn.net/weixin_45821811/article/details/116571600

延伸 · 閱讀

精彩推薦
  • Java教程Java實現搶紅包功能

    Java實現搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程Java BufferWriter寫文件寫不進去或缺失數據的解決

    Java BufferWriter寫文件寫不進去或缺失數據的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數據的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩中求8032021-07-12
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經有好久沒有升過級了。升級完畢重啟之后,突然發現好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下...

    Java教程網2942020-09-17
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發現了對于集合操作轉換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

    阿杜7472021-02-04
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 日韩中文在线视频 | 欧美精品在线一区二区三区 | 精品在线91 | 国产在线观看免费 | 久久精品亚洲精品 | 国产一级片| jizz欧美大片 | 久久久久久久成人 | 欧美日韩美女 | 澳门黄色网| 欧美视频免费 | 国产日韩欧美不卡 | 亚洲国产精品久久人人爱 | 日韩电影中文字幕 | 91免费观看视频 | 国产精品成人国产乱一区 | 在线国产一区 | 五月天一区二区 | 久久久久久久久久久久福利 | 一级毛片免费完整视频 | 我要看黄色一级大片 | 亚洲精品视频在线免费 | 男女全黄一级一级高潮免费看 | 国产精品久久久久久久久图文区 | 欧美成人区 | 日韩精品欧美 | 羞羞的视频在线免费观看 | 久久国产精品一区二区 | 成人免费大片黄在线播放 | 精品久久中文 | 欧美视频成人 | 欧美视频免费在线 | 色婷婷综合久久久中文字幕 | 精品一区二区三区视频 | 欧美精品亚洲精品 | 精品欧美一区二区三区久久久 | 成人免费crm在线观看 | 一级片黄色大片 | 精品一区二区三区中文字幕 | 欧美视频在线免费 | 亚洲免费在线视频 |