日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

javaweb入门笔记(4)-request和response

發布時間:2023/12/20 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 javaweb入门笔记(4)-request和response 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

javaweb入門筆記(4)-request和response

標簽: javaweb


[TOC]


API:

  • Interface HttpServletResponse
  • Interface HttpServletRequest

response

輸出數據

程序以什么碼表輸出,就一定要控制瀏覽器以什么碼表打開。可有如下兩種寫法:

  • response.setHeader("Content-type","text/html;charset=UTF-8")
  • response.setContentType("text/html;charset=UTF-8")(默認調用setHeader和setCharacterEncoding)

把分號;錯寫成逗號,,瀏覽器會提示下載

用html技術的<meta>標簽可以模擬一個http響應頭,<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>

response可用setCharacterEncoding方法設置碼表。字符流輸出:PrintWritet->response->瀏覽器,response->瀏覽器默認使用iso-8859編碼

文件下載

使用ServerContext的getRealPath方法,再InputStream和OutputStream

如果下載文件是中文名為中文,則文件名需要經過url編碼URLEncoder.encode

隨機圖片

使用BufferedImage在內存生成圖片,再使用ImageIO輸出。

畫圖使用Graphics,旋轉使用Graphics2D

漢字的區間:\u4e00-\u9fa5

刷新和緩存

  • 刷新:一般不在servlet里加refresh頭,而是在jsp加入<meta>頭模擬。
  • 緩存:加入expires頭,當前時間+要緩存的時長

請求重定向

重定向:設置狀態碼和location頭即可,或者直接使用response的sendRedirect方法。向服務器兩次請求。瀏覽器會改變地址欄,一般適用于登錄、購物等場景。

轉發:則是調用ServletContex對象的getRequestDispatcher方法,再調用forward方法。向服務器一次請求,瀏覽器地址欄不變。

一些細節:

  • getOutputStream和getWriter方法跟別用于輸出二進制數據、輸出文本數據的ServletOutputStream、Printwriter對象,這兩個方法相互排斥,只能調用其中一個,否則拋IllegalStateException異常。
  • response的輸出流會自己關閉。Servlet的service方法結束后,Servlet引擎會檢查并調用close方法關閉該輸出流對象。

request

  • URI:標識某個資源
  • URL:標識互聯網上某個資源

一些方法

  • getRequestURI用于權限攔截,訪問統計
  • getRemoteAddr用于得到客戶機IP地址
  • getMethod得到客戶機請求方式

requst對象獲取數據的四種方式

  • getParameter
  • getParameterNames
  • getParameterValues
  • getParameterMap(可結合JavaBean使用)

(getInputStream用于文件上傳)

中文亂碼

url后面如果有中文數據,需要編碼后再提交

表單提交的數據使用的碼表和該頁面的碼表一致,而getParameter方法默認使用ISO-8859碼表。

解決:

  • 對于post提交的數據,在獲取數據前要使用request對象的setCharacterEncoding設置碼表。
  • 對于get提交的數據,只能手工解決。先對數據調用getBytes("ISO-8859-1")獲取二進制字節,再用特定碼表構建字符串。
  • 超鏈提交的中文,解決辦法同get提交的數據。

也可以通過改服務器配置來解決亂碼問題,但一般不建議使用。

  • URIEncoding:改tomcat的配置文件conf/server.xml的連接器<Connector>中的URIEncoding屬性
  • useBodyEncodingForURI:將conf/server.xml的連接器<Connector>中的useBodyEncodingForURI置為true

請求轉發

應用場景:MVC設計模式

  • model : javabean;
  • view : jsp;
  • controller : servlet

使用request域對象把數據帶給轉發資源。調用request對象的getRequestDispatcher方法,再調用forward方法。一次請求,瀏覽器地址欄不變。

forward一些細節

  • 不能在關閉輸出流后再調用轉發,也不能調用兩次,否則會拋出異常。
  • 跳轉之前會清空response中的數據。即數據只是寫入到緩沖區而沒真正輸出到客戶端,則可調用forward方法,原來寫入到緩沖區的內容被清空,但響應頭字段信息保持。

include方法可以用于包含一些公共頁面(一般不在servlet中包含)

地址的寫法

以斜杠/開頭。如果是給服務器用,則/代表當前web應用;如果給瀏覽器用,則/代表網站。

例子:目錄結構如下

mail---------------------------Web應用所在目錄|----form1.html|----WEB-INF目錄|---------classes目錄|---------lib目錄|---------web.xml
  • request.getRequestDispatcher("/form1.html")
  • response.sendRedirect("mail/form1.html")
  • this.getServletContext().getRealPath("/form1.html")
  • this.getServletContext().getResourceAsStream("/form1.html")
  • <a href="/mail/form1.html">
  • <form action="/mail/form1.html">
  • 其中,1,3,4是給服務器用;2,5,6是瀏覽器用

    防盜鏈

    讀取referer請求頭,不合要求則重定向。


    作者@brianway更多文章:個人網站 | CSDN | oschina

    轉載于:https://my.oschina.net/brianway/blog/614215

    創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

    總結

    以上是生活随笔為你收集整理的javaweb入门笔记(4)-request和response的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。