使用HttpServletResponse對象獲取請求行信息
HttpServletResponse對象獲取請求行信息
方法列表
String reqMethod = request.getMethod() String reqURI=request.getRequestURI(); String reqURI=request.getRequestURI(); StringBuffer reqURL=request.getRequestURL(); String reqPath=request.getContextPath(); String queryString=request.getQueryString(); String reqClient=request.getRemoteAddr();
實例

HTML
<!DOCTYPE html> <html> <head> <title>request獲取請求行內(nèi)容</title> <meta charset="utf-8"> </head> <body> <form action="/WEB/lineServlet" method="post" > 姓名:<input type="text" name="name"><br> 年齡:<input type="text" name="age"><br> <input type="submit" value="提交"> </form> </body> </html>
java
package servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LineServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 設置編碼方式
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");
// 獲得PrintWriter輸出對象
PrintWriter writer = response.getWriter();
// 1、獲取請求方式
String reqMethod = request.getMethod();
writer.write("請求方式method: " + reqMethod);
writer.print("<br>");
//2、獲得請求的資源相關(guān)的內(nèi)容
String reqURI=request.getRequestURI();
StringBuffer reqURL=request.getRequestURL();
writer.write("請求內(nèi)容URI: " + reqURI);
writer.print("<br>");
writer.write("請求內(nèi)容URL: " + reqURL);
writer.print("<br>");
//獲得web應用的名稱
String reqPath=request.getContextPath();
writer.write("web應用contextPath: " + reqPath);
writer.print("<br>");
//地址后的參數(shù)的字符串
String queryString=request.getQueryString();
writer.write("參數(shù)的字符串queryString: " + queryString);
writer.print("<br>");
//3、獲得客戶機的信息---獲得訪問者IP地址
String reqClient=request.getRemoteAddr();
writer.write("客戶機的信息RemoteAddr: " + reqClient);
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}HttpServletResponse和HttpServletRequest解析
最近有這么一個訴求,我在A服務器中的java調(diào)用執(zhí)行一個python文件,并將其返回值返回給B服務器的客戶端。當時在想A服務器暴露一個接口,然后使用runtime API調(diào)用即可,但是返回值這塊我卻有點苦惱。我的本意是直接返回IO流,因為生成的數(shù)據(jù)可大可小,無規(guī)律,但是我發(fā)現(xiàn)這樣是不可以的。
[org.springframework.http.converter.HttpMessageNotWritableException: No converter found for return value of type: class org.springframework.boot.loader.jar.JarURLConnection$2]
后來兜兜轉(zhuǎn)轉(zhuǎn)發(fā)現(xiàn)了HttpServletResponse 可以來解決這個問題。
HttpServletResponse和HttpServletRequest
Web服務器收到客戶端的http請求,會針對每一次請求,分別創(chuàng)建一個用于代表請求的request對象、和代表響應的response對象。request和response對象即然代表請求和響應,那我們要獲取客戶機提交過來的數(shù)據(jù),只需要找request對象就行了。要向客戶機輸出數(shù)據(jù),只需要找response對象就行了。
本文主講HttpServletResponse,HttpServletRequest碰到合適的場景我會將他補全。
HttpServletResponse
HttpServletResponse對象代表服務器的響應。這個對象中封裝了向客戶端發(fā)送數(shù)據(jù)、發(fā)送響應頭,發(fā)送響應狀態(tài)碼的方法。
他的作用如下
1、保存流對象
使用HttpServletResponse 我們可以將IO流讀出來在寫入HttpServletResponse中的OutputStream中。然后別的客戶端訪問的時候方便獲取
相關(guān)代碼
@RequestMapping(value = "/testHdf")
@ResponseBody
public void testHdfs(String csv, String sql, HttpServletResponse response) {
BufferedInputStream bis = null;
try {
Process process = Runtime.getRuntime().exec("python /blazingsql/testData/zgh/aaa.py");
process.waitFor();
bis = new BufferedInputStream(process.getInputStream());
OutputStream os = null;
byte[] buff = new byte[1024];
os = response.getOutputStream();
int i = bis.read(buff);
while (i != -1) {
os.write(buff, 0, buff.length);
os.flush();
i = bis.read(buff);
}
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
} finally {
if (bis != null) {
try {
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
2、下載文件
使用HttpServletResponse可以下載文件,很方便
下載文件是,設置這些參數(shù)很重要
response.setHeader(“Content-Disposition”, “attachment;filename=”+ URLEncoder.encode(“demo.csv”, “UTF-8”)); response.setHeader(“Connection”, “close”); response.setHeader(“Content-Type”, “application/octet-stream”);
相關(guān)代碼
@RequestMapping(value = "/download")
@ResponseBody
public void download(String path,HttpServletResponse response) throws UnsupportedEncodingException {
response.reset();
response.setHeader("Content-Disposition", "attachment;filename="+ URLEncoder.encode("demo.csv", "UTF-8"));
response.setHeader("Connection", "close");
response.setHeader("Content-Type", "application/octet-stream");
OutputStream ops = null;
FileInputStream fis =null;
byte[] buffer = new byte[8192];
int bytesRead = 0;
try {
ops = response.getOutputStream();
fis = new FileInputStream(path);
while((bytesRead = fis.read(buffer, 0, 8192)) != -1){
ops.write(buffer, 0, bytesRead);
}
ops.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if(fis != null){
fis.close();
}
if(ops != null){
ops.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring?Boot實現(xiàn)文件上傳的兩種方式總結(jié)
應用開發(fā)過程中,文件上傳是一個基礎(chǔ)的擴展功能,它的目的就是讓大家共享我們上傳的文件資源,下面這篇文章主要給大家總結(jié)介紹了關(guān)于Spring?Boot實現(xiàn)文件上傳的兩種方式,需要的朋友可以參考下2023-05-05
Spring Data JPA例子代碼[基于Spring Boot、Mysql]
這篇文章主要介紹了Spring Data JPA例子代碼[基于Spring Boot、Mysql],小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-04-04
基于Spring Data的AuditorAware審計功能的示例代碼
這篇文章主要介紹了基于Spring Data的AuditorAware審計功能的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-03-03
Springboot應用中線程池配置詳細教程(最新2021版)
這篇文章主要介紹了Springboot應用中線程池配置教程(2021版),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03
SpringBoot結(jié)合Redis配置工具類實現(xiàn)動態(tài)切換庫
本文主要介紹了SpringBoot結(jié)合Redis配置工具類實現(xiàn)動態(tài)切換庫,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-08-08
將字符串數(shù)字格式化為樣式1,000,000,000的方法
這篇文章主要介紹了將字符串數(shù)字格式化為樣式1,000,000,000的方法,有需要的朋友可以參考一下2014-01-01
Java中的system.getProperty()的作用及使用方法
System.getProperty()?方法用于獲取系統(tǒng)屬性的值,該方法接受一個字符串參數(shù),表示要獲取的系統(tǒng)屬性的名稱,返回值為字符串類型,表示該屬性的值,接下來通過本文給大家介紹Java中的system.getProperty()的作用及使用方法,感興趣的朋友跟隨小編一起看看吧2023-05-05

