servlet映射,線程安全,servletconfig對象,servletcontext對象

Servlet映射細節:
映射代碼體現:
<servlet>
    <servlet-name>TextServlet1</servlet-name>
    <servlet-class>text.Servlet.TextServlet1</servlet-class>
 </servlet>java

 <servlet-mapping>
    <servlet-name>TextServlet1</servlet-name>
    <url-pattern>/servlet/TextServlet1</url-pattern>
 </servlet-mapping> web

映射能夠使用通配符:
1 以*開頭,以擴展名結尾:*.do
2 以/開頭,/adc/*  安全

匹配優先級:絕對優先級》/》*app


servlet中的線程安全問題:
當存在全局變量時,就會出現線程安全問題,
若是要使用全局變量,就要使用同步,代碼運行的效率低下。url

ServletConfig 對象用於獲取配置參數:spa

配置參數代碼:
<servlet>
    <servlet-name>TextServlet1</servlet-name>
    <servlet-class>text.Servlet.TextServlet1</servlet-class>
    <init-param>
    <param-value>encoding</param-value>
    <param-value>UTF-8</param-value>
    </init-param>線程

 </servlet>指針

    在web.xml中的類的類的配置標籤內配置屬於該類的參數xml

 用servletconfig對象獲取其中一個參數:
 經過參數名獲取參數值:
 ServletConfig sc=getServletConfig();
 String str=sc.getInitParameter("encoding");
 response.getWriter().write(str);對象

獲取全部的參數:
Enumeration<String> e=sc.getInitParameterNames();

輸出全部的參數以及其值:
ServletConfig sc=getServletConfig();
 Enumeration<String> e=sc.getInitParameterNames();
 while(e.hasMoreElements()){
  String s=e.nextElement();
  response.getWriter().write(s+"="+sc.getInitParameter(s)+"<br/>");
}


ServletContext 表明的是整個應用,每一個應用有一個context的實例:

1使用servletContext的對象實現servlet之間的數據共享:
設置數據:
servlet1:
ServletContext sc=getServletContext();
sc.setAttribute("encoding", "UTF-8");

獲取數據:
servlet2:
ServletContext sc=getServletContext();
String str=(String)sc.getAttribute("encoding");
response.getWriter().write(str);

要先訪問servlet1,再訪問servlet2,不然會報空指針異常

2用servletcontext獲取全局參數:
設置全局變量:
<context-param>
 <param-name>hehe</param-name>
 <param-value>xixi</param-value>
 </context-param>
獲取全局變量和servletconfig相同,使用servletcontext對象便可


3轉發:
ServletContext sc=getServletContext();
RequestDispatcher rd=sc.getRequestDispatcher("/servlet/TextServlet2");
rd.forward(request, response);

4獲取真實路徑
String str=getServletContext().getRealPath("/text.jpg");
/表明的是本應用

講獲取到的圖片輸出:
String str=getServletContext().getRealPath("/text.jpg");
InputStream in=new FileInputStream(str);
OutputStream os=response.getOutputStream();
int len=-1;
byte []byt=new byte[1024];
while((len=in.read(byt))!=-1){
 os.write(byt, 0, len);
}
in.close();
os.close();

5讀取資源文件的三種方式:
1 用絕對路徑獲取:
方法就是4.

2 用properties對象獲取鍵值對的值

先建立properties類型的文件
String str=getServletContext().getRealPath("/cfg.properties");
InputStream in=new FileInputStream(str);
java.util.Properties pro=new java.util.Properties();
pro.load(in);
System.out.println(pro.getProperty("name3"));

這裏要注意的是  Properties 是java.util裏的pro類,不然調用不到方法

3 類加載器:ClassLoader cl=TextServlet1.class.getClassLoader();InputStream in=cl.getResourceAsStream("cfg.properties");java.util.Properties pro=new java.util.Properties();pro.load(in);System.out.println(pro.getProperty("name2"));

相關文章
相關標籤/搜索