Response:Response表明響應,響應消息中的狀態碼、響應頭、實體內容均可以由它進行操做html
response.setContentType("text/html;charset=utf-8") ···解決中文亂碼 response.getOutputStream().write(···); response.getWriter.wtite(···);
對於一次請求,Response的getOutputStream方法和getWriter方法是互斥,只能調用其一,特別注意forward後也不要違反這一規則web
response.setHeader("Content-Disposition","attachment;filename=1.jpg"/"attachment;filename="+URLEncoder.encode("圖片.jpg", "utf-8")···將下載文件名改成中文); response.setHeader("Content-Disposition", InputStream in = new FileInputStream(this.getServletContext().getRealPath("1.jpg")); OutputStream out = response.getOutputStream(); byte[]bs = new byte[1024]; int i = 0; while((i=in.read(bs))!=-1){ out.write(bs,0,i); } in.close(); //將下載後的文件名改成中文 response.setHeader("Content-Disposition","attachment;filename="+URLEncoder.encode("圖片.jpg", "utf-8")); response.setHeader("Content-Disposition", InputStream in = new FileInputStream(this.getServletContext().getRealPath("1.jpg")); OutputStream out = response.getOutputStream(); byte[]bs = new byte[1024]; int i = 0; while((i=in.read(bs))!=-1){ out.write(bs,0,i); } in.close();
response.getWriter().write(new Date().toLocaleString()); response.setHeader("Refresh", "1");
response.setContentType("text/html;charset=utf-8"); response.getWriter().write("恭喜您註冊成功!3秒後回到主頁....."); response.setHeader("refresh", "3;url=/Day04/index.jsp");
<html> <head> <meta http-equiv="Refresh" content="3;url=/Day04/index.jsp"> </head> <body> 恭喜您註冊成功!3秒後回到主頁...... </body> </html>
response.setIntHeader("Expires", -1); response.setHeader("Cache-Control", "no-cache"); response.setHeader("Pragma", "no-cache");
response.setDateHeader("Expires", System.currentTimeMillis()+想緩存的時間);
若是想緩存的時間超出int的範圍,可轉化爲long型來計算,如:「1000*3600*24*30」
超出了int的範圍,因此須要寫成「1000l*3600*24*30」
。segmentfault
response.sendRedirect("地址");
實現驗證碼(https://segmentfault.com/a/11...瀏覽器
Request:Request表明請求對象,其中封裝了對請求中具備請求行、請求頭、實體內容的操做的方法緩存
String url = request.getRequestURL().toString(); System.out.println(url);
String uri = request.getRequestURI(); System.out.println(uri);
String qStr = request.getQueryString(); System.out.println(qSt):
String ip = request.getRemoteAddr(); System.out.println(ip);
String method = request.getMethod(); System.out.println(method);
String name = request.getContextPath(); System.out.println(name);
//獲取某個請求頭的方法 String value = request.getHeader("某個請求頭"); System.out.println(value); //獲取全部請求頭的方法 Enumeration<String> enumeration = request.getHeaderNames(); while(enumeration.hasMoreElements()){ String name = enumeration.nextElement(); String value = request.getHeader(name); System.out.println(name+":"+value); } 得到具體類型客戶機請求頭 getIntHeader(name)方法 --- int getDateHeader(name)方法 --- long(日期對應毫秒)
getParameter(name) --- String 經過name得到值
getParameterValues --- String[ ] 經過name得到多值 checkbox
getParameterNames --- Enumeration<String> 得到全部name
getParameterMap --- Map<String,String[ ]> key :name value: 多值服務器
使用的HTML文件: <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> </head> <body> <h1>POST提交</h1><hr> <form action="/Day04/servlet/ParamServlet" method="POST"> 姓名:<input type="text" name="username"/> 地址:<input type="text" name="addr"/> <input type="submit" value="提交" /> </form> <h1>GET提交</h1><hr> <form action="/Day04/servlet/ParamServlet" method="GET"> 姓名:<input type="text" name="username"/> 地址:<input type="text" name="addr"/> <input type="submit" value="提交" /> </form> </body> </html> //獲取客戶端提交的usename的值 String username = request.getParameter("username"); System.out.println(username); //遍歷全部的請求參數並打印出來 Enumeration<String> enumeration = request.getParameterNames(); while(enumeration.hasMoreElements()){ String name = enumeration.nextElement(); String value = request.getParameter(name); System.out.println(name+":"+value); }
若是提交內容有中文從而致使亂碼:jsp
對於POST提交,能夠設置request.setCharacterEncoding("utf-8")來能夠解決亂碼ui
request.setCharacterEncoding("utf-8"); String username = request.getParameter("username"); System.out.println(username);
對於GET提交的亂碼,只能手動的進行編解碼從而解決亂碼問題this
String username = request.getParameter("username"); username = new String(username.getBytes("iso8859-1"),"utf-8"); System.out.println(username);
做用範圍:整個請求鏈上url
生命週期:當服務器收到一個請求,建立出表明請求的request對象,request開始。當請求結束,服務器銷燬表明請求的request對象,request域結束.
做用:在整個請求鏈範圍內共享數據,一般咱們在Servlet中處理好的數據會存入request域後請求轉發到jsp頁面來進行展現
Demo3: public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { request.setAttribute("banana", "yellow banana"); this.getServletContext().getRequestDispatcher("/servlet/Demo4").forward(request, response); Demo4: String value = (String)request.getAttribute("banana"); System.out.println(value); 瀏覽器訪問Demo3,而後Eclipse打印的結果爲: yellow banana
request.getRequestDispatcher("").forward(request,response);
Demo5: request.getRequestDispatcher("/servlet/Demo6").forward(request, response); Demo6: response.getWriter().write("from demo6...."); 訪問Demo5,瀏覽器上打印結果: from demo6
1)一個Servlet裏兩次請求轉發也是不能夠的,一次請求交給兩人處理天然也是不行
2)RequestDispatcher.forward方法只能將請求轉發給同一個WEB應用中的組件;而HttpServletResponse.sendRedirect 方法還能夠重定向到同一個站點上的其餘應用程序中的資源,甚至是使用絕對URL重定向到其餘站點的資源。
request.getRequestDispatcher("").include(request,response);
Demo7: response.getWriter().write("from demo7"); request.getRequestDispatcher("/servlet/Demo8").include(request, response); Demo8: response.getWriter().write("from demo8"); 訪問Demo7,瀏覽器上打印結果: from demo7from demo8
被包含的Servlet程序不能改變響應消息的狀態碼和響應頭,若是它裏面存在這樣的語句,這些語句的執行結果將被忽略
1.絕對路徑:以/開頭的路徑就叫作絕對路徑,絕對路徑在相對於的路徑上直接拼接獲得最終的路徑。
2.相對路徑:不以/開頭的路徑就叫作相對路徑,相對路徑基於當前所在的路徑計算的到最終的路徑。
1)若是路徑是給瀏覽器用的,這個路徑相對於虛擬主機,因此須要寫上web應用的名稱(最好用request.getContextPath()代替,以避免web名稱有變化)。(前四個)
2)若是路徑是個服務器用的,這個路徑相對於web應用,因此能夠省寫web應用的名稱。
<a href="/Day04/....."> <form action="/Day04/..."> <img src="/Day04/...."> response.setHeader("refresh","3;url=/Day04/..."); response.sendRedirect("/Day04/..."); request.getRequestDispathce("/index.jsp").forward(): request.getRequestDispathce("/index.jsp").include();
根據原理,具體問題具體分析
servletContext.getRealPath("config.properties");//--給一個相對於web應用目錄的路徑 classLoader.getResource("../../config.properties");//--給一個相對於類加載目錄的路徑 File file = new File("config.properties");//--相對於程序的啓動目錄 new InputStream("config.properties");//--相對於程序的啓動目錄