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"));