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

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

java學習筆記—Servlet配置和線程安全性(12)

2019-11-14 23:24:35
字體:
來源:轉載
供稿:網友
java學習筆記—Servlet配置和線程安全性(12)

問題1:

用戶是否可以即使用get又使用post發送請求?

對于開發人員而言不知道用戶到底要使用什么請求方式,因此需要將doGet或doPost都要重寫。但是響應的數據時一樣,因此可以在實現一個方法的基礎上在另一個方法中直接調用即可。

public class Template extends HttpServlet {    public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {        // 處理用戶的請求    }    public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {        doGet(request, response);    }}

問題2:如何修改IDE中創建servlet和jsp等資源的模板

查找IDE安裝的目錄的Genuitec/Common/plugins中的以下jar包com.genuitec.eclipse.wizards_7.0.0.zmyeclipse70020081206.jarServlet.java修改文件即可。
Servlet配置

編寫好的Servlet如果需要進行使用瀏覽器訪問,那么需要對其進行基本的配置。web.xml

1 一對一配置(基本配置)

<servlet>        ? 配置一個servlet     <servlet-name>helloservlet</servlet-name> ? 指定servlet的名字(任意)     ? 指定servlet具體的類的全限定名(包名.類名)     <servlet-class>cn.itcast.servlets.HelloServlet</servlet-class></servlet><servlet-mapping>        ? 映射一個servlet     <servlet-name>helloservlet</servlet-name> ? 需要映射的servlet名     <url-pattern>/helloservlet</url-pattern>     ? 瀏覽器需要訪問的路徑</servlet-mapping>

2 一對多配置(基本配置)

  <servlet-mapping>     <servlet-name>Mapping1</servlet-name>    <url-pattern>/map1</url-pattern>    <url-pattern>/map2</url-pattern>  </servlet-mapping>

3 使用*進行映射

DTD * 0到多個 Xpath //* 表示所有元素

在servlet中*匹配的任意個字符

 <servlet-mapping>    <servlet-name>Mapping2</servlet-name>    <url-pattern>/*</url-pattern>  </servlet-mapping>

原則”如果多個servlet都匹配用戶的請求資源,那么tomcat服務器會找最像的那個進行響應!”

4 *.do映射

<servlet-mapping>    <servlet-name>Mapping2</servlet-name>    <url-pattern>*.do</url-pattern></servlet-mapping>

如果要映射為*.do那么就不要以/開頭,而且*.do的優先級最低。

思考:如果以后上網的時候看到用戶的請求資源是.html結尾,那么是否就是靜態頁面?

因為servlet可以映射為任何的路徑,那么因此你看到的訪問路徑有可能是假的。

5 默認映射

對于用戶而言很有可能訪問一些網站中不存在的資源,那么如果直接使用服務器中默認的servlet進行處理,那么錯誤對于用戶是不友好的,所有任何一個開發好的網站,應該都具備處理用戶錯誤請求的默認的servlet。

<servlet-mapping>    <servlet-name>MyDefault</servlet-name>    <url-pattern>/</url-pattern></servlet-mapping>

6 自啟動servlet

一個網站在別人訪問之前應該提前將網站的數據建立好。

<servlet>    <servlet-name>AutoStart</servlet-name>    <servlet-class>cn.itcast.servlets.AutoStart</servlet-class>    <load-on-startup>1</load-on-startup>  </servlet>

load-on-startup的值必須是一個正整數,值越小那么越先啟動。通常在實際的開發中我們將數據庫的創建、 表的創建以及數據的添加寫在一個自啟動的servlet中,進而提高用戶的體驗。

Servlet線程安全性

問題:使用以下的代碼演示servlet的線程安全問題?

public class MultiThreadQuestion extends HttpServlet {    public int count = 0;    public void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        // 1. 驗證服務器是以線程的方式處理用戶請求的        try {            this.count++;            Thread.sleep(5 * 1000);        } catch (InterruptedException e) {            e.PRintStackTrace();        }        response.getOutputStream().write(("線程名:"+Thread.currentThread().getName()+"count="+this.count).getBytes());    }}

同時訪問以上的代碼發現三次同時出現3,這就是線程的并發訪問的問題。

解決方案就是:同步

給訪問共享資源的代碼加鎖。

public class MultiThreadQuestion extends HttpServlet {    public int count = 0;    public void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        // 1. 驗證服務器是以線程的方式處理用戶請求的        synchronized (this) {            try {                this.count++;                Thread.sleep(5 * 1000);            } catch (InterruptedException e) {                e.printStackTrace();            }            response.getOutputStream().write(("線程名:"+Thread.currentThread().getName()+"count="+this.count).getBytes());        }    }}

總結:

  1. 如果直接使用同步關鍵字,那么會導致servlet的運行效率嚴重的降低。
  2. 盡量避免使用servlet的成員變量。
  3. 如果避免不了那么我們就需要使用線程安全的成員變量。

ArrayList Vector HashSet

如果需要不是線程安全的集合可以使用Collections進行線程安全的轉換

  1. ServletContext、Httpsession需要使用的時候一定要使用同步。
  2. 在servlet中最好使用局部變量。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 阜平县| 吉林省| 蓬莱市| 双柏县| 汕头市| 泸西县| 雷波县| 太原市| 额尔古纳市| 伊宁市| 锡林郭勒盟| 内黄县| 扶绥县| 克山县| 巴南区| 来宾市| 全椒县| 罗城| 同心县| 兖州市| 霸州市| 璧山县| 青川县| 博罗县| 沙河市| 西青区| 镇宁| 楚雄市| 上虞市| 旅游| 长武县| 城口县| 江华| 施秉县| 江阴市| 汶川县| 安塞县| 来宾市| 长宁区| 兰溪市| 施秉县|