国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

【Servlet】03-Web容器模型

2019-11-08 01:50:21
字體:
來源:轉載
供稿:網友

在Servlet技術模型中,我們了解到了Web應用中,Servlet的基礎職能,和使用Servlet的一些注意事項。但是,這一切,都需要Web容器進行管理,Web容器在Servlet編程中起到如下作用:

通過部署文件,初始化Servlet和ServletContext控制Servlet的作用域,對Servlet屬性進行增刪查改描述Web容器請求處理模型元素:過濾器、過濾器鏈、請求/響應的包裝監聽Web事件(監聽器的使用)描述RequestDispatcher,用Servlet轉發、包含目標資源

我們先來講講容器部署應用時,對Servlet怎么做初始化的: DD(Deployment Descriptor)文件中

<servlet> <init-param> <param-name>paramName</param-name> <param-value>paramValue</param-value> <init-param></servlet>

java文件中

// 在一個Servlet中getServletConfig().getInitParameter("paramName");

如果我們有如下需求:在整個項目中獲取某一個屬性,那么,我們是這樣初始化的: DD文件中:

<context-param> <param-name>paramName</param-name> <param-value>paramValue</param-value></context-param>

Java文件中:

getServletContext().getInitParameter("paramName");

如果,我們需要在Web項目啟動時,構造一些對象,那么,監聽器就粉墨登場。

要使用監聽器,我們需要做如下幾件事: 1. 實現一個監聽器接口 2. 覆蓋接口里的方法 3. 配置DD文件或者注解

我們監聽器的Java文件如下:

@WebListenerclass SomeListener implements ServletContextListener{ public void contextInitialzed(ServletContextEvent sce){ // 獲取Context的引用 ServletContext context = sce.getServletContext(); }}

我們的DD文件(沒有使用@WebListener的時候有用):

<listener> <listener-class></listener-class></listener>

我們還有更多的Listener可以選擇:

作用
ServletContextAttributeListener 監聽Web應用的屬性
HttpsessionListener 監聽Web中的Session
HttpSessionBindingListener 監聽對象綁定到會話
HttpSessionActivationListener 對Session遷移事件監聽
ServletRequestListener 監聽Web中的請求

對于屬性而言,我們還需要知道屬性的作用域,我們需要知道的作用域有:

上下文(Context)請求(Request)會話(HtttpSession)

我們有一個參照表,用來描述各種作用域:

名稱 意義 作用域
PageContext 頁面上下文,可以獲取所有頁面對象 頁面
HttpServletRequest 客戶端請求 請求域
HttpServletResponse 服務器響應
ServletContext 表示一個應用程序 整個服務器端

我們需要知道,ServletContext屬性不是線程安全的,因為,它可能被其它用戶更改。

這里有一個對上下文屬性加鎖的示例:

public void doGet(HttpServletRequest request, // 下面的代碼對ServletContext同步HttpServletResponse response){ synchronized(getServletContext()){ getServletContext().setAttribute("attributeName","attributeValue"); }}

同樣,我們的HttpSession屬性也不是線程安全的,對HttpSession進行同步處理,可以避免線程不安全的修改。

對于和線程有關的問題,我們應做到:

聲明局部變量,而不是實例變量在合適的作用域里使用屬性

我們認識了屬性的一些知識后,我們可以把屬性請求/分派出去:

request.setAttribute("beer","BEER");request.getRequestDispatcher("someurl");// 使用如下方法,必須以/打頭getServletContext().getRequestDispatcher("/someurl");
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 南岸区| 吴桥县| 郓城县| 会同县| 海南省| 清原| 合江县| 玛纳斯县| 越西县| 雷山县| 绥德县| 余庆县| 永春县| 金坛市| 额济纳旗| 富蕴县| 成武县| 新蔡县| 探索| 永丰县| 中宁县| 扬中市| 通海县| 余干县| 清水县| 呼玛县| 垦利县| 永春县| 舒兰市| 洪泽县| 天津市| 肃北| 太康县| 敖汉旗| 斗六市| 自贡市| 栾城县| 金平| 黄平县| 伊川县| 伊春市|