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