中文字幕理论片,69视频免费在线观看,亚洲成人app,国产1级毛片,刘涛最大尺度戏视频,欧美亚洲美女视频,2021韩国美女仙女屋vip视频

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
request對(duì)象和response對(duì)象

web服務(wù)器收到客戶端的HTTP請(qǐng)求,會(huì)針對(duì)每一次請(qǐng)求分別創(chuàng)建一個(gè)用于代表請(qǐng)求的request對(duì)象和代表響應(yīng)的response對(duì)象。

1.要得到客戶機(jī)提交過來的數(shù)據(jù),只需要找request對(duì)象就行了。

2、要向客戶機(jī)輸出數(shù)據(jù),只需要找response對(duì)象就行了。


一、response對(duì)象

1.1向客戶端發(fā)送數(shù)據(jù),以字節(jié)為單位(一定要先設(shè)置編碼方式,再輸出)

  1. String data = "你好,中國(guó)1";  
  2. OutputStream out = response.getOutputStream();  
  3. out.write(data.getBytes());//查找本機(jī)默認(rèn)編碼進(jìn)行編碼  

  1.     String data = "你好,中國(guó)2";  
  2. OutputStream out = response.getOutputStream();  
  3. out.write(data.getBytes("UTF-8"));//以UTF-8進(jìn)行編碼  
  4. //告訴瀏覽器編碼方式  
  5. response.setHeader("Content-Type","text/html;charset=UTF-8" );  

  1. String data = "你好,中國(guó)3";  
  2. OutputStream out = response.getOutputStream();  
  3. out.write("<meta http-equiv='Content-Type' content='text/html;charset=UTF-8'>".getBytes());////通過meta標(biāo)簽?zāi)M請(qǐng)求頭  
  4. out.write(data.getBytes("UTF-8"));//以UTF-8進(jìn)行編碼  

  1. String data = "你好,中國(guó)4";  
  2.     OutputStream out = response.getOutputStream();  
  3.     response.setContentType("text/html;charset=UTF-8");  
  4.     out.write(data.getBytes("UTF-8"));//以UTF-8進(jìn)行編碼  
  1.   
  1. response.setContentType("text/html;charset=UTF-8");  
等價(jià)于下面兩句代碼的效果:

response.setCharacterEncoding("UTF-8");//更改服務(wù)器發(fā)送數(shù)據(jù)的默認(rèn)編碼
response.setHeader("Content-Type","text/html;charset=UTF-8");//還要通知客戶端解碼方式

  1. int x=97;  
  2. OutputStream out = response.getOutputStream();  
  3. out.write((x+"").getBytes());////向客戶端發(fā)送數(shù)字  
1.2 以字符為單位向客戶端發(fā)送數(shù)據(jù)

              String data = "你是誰?";
              response.setCharacterEncoding("UTF-8"); //設(shè)置編碼為UTF-8
              response.setHeader("Content-Type", "text/html;charset=UTF-8");//告訴客戶端編碼方式
              
              
             // 第二種方法:相當(dāng)于以上兩句代碼
              //response.setContentType("text/html;charset=UTF-8");
              PrintWriter writer = response.getWriter();//默認(rèn)編碼是iso-8859-1 創(chuàng)建該對(duì)象前必須設(shè)置好編碼方式
              
              writer.write(data);
              System.out.println(response.getCharacterEncoding());
             
1.3 讓客戶端以下載方式打開文件,解決中文文件名亂碼問題(URLEncoder.encode(name, "UTF-8"))

  1. //得到文件的真實(shí)路徑  
  2. String realPath = getServletContext().getRealPath("/files/漂亮美眉.jpg");  
  3. //獲取文件名  
  4. String name = realPath.substring(realPath.lastIndexOf("\\"));  
  5.   
  6. //設(shè)置響應(yīng)頭,通知客戶端以下載的方式打開文件  
  7. response.setHeader("Content-Disposition""attachment;filename="+URLEncoder.encode(name, "UTF-8"));  
  8.   
  9. //構(gòu)建輸入流  
  10.    InputStream in = new FileInputStream(realPath);  
  11.      
  12.    //輸出到客戶端的流  
  13.    OutputStream out = response.getOutputStream();  
  14.    int len = -1;  
  15.    byte buf[] = new byte[1024];  
  16.    while((len=in.read(buf))!=-1)  
  17.    {  
  18.     out.write(buf, 0, len);  
  19.    }  
  20.      
  21.    in.close();  

1.4 輸出隨機(jī)數(shù)字生成驗(yàn)證碼圖片
  1.         //設(shè)置不要緩存(3種方式,建議三種都設(shè)置,防止瀏覽器不支持)  
  2.         response.addHeader("Pragma""no-cache");   
  3.         response.setHeader("Cache-Control""no-cache");   
  4.         response.setHeader("Expires""0");  
  5.           
  6.         //1.內(nèi)存圖像 BufferedImage  
  7.         BufferedImage image = new BufferedImage(WIDTH,HEIGHT,BufferedImage.TYPE_INT_RGB);  
  8.           
  9.         //2.創(chuàng)建畫筆  
  10.         Graphics g = image.getGraphics();  
  11.           
  12.         //2.1畫邊框  
  13.         g.setColor(Color.GRAY);//設(shè)置邊框顏色  
  14.         g.drawRect(00, WIDTH, HEIGHT);//畫矩形邊框  
  15.         //2.2填充邊框  
  16.         g.fillRect(11, WIDTH-1, HEIGHT-1);  
  17.           
  18.         //2.3輸出驗(yàn)證隨機(jī)數(shù)字4個(gè)  
  19.         Random r = new Random();  
  20.         g.setColor(Color.BLUE);  
  21.         int x = 5;  
  22.         for(int i=0;i<4;i++)  
  23.         {  
  24.           
  25.             g.setFont(new Font("宋體",Font.BOLD,20));  
  26.             g.drawString(r.nextInt(10)+"", x, 20);  
  27.             x+=30;  
  28.         }  
  29.           
  30.         //2.4畫干擾線  
  31.         g.setColor(Color.YELLOW);  
  32.         for(int i = 0;i<9;i++)  
  33.         {     
  34.               
  35.             g.drawLine(r.nextInt(WIDTH),r.nextInt(HEIGHT), r.nextInt(WIDTH), r.nextInt(HEIGHT));  
  36.         }  
  37.           
  38.         //3 利用response輸出流輸出image  
  39.         ImageIO.write(image,"jpeg",response.getOutputStream());<pre name="code" class="java">       //response.setHeader("Expires", (System.currentTimeMillis()+24*3600*10*1000)+"");//緩存10天  
  40.         response.setDateHeader("Expires",System.currentTimeMillis()+10*24*1000*60*60);</pre><br>  
  41. <pre></pre>  
  42. <p></p>  
  43. <pre></pre>  
  44. 1.5 控制客戶端刷新時(shí)間  
  45. <p></p>  
  46. <p></p>  
  47. <pre name="code" class="java">       //response.setHeader("Refresh", "5;URL=/day05/default.html");//5秒后跳轉(zhuǎn),url是跳轉(zhuǎn)的鏈接  
  48.          response.getOutputStream().write("<meta http-equiv=\"Refresh\" content=\"3;URL=/day05/login.html\">".getBytes());</pre>1.6 控制客戶端緩存時(shí)間  
  49. <p></p>  
  50. <p></p>  
  51. <pre name="code" class="java">      //response.setHeader("Expires", (System.currentTimeMillis()+24*3600*10*1000)+"");//緩存10天  
  52.         response.setDateHeader("Expires",System.currentTimeMillis()+10*24*1000*60*60);</pre><br>  
  53. 1.7 用response實(shí)現(xiàn)請(qǐng)求重定向  
  54. <p></p>  
  55. <p><img src="http://hi.csdn.net/attachment/201202/14/0_13292204202s0e.gif" alt=""></p>  
  56. <p>特點(diǎn):地址欄會(huì)變,發(fā)送兩次請(qǐng)求,增加服務(wù)器負(fù)擔(dān)。</p>  
  57. <p>實(shí)現(xiàn)方式:response.sendRedirect()<br>  
  58. 實(shí)現(xiàn)原理:302狀態(tài)碼和location頭即可實(shí)現(xiàn)重定向<br>  
  59. </p>  
  60. <pre name="code" class="java">           //response.sendRedirect("/day05/servlet/ResponseDemo5");//絕對(duì)路徑  
  61.  注意      // response.sendRedirect("/servlet/ResponseDemo5");//相對(duì)路徑這里用是錯(cuò)誤的,因?yàn)橹囟ㄏ蚴怯煽蛻舳税l(fā)起的  
  62.           response.setStatus(307);//302 或者 307都可  
  63.           response.setHeader("location""http://localhost:8080/day05/servlet/ResponseDemo1");</pre><br>  
  64. 1.8 小細(xì)節(jié)  
  65. <p></p>  
  66. <p></p>  
  67. <pre name="code" class="java">          String  s1 = "abc";  
  68.           String  s2 = "def";  
  69.           response.getOutputStream().write(s1.getBytes());  
  70.           //response.getWriter().write(s2);  
  71.           //注:getOutputStream和getWriter這兩個(gè)方法互相排斥,  
  72.           //調(diào)用了其中的任何一個(gè)方法后,就不能再調(diào)用另一方法,會(huì)拋異常。  
  73.           //java.lang.IllegalStateException:   
  74.           //getOutputStream() has already been called for this response</pre><br>  
  75. <p><br>  
  76. </p>  
  77. <p>二、request(HttpServletRequest)對(duì)象</p>  
  78. <p>2.1.get方法</p>  
  79. <p></p><pre name="code" class="java">         String locale = request.getLocalName();//傳輸協(xié)議  
  80.          String url = request.getRequestURL().toString();//請(qǐng)求的地址  
  81.          String uri = request.getRequestURI();//沒有主機(jī)名的地址  
  82.          String protocol = request.getProtocol();//獲取協(xié)議  
  83.          String  add = request.getRemoteAddr();//客戶端IP  
  84.          String host = request.getRemoteHost();//客戶端主機(jī)名  
  85.          String port = request.getRemotePort()+"";//客戶端端口號(hào)  
  86.          String method = request.getMethod();//客戶端的請(qǐng)求方式  
  87.          String localAddr = request.getLocalAddr();//獲取服務(wù)器地址  
  88.          String username = request.getParameter("username");//地址后面?請(qǐng)求的參數(shù)  
  89.          String serverPort = request.getServerPort()+"";//服務(wù)器端口號(hào)  
  90.          String serverName = request.getServerName();//服務(wù)器名</pre><br>  
  91. 2.2 獲取客戶端請(qǐng)求頭<p></p>  
  92. <p></p><pre name="code" class="java">           response.setContentType("text/html;charset=UTF-8");  
  93.   
  94.            PrintWriter out = response.getWriter();  
  95.            //獲取單個(gè)請(qǐng)求頭的值  
  96.            out.write(request.getHeader("Accept-Language")+"<br/>");  
  97.            //獲取單個(gè)請(qǐng)求頭多個(gè)值  
  98.            Enumeration  headers = request.getHeaders("user-agent");  
  99.            while(headers.hasMoreElements())  
  100.            {  
  101.                out.println(headers.nextElement()+"<hr/>");  
  102.            }  
  103.              
  104.            //獲取所有的請(qǐng)求頭名  
  105.            Enumeration names = request.getHeaderNames();  
  106.            while(names.hasMoreElements())  
  107.            {   //根據(jù)請(qǐng)求頭名得到對(duì)應(yīng)的值  
  108.                String name = (String)names.nextElement();  
  109.                out.println(name+"="+request.getHeader(name)+"<br/>");  
  110.            }</pre><br>  
  111. 2.3獲取請(qǐng)求參數(shù)<p></p>  
  112. <p>String usernameValue = request.getParameter("username");//參數(shù)不存在為null<br>  
  113. </p>  
  114. <p></p><pre name="code" class="java">String names[] = request.getParameterValues("username");  
  115.         for(String name:names)  
  116.         {  
  117.             System.out.println(name);////得到某個(gè)請(qǐng)求參數(shù)的所有值  
  118.               
  119.         }</pre><pre name="code" class="java">             //獲取所有的請(qǐng)求參數(shù)名  
  120.   
  121.         Enumeration names = request.getParameterNames();  
  122.           while(names.hasMoreElements())  
  123.           {  //根據(jù)參數(shù)名得到值  
  124.               String name = (String)names.nextElement();  
  125.               System.out.println(name+"------->"+request.getParameter(name));  
  126.           }</pre><br>  
  127. 2.4 封裝到bean<br>  
  128. <pre name="code" class="java">public class Student {  
  129.    private String[] username;  
  130.    private String password;  
  131.       
  132.    public String[] getUsername() {  
  133.         return username;  
  134.     }  
  135.     public void setUsername(String[] username) {  
  136.         this.username = username;  
  137.     }  
  138.     public String getPassword() {  
  139.         return password;  
  140.     }  
  141.     public void setPassword(String password) {  
  142.         this.password = password;  
  143.     }  
  144.      
  145.      
  146. }  
  147.   
  148. </pre><pre name="code" class="java">//利用BeanUtils和 getParameterMap()將對(duì)象封裝到bean  
  149.     private void test5(HttpServletRequest request) {  
  150.         // TODO Auto-generated method stub  
  151.         Map map = request.getParameterMap();  
  152.         Student s = new Student();  
  153.         try {  
  154.             BeanUtils.populate(s, map);  
  155.         } catch (IllegalAccessException e) {  
  156.             // TODO Auto-generated catch block  
  157.             e.printStackTrace();  
  158.         } catch (InvocationTargetException e) {  
  159.             // TODO Auto-generated catch block  
  160.             e.printStackTrace();  
  161.         }  
  162.         String[] names = s.getUsername();  
  163.         System.out.println(names[0]);//aa  
  164.         System.out.println(names[1]);//bb  
  165.         System.out.println(s.getPassword());//123  
  166.     }//從客戶端傳過來的值username兩個(gè)(假如是aa和bb) 和一個(gè)password值(假如是123)</pre><br>  
  167. 2.5 得到請(qǐng)求正文<br>  
  168. <pre name="code" class="java">      //獲取請(qǐng)求正文  
  169.         InputStream in = request.getInputStream();  
  170.         byte[] buf =new byte[1024];  
  171.         int len = -1;  
  172.         while((len=in.read(buf))!=-1)  
  173.         {  
  174.             System.out.println(new String(buf,0,len));  
  175.         }</pre><br>  
  176. 2.6解決請(qǐng)求參數(shù)的中文亂碼<p></p>  
  177. <p> get方式:先按照原編碼得到原始字節(jié)碼,然后再重新編碼。如:name = new String(name.getBytes("ISO-8859-1"),"UTF-8");</p>  
  178. <p>post方式:客戶端是什么編碼,發(fā)送的請(qǐng)求數(shù)據(jù)就是什么編碼,根據(jù)客戶端的編碼,告知服務(wù)器編碼方式。</p>  
  179. <p>如:request.setCharacterEncoding("UTF-8");// 只適合POST請(qǐng)求方式</p>  
  180. <p><br>  
  181. </p>  
  182. <p>2.7請(qǐng)求轉(zhuǎn)發(fā) forward</p>  
  183. <p><span style="white-space:pre"></span>RequestDispatcher rd = request.getRequestDispatcher("path");//得到轉(zhuǎn)發(fā)器,path可以是相對(duì)路徑或者絕對(duì)路徑(因?yàn)槭欠?wù)器發(fā)起的)<br>  
  184. <span style="white-space:pre"></span>rd.forward(request, response);<br>  
  185. </p>  
  186. <p><img src="http://hi.csdn.net/attachment/201202/14/0_1329238218CM8E.gif" alt=""><br>  
  187. </p>  
  188. <p>2.8 包含include</p>  
  189. <p><span style="white-space:pre"></span>RequestDispatcher rd = request.getRequestDispatcher("/servlet/RequestDemo9");<br>  
  190. <span style="white-space:pre"></span>rd.include(request, response);<br>  
  191. </p>  
  192. <p><img src="http://hi.csdn.net/attachment/201202/14/0_1329238034rHHG.gif" alt=""><br>  
  193. </p>  
  194. <p>三 、路徑的寫法:<br>  
  195. a、絕對(duì)路徑寫法:ServeltContext都必須用絕對(duì)路徑?!?”開始 (如ServletContext.getRequestDispatcher("path") path必須是絕對(duì)路徑)<br>  
  196. b、相對(duì)路徑:其他情況都可以使用相對(duì)路徑,也可以使用絕對(duì)路徑<br>  
  197. <br>  
  198. <br>  
  199. c、在使用絕對(duì)路徑時(shí),要不要加"/"或者是項(xiàng)目名:如果是服務(wù)器調(diào)用的,不用加項(xiàng)目名,用“/”就可以代表了當(dāng)前應(yīng)用根目錄<br>  
  200. 如果是客戶端調(diào)用的,必須加上項(xiàng)目名<br>  
  201. <br>  
  202. <br>  
  203. 1、轉(zhuǎn)發(fā):request.getRequestDispather(String url)<br>  
  204. 絕對(duì)路徑:url    /servlet/ServletDemo<br>  
  205. 2、重定向:response.sendRedirect(String url)<br>  
  206. 絕對(duì)路徑:url    /day05/servlet/ServletDemo<br>  
  207. <br>  
  208. <br>  
  209. 3、超鏈接:<a href="url"/><br>  
  210. 絕對(duì)路徑:url  /day05/servlet/ServletDemo<br>  
  211. 4、類加載文件的路徑<br>  
  212. web應(yīng)用中只能用相對(duì)路徑,相對(duì)于classes目錄的<br>  
  213. 5、<fomr action="url"/><br>  
  214. 絕對(duì)路徑:/day05/servlet/ServletDemo<br>  
  215. 6、頁面分幀(frame)<br>  
  216. 絕對(duì)路徑:/day05/servlet/ServletDemo<br>  
  217. 7、ServletContext.getRealPath(url)<br>  
  218. 絕對(duì)路徑:url    /servlet/ServletDemo<br>  
  219. <br>  
  220. <br>  
  221. URLEncoder.encode("name""UTF-8")//解決文件下載名中文亂碼</p>  
  222. <p><br>  
  223. </p>  
  224. <p></p>  
  225.     
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Servlet 中文亂碼問題及解決方案剖析
java中Cookie被禁用后Session追蹤問題
攔截器
Java中轉(zhuǎn)發(fā)定義
JavaWeb學(xué)習(xí)篇之
JSP文件下載的解決方法
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服