# 請求行
## 重要方法
* String getMethod():獲取請求的方式.
* String getContextPath():獲取項目動態路徑.
* String getRemoteAddr():獲取請求者的IP.
## 了解的方法
* String getRequestURI():獲取的是請求的資源(不帶get請求的參數).
* Sting getQueryString() :獲取get請求的參數.
* String getProtocol():獲取協議和版本.
## 實例
~~~
System.out.println(request.getMethod().equals("GET"));
System.out.println(request.getContextPath());
System.out.println(request.getRemoteAddr());
System.out.println(request.getRequestURI());
System.out.println(request.getQueryString());
System.out.println(request.getProtocol());
~~~
結果
```
true
/dome
127.0.0.1
/dome/show
name=jack
HTTP/1.1
```
# 請求頭
## 重要方法
* String getHeader(String name) :獲取 一個請求頭.
~~~
System.out.println(request.getHeader("accept"));
~~~
## 了解方法
* int getIntHeader(String name)
* long getDateHeader(String name)
* Enumeration getHeaders(String name)
# 請求體
請求體就是請求的實體參數.key&value形式.
## 獲取請求體的數據(適用get和post)
http://127.0.0.1:8080/dome/show?name=jack&hobby=1&hobby=2
~~~~~~
//獲取單值
String name = request.getParameter("name");
System.out.println(name);
//獲取多值
String[] hobbies = request.getParameterValues("hobby");
System.out.println(Arrays.toString(hobbies));
//獲取所有參數
Map<String, String[]> parameterMap = request.getParameterMap();
for (String key : parameterMap.keySet()) {
System.out.println(Arrays.toString(parameterMap.get(key)));
}
~~~~~~
# 亂碼產生原因
服務器和瀏覽器編碼 /解碼不一致造成的.
* 響應的亂碼:服務器用iso-8859-1方式編碼 ,瀏覽器用UTF-8方式解碼. 解決方式 : response.setContentType("text/html;charset=utf-8");
* 請求的亂碼: 瀏覽器用utf-8編碼,服務器是用iso-8859-1解碼 .
* 針對于下載功能,文件名也會產生亂碼,不同瀏覽器對下載文件的中文名的編碼格式不一致. 解決方式:ie和chrome : URIEncoder.encode("中文名","編碼方式").
# 注意
tomcat8 雖說是用UTF-8編碼,但是只是針對GET請求,POST請求還是ISO-8859-1的編碼.在server.xml設置的字符集也是只能設置GET的編碼方式無法改變POST的. 有個TOMCAT緩沖區的概念,使用request.setCharacterEncoding("utf-8") 就是設置緩沖區的字符集.
# 請求的亂碼解決方式
第一種方式
~~~
tomcat8之前默認的編碼方式都是"iso-8859-1",8和8之后都是utf-8.
//模擬瀏覽器
String name = "杰克";
System.out.println(name);
//編碼
String encode = URLEncoder.encode(name, "utf-8");
System.out.println(encode);
//模擬服務器,解碼
String decode = URLDecoder.decode(encode, "iso-8859-1");
System.out.println(decode);
~~~
第二種方式
~~~
String str = "中國";
byte[] bytes = str.getBytes("iso-8859-1"); //編碼方式
System.out.println(new String(bytes, "utf-8")); //解碼方式
~~~
## 針對post請求
~~~
request.setCharacterEncoding("utf-8");
~~~
# 請求轉發
~~~
request.getRequestDispatcher("/內部路徑(不帶conext的路徑)").forward(request, response);
~~~
## 重定向和請求轉發區別
1. 重定向發送兩次請求,請求轉發發送一次請求.
2. 重定向地址欄變化請求轉發地址欄不變.
3. 重定向是響應發起的,請求轉發是請求發起.
4. 重定向路徑不帶協議和主機的絕對路徑,請求抓發是內部路徑.
5. 重定向不能使用request的屬性操作,請求轉發可以使用request屬性操作.
# request域對象
request域只能在一個訪問內有效.重定向不能使用request域,請求轉發可以.
創建:請求的時候.
銷毀:生成響應的時候.
## 方法
* request.setAttribute(name,value).
* request.getAttribute(name).
* request.removeAttribute(name).
- 環境
- Java基礎
- 數據類型
- 基本類型
- 引用類型
- Array
- Class
- ArrayList
- 流程控制
- ASCII碼表
- 面向對象
- 概述
- 變量
- this
- 修飾符
- 封裝
- 繼承
- final
- static
- 接口
- 接口
- 抽象類
- overload
- 接口和抽象類區別
- 案例
- 多態
- 構造方法
- super
- 匿名對象
- 內部類
- 靜態導入
- 包的聲明和訪問
- 代碼塊
- 代理設計模式
- 靜態代碼塊
- Object類
- lambda表達式
- 枚舉
- 定義枚舉
- 常用方法
- 枚舉常量
- 異常
- 可變參數
- Properties
- 概述
- Properties和持久化有關的方法
- 反射
- 類加載器
- 概述
- Class類
- 獲取構造方法并運行
- 獲取成員變量并改值
- 獲取成員方法并運行
- 反射泛型擦除
- 反射通過配置文件運行
- 常用 API
- Date類
- DateFormat類
- Calendar類
- Math類
- String類
- object類
- System類
- 正則表達式
- BigInteger類
- BigDecimal類
- Arrays工具類
- StringBuffer類
- 基本類型包裝類
- 自動裝箱和自動拆箱
- 框架集合
- collection接口
- 概述
- 接口方法
- 迭代器
- 迭代器并發異常
- 增強for循環
- 泛型
- hashCode和equals
- List接口
- 概述
- ArrayList
- LinkedList
- vector
- Set接口
- 概述
- 對象的哈希值
- HashSet
- LinkedHashSet
- 保證自定義元素的唯一性(重寫)
- ArrayList和HashSet的contains原理
- Map接口
- 概述
- Map集合常用方法
- 迭代Map
- Map存儲自定義類型
- HashMap
- LinkedHashMap
- Hashtable
- 嵌套Map遍歷
- 方法的可變參數
- collections工具類
- 集合嵌套
- 集合特點總結
- Collection集合工具類
- Arrays工具類
- File類
- 概述
- 獲取方法
- 創建和刪除
- 判斷方法
- 其他方法
- 文件過濾器
- IO流
- 字節流
- 概述
- 字節流
- 字節流復制文件
- 字節緩沖流
- 復制單級文件夾
- 使用字節流讀取中文的亂碼問題
- 字符編碼表
- 方便程序員的IO流
- 轉換流
- 概述
- OutputStreamWriter類
- InputStreamWriter類
- 轉換流和其他子類的區別
- 序列化流
- 概述
- 序列化接口以及版本號問題
- transient
- 打印流
- 多線程
- 概述
- main線程介紹
- 開啟線程方式一:Thread類
- 開啟線程方式二:Runnable類
- 線程的執行原理
- 使用哪種方式好
- 使用匿名內部類創建線程
- 線程安全
- ThreadLocal
- 網絡編程
- XML
- 概述
- 語法
- 元素標簽
- 屬性
- 轉義字符
- CDATA區
- XML約束
- DTD約束
- 三種引入DTD的方式
- DTD語法
- Schema約束
- JDBC
- 概述
- JDBC原理
- JDBC查詢操作
- JDBCUtils
- 預處理對象
- JDBC連接池
- 概述
- DBCP
- C3P0
- DBUtils操作
- ArrayHandler
- ArrayListHandler
- BeanHandler
- BeanListHandler
- ColumnListHandler
- MapHandler
- MapListHandler
- ScalarHandler
- 事務
- 事務概述
- 原生JDBC完成轉賬
- DBUtils完成轉賬
- 事務特性
- 三層思想
- 概述
- JavaWEB
- tomcat
- servlet
- 概述
- 映射servlet
- Servlet接口
- HttpServlet類
- load-on-startup
- servletContext
- ServletRequest
- ServletResponse
- Cooike&Session
- servlet三大域對象
- JSP
- 概述
- jsp內置對象
- 指令
- page
- include
- taglib
- JSP中的四個域對象
- jsp的一個動作標簽
- EL表達式
- 概述
- 獲取域中數據
- 執行運算
- el表達式中的內置對象
- jsti標簽
- 概念
- jstl分類
- Filter過濾器
- 概述
- 生命周期
- url-pattern配置
- filter的chain過濾鏈
- filter-mapping子標簽
- 全局統一錯誤頁面
- filterConfig
- 自動登錄實例
- 全局統一編碼
- Listener監聽器
- 概念
- 監聽器分類
- 監聽三個對象的創建和銷毀
- 監聽三個對象屬性的變化
- 監聽javabean在session中的狀態變化
- 定時器
- 概念
- calendar日歷
- 郵件
- 概述
- JSON
- 數據結構
- 堆棧結構
- 隊列結構
- 數組結構
- 鏈表結構
- 基礎加強
- 面試題:增強一個對象的方法有幾種方式?
- 裝飾者增強
- 動態代理
- 動態代理
- 動態代理細節
- 使用動態代理解決字符集編碼
- 注解
- 概述
- 擴展的自定義注解
- 類加載器
- 全盤負責托管機制
- 開發模式
- 問題
- lambda
- 函數式編程思想概述
- String字符串