request與response總結

request和response是什麼?
request是請求,在瀏覽器輸入地址,回車,就是一個請求
response是響應,服務器根據請求,返回數據到瀏覽器顯示,就是一個響應

第一,response
1 HttpServletResponse是一個子接口,ServletResponse是父接口,是服務器響應對象
2 http分爲三個部分
1.響應這裏寫代碼片行
設置狀態碼 setStatus(int sc)
response.setStatus(302);

2.響應頭
是key-value結構,一個key對應一個value,可以一個key對應多個value
(常用)設置響應頭setHeader(String name , String value);一個key對應一個value
響應名稱 響應參數
setHeader(“aa”,”11”);
setHeader(“aa”,”22”);
結果是 aa : 22
setIntHeader(String name ,int value)
setDateHeader(String name ,long date)毫秒值

針對是addHeader(String name ,int value)一個key對應多個value
addHeader(“bb”,”55”);
addHeader(“bb”,”66”);
結果是bb : 55,66

addIntHeader(String name ,int value)
addDateHeader(String name ,long date)毫秒值

3.響應體
向頁面顯示內容
getWriter() 字符流輸出
getOutputStream() 字節流輸出

第二,重定向
使用重定向實現登錄操作
1.需求
在登入頁面中,輸入用戶名和密碼,判斷輸入的用戶和密碼是否正確
如果用戶名和密碼都正確,登錄成功,向頁面輸出內容
如果用戶名或者密碼有一個是錯誤的,重定向(2次請求,2次響應)到登錄頁面

2.步驟
第一步:創建登錄頁面,寫表單,在表單裏面寫兩個輸入項,一個輸入用戶名,一個輸入密碼,
提交到一個servlet裏面

第二步:創建servlet,在這個servlet裏面首先獲取到輸入的用戶名和密碼,
根據用戶名和密碼進行判斷(用戶名如果是admin,密碼如果是123456表示正確的)

如果用戶名和密碼都正確,登錄成功,向頁面輸出內容;
response.getWriter().write(“login success”);

否則重定向到登錄頁面

重定向的代碼簡寫的方式
response.sendRedirect(“要重定向到的頁面的路徑”);

String login = request.getParameter(“login”);
String password = request.getParameter(“password”);

if (“admin”.equals(login) && “123456”.equals(password)) {
response.getWriter().write(“login success”);
} else {//重定向
/*response.setStatus(302);
response.setHeader(“Location”, “http://localhost:8080/day08_my/html/demo02_other.html“);
*/
response.sendRedirect(“http://localhost:8080/day08_my/html/demo02_other.html“);
}

第三,定時跳轉
當註冊一個網站,註冊完成之後,5秒之後跳轉到登錄頁面

3.2 實現方式
(1)使用頭信息Refresh實現
(2)寫法: response.setHeader(“Refresh”,”在幾秒值後跳轉;url=要跳轉到頁面的路徑”);
3.3 創建servlet,在servlet實現,在五秒之後跳轉到一個頁面
response.setHeader(“Refresh”, “3;url=http://localhost:8080/day08_my/html/demo02.html“);

如:後臺解決
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

response.setHeader(“Refresh”, “3;url=http://localhost:8080/day08_my/html/demo02.html“);

response.setContentType(“text/html; charset=UTF-8”);
response.getWriter().write(“Demo03Servlet—3秒之後跳轉”);
}

前臺解決


http://localhost:8080/day08_my/html/demo02.html“>


Demo03.html—3秒之後跳轉



倒計時



demo03.html
http://localhost:8080/day08_my/html/demo02.html“>


Demo03.html—3秒之後跳轉



//顯示3,2,1,...倒數
var time=2;
function loadTime(){
var span = document.getElementById("spanid");
span.innerHTML=time--;
}
setInterval("loadTime()", "1000");

第四,設置響應體
1 使用字節流向頁面輸出
* 1、設置瀏覽器的編碼
* 2、設置字節數組的編碼
* 讓瀏覽器的編碼和字節數組的編碼一致

//
response.setHeader(“content-type”, “text/html; charset=UTF-8”);
response.getOutputStream().write(“4.1 使用字節流向頁面輸出內容”.getBytes(“UTF-8”));

2 使用字符流向頁面輸出

  • 解決方法:
  • 1、設置response緩衝區的編碼
  • 2、設置瀏覽器的編碼
  • response緩衝區的編碼和瀏覽器的編碼一致

response.setCharacterEncoding(“UTF-8”);
//
response.setHeader(“content-type”, “text/html; charset=UTF-8”);
response.getWriter().write(“4.2 使用字符流向頁面輸出內容”);

第五,流的注意事項
5.1 字符流向頁面輸出中文亂碼問題解決,簡寫方式
//
reesponse.setContentType(“text/html; charset=UTF-8”);
response.getWriter().write(“4.2 ,簡寫 ,使用字符流向頁面輸出內容”);

5.2 字節流和字符流是互斥的

5.3 使用字符流不能直接向頁面輸出數字
//根據數字到碼錶中查詢數字對應的字符,把字符輸出
response.setCharacterEncoding(“utf-8”);
response.getWriter().write(111);

第六,驗證碼的案例
第一步:生成圖片
第二步:生成隨機的數字和字母
第三步:把數字和字母畫到圖片上
第四步:把圖片顯示到頁面上

/*
* 代碼實現驗證碼
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//生成圖片
int width = 150;
int height = 60;
BufferedImage bufferedImage =
new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR);
//得到畫筆
Graphics2D g2d = (Graphics2D) bufferedImage.getGraphics();
//生成四個隨機的數字和字母
String words = “asdfghjklqwertyuiopzxcvbASDFGHJKLQWERTYUIOPZXCVB1234567890”;
//創建Random對象
Random r = new Random();
int x = 25;
int y = 25;
//設置顏色
g2d.setColor(Color.YELLOW);
//設置字體的樣式
g2d.setFont(new Font(“宋體”,Font.BOLD,25));
//rotate(double theta, double x, double y)
//弧度=角度*3.14/180
for(int i=1;i<=4;i++) {
int idx = r.nextInt(words.length());
//根據位置得到具體的字符
char ch = words.charAt(idx);

//旋轉+- 30度
int jiaodu = r.nextInt(60)-30;
double hudu = jiaodu*Math.PI/180;
//旋轉的效果
g2d.rotate(hudu, x, y);
//把字符畫到圖片上
g2d.drawString(ch+”“, x, y);

x += 25;

//轉回去
g2d.rotate(-hudu, x, y);
}
//生成三條幹擾線
g2d.setColor(Color.green);
int x1,y1,x2,y2;
for(int m=1;m<=3;m++) {
x1 = r.nextInt(width);
y1 = r.nextInt(height);

x2 = r.nextInt(width);
y2 = r.nextInt(height);
g2d.drawLine(x1, y1, x2, y2);
}
//把圖片顯示到頁面上
ImageIO.write(bufferedImage, “jpg”, response.getOutputStream());
}





















Login:
Password:
code:




function loadCode(){
var img1 = document.getElementById("img1");
//這裏"/day08_my/demo06"瀏覽器有緩存,所有需要加一個變量,時間對象是瀏覽器對象
img1.src="/day08_my/demo06?time="+new Date().getTime();
}

第七,文件的下載
/*
7.1 文件下載的基本實現的步驟
(0)設置頭信息 Content-Disposition,無論是什麼格式的文件都以下載方式打開
(1)在服務器上面有一個可以下載的文件
(2)從服務器上拿到這個文件(使用文件輸入流得到文件)
(3)使用輸出流把文件寫到瀏覽器
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//輸入關聯下載的資源

String path = “/download/a.zip”;
InputStream is = getServletContext().getResourceAsStream(path);

int lastIndexOf = path.lastIndexOf(“/”);
String filename = path.substring(lastIndexOf+1);

response.setHeader(“Content-Disposition”, “attachment;filename=”+filename);

OutputStream os = response.getOutputStream();

int len = 0;
byte[] b = new byte[8192];
while ((len=is.read(b))!=-1) {
os.write(b, 0, len);
}
is.close();
os.close();
}

第八,request對象
/*
* (1)getMethod() :得到http請求方式
(2)getRequestURI() :得到請求地址(不包含ip+端口號)
(3)getProtocol() :得到http的版本
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

//瀏覽器中 http://localhost:8080/day08_my/rdemo01
// GET
System.out.println(request.getMethod());

// day08_my/rdemo01
System.out.println(request.getRequestURI());

// HTTP/1.1
System.out.println(request.getProtocol());

}

/*
* 8.3 獲取請求頭的信息
(1)getHeader(java.lang.String name) :根據名稱得到請求頭的值
= 頭信息 User-Agent:獲取當前請求的瀏覽器的類型
= String agent = request.getHeader(“User-Agent”);
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//Mozilla/5.0 (Windows NT 6.1; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0
System.out.println(request.getHeader(“User-Agent”));
}

/*
* 8.4 獲取客戶機的信息
(1)getContextPath() :請求項目的名稱
(2)getRequestURL() :客戶端發送的請求的路徑
(3)getRemoteAddr() :獲取當前客戶端的ip地址
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 瀏覽器中 http://localhost:8080/day08_my/rdemo02
// day08_my
System.out.println(request.getContextPath());

// http://localhost:8080/day08_my/rdemo02
System.out.println(request.getRequestURL());

// 0:0:0:0:0:0:0:1
System.out.println(request.getRemoteAddr());

}

Login:
Password:
love: 籃球 乒乓球 羽毛球
//(1)String getParameter(java.lang.String name) :參數是表單輸入項name屬性的值,根據名稱得到輸入的值 private void test1(HttpServletRequest request) { String login = request.getParameter(“login”); String password = request.getParameter(“password”); System.out.println(login); System.out.println(password); } //(2)String[] getParameterValues(java.lang.String name) :參數是表單輸入項name的值,針對複選框的情況 private void test2(HttpServletRequest request) { String[] loves = request.getParameterValues(“love”); System.out.println(Arrays.toString(loves)); } //(3)Map
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章