电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

JSP中Servlet的Request與Response的用法與區別

瀏覽:142日期:2022-06-07 10:50:45

JSP中Servlet的Request與Response的用法與區別

簡介:Web服務器收到客戶端的http請求,會針對每一次請求,分別創建一個用于代表請求的request對象、和代表響應的response對象。request和response對象即然代表請求和響應,那我們要獲取客戶機提交過來的數據,只需要找request對象就行了。要向客戶機輸出數據,只需要找response對象就行了。

一,Request

Request代表請求對象,其中封裝了對請求中具有請求行、請求頭、實體內容的操作的方法,通過這個對象提供的方法,可以獲得客戶端請求的所有信息。

1. 作為容器

setAttribute(String name,Object o)將數據作為request對象的一個屬性存放到request對象中 
getAttribute(String name)獲取request對象的name屬性的屬性值 
removeAttribute(String name)     移除request對象的name屬性 
getAttributeNames()     獲取request對象的所有屬性名 

2. 獲得客戶端信息        

 getRequestURL()返回客戶端發出請求時的完整URL。 
getRequestURI()返回請求行中的資源名部分。 
getRemoteAddr()返回發出請求的客戶機的IP地址。 
getRemoteHost()返回發出請求的客戶機的完整主機名。 
getRemotePort()返回客戶機所使用的網絡端口號。 
getLocalAddr()返回WEB服務器的IP地址。 
getLocalName()返回WEB服務器的主機名。 
  getQueryString()返回請求行中的參數部分。 
getPathInfo()返回請求URL中的額外路徑信息。額外路徑信息是請求URL中的位于Servlet的路徑之后和查詢參數之前的內容,它以“/”開頭。 

3. 獲得客戶端請求頭  

getHeader(string name) 
getHeaders(String name) 
getHeaderNames() 

4. 獲得客戶端請求參數(客戶端提交的數據)

getParameter(String)方法(常用) 
getParameterValues(String name)方法(常用) 
getParameterNames()方法(不常用) 
getParameterMap()方法(編寫框架時常用) 

5.request接收表單提交中文參數亂碼問題解決

(1)get方式提交表單:

對于以get方式傳輸的數據,request即使設置了以指定的編碼接收數據也是無效的(至于為什么無效我也沒有弄明白),默認的還是使用ISO8859-1這個字符編碼來接收數據,客戶端以UTF-8的編碼傳輸數據到服務器端,而服務器端的request對象使用的是ISO8859-1這個字符編碼來接收數據,服務器和客戶端溝通的編碼不一致因此才會產生中文亂碼的。

解決辦法:

1) 在接收到數據后,先獲取request對象以ISO8859-1字符編碼接收到的原始數據的字節數組,然后通過字節數組以指定的編碼構建字符串,解決亂碼問題。

String name = request.getParameter("name");//接收數據
     name =new String(name.getBytes("ISO8859-1"), "UTF-8") ;//獲取request對象以ISO8859-1字符編碼接收到的原始數據的字節數組,然后通過字節數組以指定的編碼構建字符串,解決亂碼問題

     2) server.xml中配置

  URIEncoding=utf-8

(2)post方式提交表單:

之所以會產生亂碼,就是因為服務器和客戶端溝通的編碼不一致造成的,因此解決的辦法是:在客戶端和服務器之間設置一個統一的編碼,之后就按照此編碼進行數據的傳輸和接收。

 request.setCharacterEncoding("UTF-8");

6.Request對象實現請求轉發

request.getRequestDispatcher("/test.jsp").forward(request, response); 
request.getRequestDispatcher("/test.jsp").include(request, response); 
調用forward()方法后,原先存放在HttpResponse對象中的內容將會自動被清除 
調用include()方法后,原先存放在HttpResponse對象中的內容將不會被清除,內容追加 

二,Response

Response代表響應,于是響應消息中的狀態碼、響應頭、實體內容都可以由它進行操作

1. 向客戶端(瀏覽器)發送數據的相關方法

getOutputStream()
getWriter()

2.向客戶端(瀏覽器)發送響應頭的相關方法

addDateHeader() 
addHeader() 
addIntHeader() 
containsHeader() 
      setDateHeader() 
setHeader() 
setIntHeader() 

例如:  

  response.setHeader("content-type", "text/html;charset=UTF-8"); 

3.向客戶端(瀏覽器)發送響應狀態碼的相關方法--setStatus()

實例代碼:

private void downloadFileByOutputStream(HttpServletResponse response) 
      throws FileNotFoundException, IOException { 
    //1.獲取要下載的文件的絕對路徑 
    String realPath = this.getServletContext().getRealPath("/download/1.JPG"); 
    //2.獲取要下載的文件名 
    String fileName = realPath.substring(realPath.lastIndexOf("\\")+1); 
    //3.設置content-disposition響應頭控制瀏覽器以下載的形式打開文件 
    response.setHeader("content-disposition", "attachment;filename="+fileName); 
    //4.獲取要下載的文件輸入流 
    InputStream in = new FileInputStream(realPath); 
    int len = 0; 
    //5.創建數據緩沖區 
    byte[] buffer = new byte[1024]; 
    //6.通過response對象獲取OutputStream流 
    OutputStream out = response.getOutputStream(); 
    //7.將FileInputStream流寫入到buffer緩沖區 
    while ((len = in.read(buffer)) > 0) { 
    //8.使用OutputStream將緩沖區的數據輸出到客戶端瀏覽器 
      out.write(buffer,0,len); 
    } 
    in.close(); 
  } 

它們的區別:

其實從字面上我們就可以知道他們倆的區別在于一個是請求(request),而另一個是響應(response),servlet作為服務端,請求便是來自瀏覽器的請求,響應便是服務器對瀏覽器的響應。在你想獲取瀏覽器請求的數據時,我們就要用request,而在我們要向瀏覽器響應數據或頁面時,我們就要用到response。

request 是請求的載體,它附帶著,請求的參數,ip,cookie,表單,字符編碼,或者上傳文件。
你可以通過request去獲得你所需要的信息。

response是響應的載體,你可以設置,表頭,報文,響應文件類型,字符編碼,response,自帶一個輸出流,當你需要將一個頁面或者一個文件傳到客戶端時,你可以通過這個流來進行操作

希望通過本文能幫助到大家,如有疑問請留言或者到本站社區交流討論,感謝閱讀,謝謝大家對本站的支持!

標簽: JSP
主站蜘蛛池模板: IPO咨询公司-IPO上市服务-细分市场研究-龙马咨询 | 专业广州网站建设,微信小程序开发,一物一码和NFC应用开发、物联网、外贸商城、定制系统和APP开发【致茂网络】 | 暴风影音| 北京易通慧公司从事北京网站优化,北京网络推广、网站建设一站式服务商-北京网站优化公司 | 至顶网| 仿真植物|仿真树|仿真花|假树|植物墙 - 广州天昆仿真植物有限公司 | 板框压滤机-隔膜压滤机配件生产厂家-陕西华星佳洋装备制造有限公司 | 颗粒机,颗粒机组,木屑颗粒机-济南劲能机械有限公司 | 好物生环保网、环保论坛 - 环保人的学习交流平台 | 活性氧化铝|无烟煤滤料|活性氧化铝厂家|锰砂滤料厂家-河南新泰净水材料有限公司 | 一体化净水器_一体化净水设备_一体化水处理设备-江苏旭浩鑫环保科技有限公司 | 高柔性拖链电缆_卷筒电缆_耐磨耐折聚氨酯电缆-玖泰特种电缆 | 卧涛科技有限公司科技项目申报公司|高新技术企业申报|专利申请 | PCB设计,PCB抄板,电路板打样,PCBA加工-深圳市宏力捷电子有限公司 | 全温恒温摇床-水浴气浴恒温摇床-光照恒温培养摇床-常州金坛精达仪器制造有限公司 | 安平县鑫川金属丝网制品有限公司,防风抑尘网,单峰防风抑尘,不锈钢防风抑尘网,铝板防风抑尘网,镀铝锌防风抑尘网 | 破碎机_上海破碎机_破碎机设备_破碎机厂家-上海山卓重工机械有限公司 | 减速机三参数组合探头|TSM803|壁挂式氧化锆分析仪探头-安徽鹏宸电气有限公司 | 博莱特空压机|博莱特-阿特拉斯独资空压机品牌核心代理商 | 衬四氟_衬氟储罐_四氟储罐-无锡市氟瑞特防腐科技有限公司 | 上海新光明泵业制造有限公司-电动隔膜泵,气动隔膜泵,卧式|立式离心泵厂家 | 安徽合肥格力空调专卖店_格力中央空调_格力空调总经销公司代理-皖格制冷设备 | 西安标准厂房_陕西工业厂房_西咸新区独栋厂房_长信科技产业园官方网站 | 机械加工_绞车配件_立式离心机_减速机-洛阳三永机械厂 | 牛皮纸|牛卡纸|进口牛皮纸|食品级牛皮纸|牛皮纸厂家-伽立实业 | HEYL硬度计量泵-荧光法在线溶解氧仪-净时测控技术(上海)有限公司 | 长春网站建设,五合一网站设计制作,免费优化推广-长春网站建设 | 特材真空腔体_哈氏合金/镍基合金/纯镍腔体-无锡国德机械制造有限公司 | 东莞市海宝机械有限公司-不锈钢分选机-硅胶橡胶-生活垃圾-涡电流-静电-金属-矿石分选机 | 别墅图纸超市|别墅设计图纸|农村房屋设计图|农村自建房|别墅设计图纸及效果图大全 | 高精度电阻回路测试仪-回路直流电阻测试仪-武汉特高压电力科技有限公司 | 科昊仪器超纯水机系统-可成气相液氮罐-美菱超低温冰箱-西安昊兴生物科技有限公司 | 深圳市源和塑胶电子有限公司-首页 | 宁夏档案密集柜,智能密集柜,电动手摇密集柜-盛隆柜业宁夏档案密集柜厂家 | 西宁装修_西宁装修公司-西宁业之峰装饰-青海业之峰墅级装饰设计公司【官网】 | 工业胀紧套_万向节联轴器_链条-规格齐全-型号选购-非标订做-厂家批发价格-上海乙谛精密机械有限公司 | 工业雾炮机_超细雾炮_远程抑尘射雾器-世纪润德环保设备 | 铆钉机|旋铆机|东莞旋铆机厂家|鸿佰专业生产气压/油压/自动铆钉机 | 圆周直径尺-小孔内视镜-纤维研磨刷-东莞市高腾达精密工具 | 纸塑分离机-纸塑分离清洗机设备-压力筛-碎浆机厂家金双联环保 | 东亚液氮罐-液氮生物容器-乐山市东亚机电工贸有限公司 |