15_Request

Request
獲取請求行數(shù)據(jù)
  • 獲取請求方式
    • request.getMethod()
  • 獲取請求資源
    • String request.getRequestUri()所有的資源地址(短的:工程名+模塊名)
    • StringBuffer getRequestUrl()網(wǎng)絡(luò)資源地址(長的:ip+端口+工程名+模塊名)
    • String getContextPath()==重要==,后期總用這個(gè)方法,獲得web應(yīng)用名稱
    • String getQueryString()獲取get提交地址后面的參數(shù)那一塊字符串(類似與post提交的請求提字符串)
      • 需要自己拆分字符串,用的不多
  • 補(bǔ)充:獲取客戶端IP
    • String getRemoteAddr()
  • DNS服務(wù)器:域名解析服務(wù)器
    • 黑客經(jīng)常黑DNS服務(wù)器
Request獲取請求頭數(shù)據(jù)
long getDateHeader(String name)
String getHeader(String name)//最常用
Enumeration getHeaders(String name)//可以有多個(gè)頭,但是火狐等瀏覽器把他們合并成一個(gè)
Enumeration getHeaderNames()
int getIntHeader(String name)
  • 防盜鏈(請求頭中有個(gè)一referer值,記錄訪問服務(wù)器的地址來源)
Request獲取請求體
String getParameter(String name)//重點(diǎn)
String[] getParameterValues(String name)
Enumeration getParameterNames()//(非常不重要)
Map<String, String[]> getParameterMap()//重點(diǎn)(key(String)-->value(String[]))
BeanUtils
  • BeanUtils是把Map集合的數(shù)據(jù)映射到j(luò)ava對象中的工具,需要依賴:
  • commons-beanutils-1.8.3.jar
  • commons-logging-1.1.1.jar
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    request.setCharacterEncoding("utf-8");
    response.setCharacterEncoding("utf-8");
    response.setContentType("text/html;charset=utf-8");
    try {
        Map<String, String[]> parameterMap = request.getParameterMap();
        Info bean = new Info();
        BeanUtils.populate(bean, parameterMap);
        response.getWriter().write(bean.toString());
    } catch (Exception e) {
        e.printStackTrace();
    }
}
Request解決亂碼問題
  • post:request.setCharacterEncoding("UTF-8");
  • get:parameter = new String(parameter.getbytes("iso8859-1"),"utf-8");
Request其他功能
  • request是一個(gè)域?qū)ο?/p>

    • request也是一個(gè)存儲數(shù)據(jù)的域?qū)ο?所以也具有如下方法
    • 班級垃圾桶:作用域是班級
    • 公共垃圾桶:作用于是所有人
    setAttribute(String name,String value)
    getAttribute(String name)
    removeAttribute(String name)
    
  • request請求轉(zhuǎn)發(fā)

    • 重定向是服務(wù)器和客戶端的web行為
    • 轉(zhuǎn)發(fā)是服務(wù)器內(nèi)部的行為
    • 轉(zhuǎn)發(fā)是一次請求,地址不變,客戶端不知道是誰給的資源
    • 你向我借錢,我跟我朋友借錢然后借給你,你只知道我借給你的,不知道錢是我的還是我借的
    • 重新定向可以訪問外部網(wǎng)站 轉(zhuǎn)發(fā)只能訪問內(nèi)部資源
    • 轉(zhuǎn)發(fā)的性能要優(yōu)于重定向
    • getRequestDispather必須以斜杠開頭"/"用于表示當(dāng)前WEB應(yīng)用的本目錄,可以訪問WEB-INFO中的資源
//獲取請求轉(zhuǎn)發(fā)器
RequestDispather getRequestDispather(String path)//必須以斜杠開頭"/"
//通過轉(zhuǎn)發(fā)器對象轉(zhuǎn)發(fā)對象
forward(ServletRquest request, ServletResponse response)
//通過forward傳遞request對象過去后,另一方得到的request數(shù)據(jù)是一樣的,但是不是同一個(gè)對象(也可以簡單理解為同一個(gè)對象也可以)
  • 重定向在其他語言里也有,轉(zhuǎn)發(fā)一開始是j2ee工程師想出來的
注冊
  • BeanUtils可以將一個(gè)Map對象映射到一個(gè)Bean實(shí)體中
  • 隨機(jī)生成唯一的字符串:
    • UUID:隨機(jī)不重復(fù)的32位字符串,java生成后是36位的
    • UUID.randomUUID().toString()
  • 獲取表單中文怎么解決:
    • POST提交(請求體中參數(shù)):Request默認(rèn)編碼是ISO8859-1,所以要設(shè)置Request的編碼為utf-8
    • GET提交(參數(shù)子請求行中):頁面發(fā)送請求時(shí),參數(shù)通過瀏覽器把數(shù)據(jù)進(jìn)行編碼(utf-8),把中文編碼后發(fā)送給服務(wù)器.服務(wù)器獲取到數(shù)據(jù)后將數(shù)據(jù)進(jìn)行封裝到request中,當(dāng)調(diào)用request.getParameter("key")時(shí),會根據(jù)碼表將數(shù)據(jù)去的后進(jìn)行解碼(默認(rèn)我iso8859-1).但是查出來是亂碼.通過request.setCharacterEncoding("utf-8")可以設(shè)置取數(shù)據(jù)時(shí)用的解碼編碼,但是這種方法對get請求不管用.解決:先編碼后解碼
  • 到企業(yè)中所有的主鍵都不會自增長的,都是UUID
  • 注冊成功后通過重定向進(jìn)行跳轉(zhuǎn),不用轉(zhuǎn)發(fā)(地址不變)
  • 登陸成功后通過重定向進(jìn)行跳轉(zhuǎn),登陸失敗后通過轉(zhuǎn)發(fā)跳轉(zhuǎn)到當(dāng)前頁面,并且通過request帶參數(shù)過去.(jsp表面上是寫html,但是它可以嵌java代碼)(PHP原理也是一樣,只是在htmp中嵌php代碼)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容