java EE開發之Servlet第二課:Servlet的三個hashMap
1,第一個hashMap:如何解決編碼問題 (相當於過濾器)
解決因提交方式不同的引數編碼問題
resp.setContentType("text/html;charset=utf-8");
PrintWriter out=resp.getWriter();
String method=req.getMethod();
if("post".equalsIgnoreCase(method)){
req.setCharacterEncoding("utf-8");
}else if("get".equalsIgnoreCase(method)){
//得到一個引數的hashMap集合(req.getParameterNames())
Map map=req.getParameterMap();
Set setmap=map.keySet();
//再進行迭代
Iterator it=setmap.iterator();
//將迭代迴圈
while(it.hasNext()){
//取得迭代中的鍵
String key=(String)it.next();
//透過鍵取值
String[] values=(String[])map.get(key);
for(int i=0;i<values.length;i++){
//反編碼
byte[] buff=values[i].getBytes("iso8859-1");
//編碼後轉碼
values[i]=new String(buff,"GBk");
}
}
String name=req.getParameter("uname");
out.println("歡迎您:"+name);
2,第二個hashMap:透過request得到請求頭的方法
/*得到Request的一些常用請求頭的方法 resp.setContentType("application/vnd.ms-excel;charset=utf-8");
application/vnd.ms-excel是excel表單的方式開啟,還可以設定為其他客戶端瀏覽器所支援的格式
*/
resp.setContentType("text/html;charset=GBK"); req.setCharacterEncoding("GBK");
PrintWriter out=resp.getWriter();
//只有HttpServletRequest在可以得到頭資訊 HttpServletRequest request=(HttpServletRequest)req;
//得到請求頭的一個列舉
Enumeration enums=request.getHeaderNames();
//以表格的方式列印出來
out.print("<table border='1'>");
//是否有更多的元素
while(enums.hasMoreElements()){
out.print("<tr>");
//從列舉中取得鍵
String key=(String)enums.nextElement();
//透過鍵取值
String value=request.getHeader(key);
out.print("<td>"+value+"</td>");
}
out.print("</table>");
3,第三個hashMap:透過request得到所有屬性的方法
PrintWriter out=resp.getWriter();
//將請求轉為 Http的請求
HttpServletRequest request=(HttpServletRequest)req;
//得到Request中所有的屬性 返回一個列舉型別
Enumeration enums=request.getAttributeNames();
//看列舉中是否有元素
while(enums.hasMoreElements()){
//從列舉中把鍵取出來
String key=(String)enums.nextElement();
//透過鍵取的值
Object value=request.getAttribute(key);
out.print(key+":"+value+"<br>");
}
注意:會有
tomcat已經設好的三個值
javax.servlet.forward.request_uri /WebTest/page1.jsp
javax.servlet.forward.context_path /WebTest
javax.servlet.forward.servlet_path /page1.jsp
4,得到session,application
HttpServletRequest request = (HttpServletRequest)req;
String n1 = (String)request.getAttribute("name");
System.out.println("request:"+n1);
//得到session
HttpSession session = request.getSession();
String n2 = (String)session.getAttribute("name");
System.out.println("session:"+n2);
//得到application
//ServletContext application = session.getServletContext();
//用此方法只有再繼承了httpservlet類或 GenericServlet類才有
//ServletContext application = this.getServletContext();
//此方法適應於現實了servlet介面的servlet類
ServletContext application=
this.getServletConfig().getServletContext();
String n3 = (String)application.getAttribute("name");
System.out.println("application:"+n3);
5,ServletConfig和ServletContext的區別
ServletConfig記錄著單個服務員的資訊,比如說年齡,性別等
ServletConfig只能獲得自己的servlet資訊配置資訊
比如:以前獲取編碼引數的問題等
web.xml中
<servlet>
<servlet-name>hello7</servlet-name>
<servlet-class>com.accp.servlet.Hello7
</servlet-class>
<init-param>
<param-name>encoding</param-name>
<param-value>
text/html;charset=GB18030
</param-value>
</init-param>
<init-param>
<param-name>sex</param-name>
<param-value>男</param-value>
</init-param>
<init-param>
<param-name>age</param-name>
<param-value>女</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>hello7</servlet-name>
<url-pattern>/hello7</url-pattern>
</servlet-mapping>
Service()方法中
//ServletConfig使用,拿到Hello7這個servlet單獨的資訊
//獲取到該servlet所有引數名
Enumeration configs = this.getServletConfig().getInitParameterNames();
while(configs.hasMoreElements()){
String key=(String)configs.nextElement();
//根據引數名拿引數值
String value = this.getServletConfig().getInitParameter(key);
System.out.println(key+"--"+value);
}
但是我們發現以前每個
servlet都要有編碼問題的設定,那我們能不能配置一個公有的,讓每一個Servlet都享有,其實可以配置一個公有資訊
問題是在
servlet中怎麼獲取這些公共的資訊?
web.xml中透過下面的配置公共資訊
<context-param>
<param-name>encoding</param-name>
<param-value>text/html;charset=GB18030</param-value>
</context-param>
ServletContext記錄著整個這個門店的資訊,也就是服務員工作壞境的資訊。比如牆壁是刷成什麼顏 色等,ServletContext儲存著整個公共的配置資訊
//ServletContext使用,拿到整個公共的配置資訊
Enumeration contexts =this.getServletContext().getInitParameterNames();
while(contexts.hasMoreElements()){
String key=(String)contexts.nextElement();
String value = this.getServletContext().getInitParameter(key);
System.out.println(key+"--"+value);
}
總結:
ServletConfig :記錄著單個servlet的資訊(單個服務員資訊:年齡 , 三圍等)
ServletContext:記錄著所有servlet共享的資訊(服務員上班的環境:牆壁顏色,裝置的型號等)
6,利用ServletContext,讀取WEB-INF目錄下的客戶端不可讀檔案
web-inf下面的檔案是不能被客戶端所訪問到的,其中web.xml主要描述的就是整個工程的配置
但是實際開發的過程中,就是希望客戶不能直接訪問我們的資源。但是在
servlet中又想獲取這些資源,那麼就可以透過ServletContext物件來獲取:
resp.setContentType("text/html;charset=GBk");
PrintWriter out=resp.getWriter();
ServletContext sct=this.getServletContext();
//獲取到檔案資源,並將它轉為檔案流(相對路徑)
InputStream in=sct.getResourceAsStream("/WEB-INF/abc.html");
Reader read=new InputStreamReader(in);//轉為字元流
BufferedReader reader=new BufferedReader(read);//改為包裝流
String str=reader.readLine();//讀取
while(str!=null){
out.print(str);//列印
str=reader.readLine();
}
reader.close();
read.close();
in.close();
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69940641/viewspace-2908215/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- java EE開發之Servlet第一課:servlet的建立方式JavaServlet
- java EE開發之Servlet第五課:xml解析JavaServletXML
- java EE開發之Servlet第十一課:反射基礎三JavaServlet反射
- java EE開發之Servlet第八課:MVC模式 (基本理解)JavaServletMVC模式
- java EE開發之Servlet第四課:監聽器(Listener)JavaServlet
- [摘]Java EE Servlet監聽器JavaServlet
- Java之ServletJavaServlet
- web開發1——servletWebServlet
- JAVA網路程式設計基本功之Servlet與Servlet容器Java程式設計Servlet
- Servlet開發技術,建立,以及Servlet的配置,web.xml的配置ServletWebXML
- Servlet第二篇【Servlet呼叫圖、Servlet細節、ServletConfig、ServletContext】ServletContext
- 後端開發:【JavaWeb開發之Servlet的兩種配置方式】後端JavaWebServlet
- java web開發--Servlet學習之HelloWorld 從部署到開發全過程JavaWebServlet
- Servlet開發-day05Servlet
- 第2,8章 servlet 開發技術(12課時)Servlet
- JavaWeb開發Servlet之getParameter和getAttribute的區別,JavaWebServlet
- WEB應用開發中的ServletWebServlet
- java基礎學習:JavaWeb之ServletJavaWebServlet
- 【Java基礎】ServletJavaServlet
- Java Servlet完全教程JavaServlet
- JavaWeb三大元件之Servlet詳解JavaWeb元件Servlet
- JavaWeb開發基礎Servlet APIJavaWebServletAPI
- Java Web之Servlet獲取表單值JavaWebServlet
- Servlet技術---Servlet深化Servlet
- java servlet 生命週期JavaServlet
- Java中Servlet技術JavaServlet
- java Servlet結構概述JavaServlet
- Servlet 3.0 之 FilteringServletFilter
- 初學 Java Web 開發,請遠離各種框架,從 Servlet 開發JavaWeb框架Servlet
- Java後臺開發必備技能JDBC+Servlet+JSPJavaJDBCServletJS
- Servlet系列:(一)servlet原理剖析Servlet
- Servlet技術----Servlet入門Servlet
- Java之JSP和Servlet基礎知識。JavaJSServlet
- Java Web之Struts2訪問Servlet APIJavaWebServletAPI
- 新浪sae 上傳java war包出現not a javax.servlet.ServletJavaServlet
- 基於jsp和servlet簡單的java web開發(idea)JSServletJavaWebIdea
- 用Servlet開發企業級三層Web應用(一) (轉)ServletWeb
- java之使用Servlet生成驗證碼的原始碼分享JavaServlet原始碼