servlet中的request和response

利用3到4天的時間,把servlet中的request和response視頻看了一遍。看完之後,自己總結出來了一些知識點。

先來說說response吧。

1、解決用outputStream輸出中文的亂碼問題。       

1
2
3
4
5
//1.程序的數據以什麼碼錶輸出了,程序就要控制瀏覽器以什麼碼錶打開
response.setHeader("content-type""text/html;charset=utf-8");
String data="中國";
OutputStream out=response.getOutputStream();
out.write(data.getBytes("utf-8"));

要注意:

1
"content-type""text/html;charset=utf-8"中的分號切不可寫成逗號,不然瀏覽器會提示下載
1
2
3
4
5
//2.用HTML技術中的meta標籤來模擬http響應頭,用於控制瀏覽器的行爲
String data="中國人";
OutputStream out=response.getOutputStream();
out.write("<meta http-equiv='content-type' content='text/html;charset=utf-8'>".getBytes());
out.write(data.getBytes("utf-8"));

  2、用write流輸出中文

1
2
3
4
//設置response中的碼錶
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
response.getWriter().write("中國");

  3、實現文件的下載

1
2
3
4
5
6
7
8
9
10
11
12
13
14
String path=this.getServletContext().getRealPath("/download/image1.jpg");
String filename=path.substring(path.lastIndexOf("\\")+1);//取文件名的小技巧
response.setHeader("content-disposition","attachment;filename="+URLEncoder.encode(filename,"utf-8"));
InputStream in = null;
OutputStream out = null;
in = new FileInputStream(path);
int len=0;
byte buffer[]=new byte[1024];
out=response.getOutputStream();
while((len=in.read(buffer))>0){
out.write(buffer,0,len);
}
out.close();
in.close();

  4、控制瀏覽器定時刷新

1
2
response.setHeader("refresh""3");//3秒後刷新
response.setHeader("refresh","3;url='index.jsp'");//3秒後跳到index.jsp

 還有一個請求重定向,這個放在後面跟請求轉發放在一起說


 接下來說的就是request,先來說說一些常用的方法吧。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
System.out.println(request.getRequestURI());
System.out.println(request.getRequestURL());
//URL和URI的區別:
//URI:統一資源標識符  exp:/day02/RequestDemo1
//URL:全球資源定位器  exp:http://localhost:8080/day02/RequestDemo1
System.out.println(request.getQueryString());//獲取參數信息(返回請求行中的參數)exp:   返回name=zengxiang
System.out.println(request.getRemoteAddr());//返回發出請求的客戶機IP地址
System.out.println(request.getRemoteHost());//返回發出請求的客戶機主機名
System.out.println(request.getMethod());//返回請求方式POST、GET、PUT
 
//客戶機帶數據給servlet有兩種方式:超鏈接和提交表單,下面是獲取請求數據的幾種方式
1.String value = (String)request.getParameter("name");
2.Enumeration e=request.getParameterNames();
  while(e.hasMoreElements()){
    String name=(String) e.nextElement();
    value=request.getParameter(name);
    System.out.println(name+"="+value);
  }
3.String[] values=request.getParameterValues("password");
  for(int i=0;values.length!=0&&i<values.length;i++){
    System.out.println(values[i]);
  }//切記判斷傳遞過來的參數是否爲空
4.Map m=request.getParameterMap();
  User user=new User();
  try{
        BeanUtils.populate(user,m);//用map集合數據填充bean
      }catch(Exception e1){
        e1.printStackTrace();
    }
  System.out.println(user);
5.InputStream in=request.getInputStream();//一般不採用此種方式去獲取數據,文件上傳需要這種方式
  int len=0;
  byte buffer[]=new byte[1024];
  while((len=in.read(buffer))>0){
    System.out.println(new String(buffer,0,len));
  }

下面就是中文亂碼的問題了,先來解釋一下亂碼的原因吧,在瀏覽器中接受一個數據(編碼取決於在瀏覽器中的編碼),在數據傳給request時,按照request域中的碼錶(iso8859-1)翻譯過來,這個“中國”就不是“中國”了,於是到了servlet中就出現亂碼了。

通過瀏覽器帶來數據的方式不同,解決方式也不一樣。

一、解決get表單,超鏈接提交的亂碼

1
2
3
String value=request.getParameter("username");
String value1=new String(value.getBytes("iso8859-1"),"gbk");
System.out.println(value1);

二、解決post表單提交的亂碼

1
2
3
request.setCharacterEncoding("gbk");
String value1=request.getParameter("username");
System.out.println(value1);


區分兩種域:

1
2
   request域:作用於請求範圍,每個請求對應一個request域,相互獨立
servletContext域:作用於WEB應用,所有請求都在一個context域,數據易覆蓋


區分兩個方法:

1
2
getAttribute():獲取域中的數據
getParameter():獲取客戶機所提交的數據


WEB中各類地址的寫法:首先以“/”開頭,然後判斷該地址是給誰用的,給服務器用,“/”代表當前WEB應用;給客戶機瀏覽器用,“/”代表網站(包含多個web應用)例如:

1
2
3
4
5
6
1.request.getRequestDispatcher("/form1.html").forward(request, response);
2.response.sendRedirect("/day02/form1.html");
3.this.getServletContext().getRealPath("/form1.html");
4.this.getServletContext().getResourceAsStream("/form1.html");
5.<a href="/day06/form1.html">xx</a>
6.<form action="/day06/form1.html"></form>

最後再來說說請求重定向和請求轉發的區別


重定向的特點就是:1.瀏覽器向服務器發出兩個請求,意味着有兩個response/request

2.瀏覽器地址欄會變化


轉發的特點就是:1.瀏覽器向服務器發出一個請求,而服務器有多個web資源調用

2.瀏覽器地址欄不會變化


通俗一點理解就是:A找B借錢,B沒錢,1.B找C去借錢,然後再給A,這是轉發;2.B叫A自己找C借錢,這是重定向。


發現錯誤,謝謝提醒,增強你我實力!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章