Servlet--ServletConfig與ServletContext應用

1.Servlet類配置初始化參數------ServletConfig

      (1)在配置文件中設置:

               在web.xml中設置

<init-param>

                 <param-name>corporation</param-name>

                <param-value>csdn</param-value>

          </init-param>

(2)在servlet類中獲取配置文件中的值的讀取

      第一種:   

ServletConfig sc = this.getServletConfig();

          String name = sc.getInitParameter("corporation");

          String str = sc.getServletName();

   第二種:

          String name = this.getInitParameter("corporation");

          //獲取註冊名字

          String str = this.getServletName();

      

      

注:(1)每一個serlvet都有一個自己的ServletConfig對象,不同的類不能訪問不同的部署文件

    (2)配置文件中的設置可以是隻在一個servlet類中設置,也可以是設置一個,在<web-app></web-app>標籤中設置,可在同一個站點下訪問

             <web-app>

                                  <servlet>servlet名字和servlet類</servlet>

                                  <servlet-mapping>servlet名字和url模式</servlet-mapping>

                                  <context-param>參數名和參數值</context-param>

                           </web-app>

      (3)init()方法和初始化的區別

如果要想讀取servlet.Config中的文件時,必須在初始化的時候用init()方法

如果不用讀取serflet.config中的文件時,可以用構造方法

一般是修改無參的父類,帶參數的一般不修改

2.配置Web應用上下文初始化參數-------servletContext  

(1)在web.xml中設置和獲取

      設置:

<context-param>

          <param-name>encoding</param-name>

           <param-value>utf-8</param-value>

       </context-param>

   獲取:

   String encoding = this.getInitParameter("encoding");

(2)在server中的設置

      <Context path=”/demo docBase=”.\demo”>

             <Parameter name="companyName" value="csdn"/>

      </Context>

      注:一個web應用程序只有一個ServletContext

 

(3)設置屬性名和屬性值

setAttribute()設置屬性名和屬性值

getAttribute()獲取屬性名和屬性值

 

(1)在容器源中設置屬性

ServletContextcontext = this.getServletContext();

          //設置上下文屬性

          context.setAttribute("username", username);

          response.sendRedirect("secuss");

(2)在跳轉的頁面中讀取屬性

//通過獲取上下文對象的ServletContext的對象來輸入輸入正確的合法用戶信息

      ServletContext context = this.getServletContext();

      String name = (String) context.getAttribute("username");

3.ServletConfig和servletContext的區別:

(1)整個Web應用只有一個ServletContext,在部署Web應用的時候,容器會建立這一個ServletContext對象,這個上下文對Web應用中的每個Servlet和JSP都可用。

(2)Web應用中的各個Servlet都有自己的ServletConfig,它只對當前Servlet有效。.

4.Servlet的線程安全問題

•           使用synchronized

–       使用synchronized關鍵字同步操作成員變量和共享數據的代碼,就可以防止可能出現的線程安全問題。

•         儘量少使用成員變量和共享數據

–       ServletContext是可以多線程同時讀/寫成員變量和共享數據的,線程是不安全的。

–       ServletRequest對象在service方法的範圍內是有效的,不要試圖在service方法結束後仍然保存請求對象的引用。

–       Servlet本身就是多線程的,在Servlet中再創建線程,將導致執行情況複雜化,出現多線程安全問題。

5.獲取請求行的相關消息

      getMethod方法返回http請求消息中的請求方式    

      getContextPath方法是返回請求資源所屬於的web的虛擬路徑

 

             //獲取提交的方式

      System.out.println(request.getMethod());

      //獲取服務器的名稱

      System.out.println(request.getServerName());

      //請求的資源的URL

      System.out.println(request.getRequestURI());

      //查詢字符串 get方法在地址欄上輸入的信息

      System.out.println(request.getQueryString());

      //獲取版本

      System.out.println(request.getProtocol());

      //獲取上下文的路徑

      System.out.println(request.getContextPath());

      //獲取

      System.out.println(request.getServletPath());

 

      如果在web.xml中設置的爲*,則輸入的值都可以訪問到

      <servlet-mapping>

           <servlet-name>TestRequest</servlet-name>

           <url-pattern>/servlet/*</url-pattern>

      </servlet-mapping>

訪問方式:http://localhost:8080/demoWeb/servlet/sshdkf

5.獲取網絡連接信息

      getRemoteAddr方法是返回客戶機的IP地址,格式是“192.168.0.3”

      getRemoteHost方法是返回客戶機的主機名

      System.out.println(request.getRemoteAddr());

      System.out.println(request.getRemoteHost());

      System.out.println(request.getRemotePort());

      //獲取本機的IP地址

      System.out.println(request.getLocalAddr());

      //獲取本機的名稱

      System.out.println(request.getLocalName());.

6.獲取請求頭

      //獲取所有請求頭的字段的名稱

       Enumeration enName = request.getHeaderNames();

      //判斷如果有更多的元素

       while(enName.hasMoreElements()){

          String headerName = (String) enName.nextElement();

   System.out.println(headerName+":"+request.getHeader(headerName));

     }

   

s

發佈了10 篇原創文章 · 獲贊 4 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章