web服務器收到客戶端的HTTP請求,會針對每一次請求分別創建一個用于代表請求的request對象和代表響應的response對象。
1.要得到客戶機提交過來的數據,只需要找request對象就行了。
2、要向客戶機輸出數據,只需要找response對象就行了。
一、response對象
1.1向客戶端發送數據,以字節為單位(一定要先設置編碼方式,再輸出)
[java] view plain copy PRint?String data = “你好,中國1”; OutputStream out = response.getOutputStream(); out.write(data.getBytes());//查找本機默認編碼進行編碼
String data = "你好,中國1"; OutputStream out = response.getOutputStream(); out.write(data.getBytes());//查找本機默認編碼進行編碼[java] view plain copy print? String data = “你好,中國2”; OutputStream out = response.getOutputStream(); out.write(data.getBytes(”UTF-8”));//以UTF-8進行編碼 //告訴瀏覽器編碼方式 response.setHeader(”Content-Type”,“text/html;charset=UTF-8” );String data = "你好,中國2"; OutputStream out = response.getOutputStream(); out.write(data.getBytes("UTF-8"));//以UTF-8進行編碼 //告訴瀏覽器編碼方式 response.setHeader("Content-Type","text/html;charset=UTF-8" );[java] view plain copy print?String data = “你好,中國3”; OutputStream out = response.getOutputStream(); out.write(”<meta http-equiv=’Content-Type’ content=’text/html;charset=UTF-8’>”.getBytes());////通過meta標簽模擬請求頭 out.write(data.getBytes(”UTF-8”));//以UTF-8進行編碼String data = "你好,中國3"; OutputStream out = response.getOutputStream(); out.write("<meta http-equiv='Content-Type' content='text/html;charset=UTF-8'>".getBytes());////通過meta標簽模擬請求頭 out.write(data.getBytes("UTF-8"));//以UTF-8進行編碼[java] view plain copy print?String data = “你好,中國4”; OutputStream out = response.getOutputStream(); response.setContentType(”text/html;charset=UTF-8”); out.write(data.getBytes(”UTF-8”));//以UTF-8進行編碼String data = "你好,中國4"; OutputStream out = response.getOutputStream(); response.setContentType("text/html;charset=UTF-8"); out.write(data.getBytes("UTF-8"));//以UTF-8進行編碼[java] view plain copy print?[java] view plain copy print?response.setContentType(“text/html;charset=UTF-8”);response.setContentType("text/html;charset=UTF-8");等價于下面兩句代碼的效果:response.setCharacterEncoding(“UTF-8”);//更改服務器發送數據的默認編碼response.setHeader(“Content-Type”,”text/html;charset=UTF-8”);//還要通知客戶端解碼方式
[java] view plain copy print?int x=97; OutputStream out = response.getOutputStream(); out.write((x+”“).getBytes());////向客戶端發送數字int x=97; OutputStream out = response.getOutputStream(); out.write((x+"").getBytes());////向客戶端發送數字1.2 以字符為單位向客戶端發送數據String data = “你是誰?”; response.setCharacterEncoding(“UTF-8”); //設置編碼為UTF-8 response.setHeader(“Content-Type”, “text/html;charset=UTF-8”);//告訴客戶端編碼方式 // 第二種方法:相當于以上兩句代碼 //response.setContentType(“text/html;charset=UTF-8”); PrintWriter writer = response.getWriter();//默認編碼是iso-8859-1 創建該對象前必須設置好編碼方式 writer.write(data); System.out.println(response.getCharacterEncoding()); 1.3 讓客戶端以下載方式打開文件,解決中文文件名亂碼問題(URLEncoder.encode(name, “UTF-8”))
[java] view plain copy print?//得到文件的真實路徑 String realPath = getServletContext().getRealPath(”/files/漂亮美眉.jpg”); //獲取文件名 String name = realPath.substring(realPath.lastIndexOf(”//”)); //設置響應頭,通知客戶端以下載的方式打開文件 response.setHeader(”Content-Disposition”, “attachment;filename=”+URLEncoder.encode(name, “UTF-8”)); //構建輸入流 InputStream in = new FileInputStream(realPath); //輸出到客戶端的流 OutputStream out = response.getOutputStream(); int len = -1; byte buf[] = new byte[1024]; while((len=in.read(buf))!=-1) { out.write(buf, 0, len); } in.close();//得到文件的真實路徑 String realPath = getServletContext().getRealPath("/files/漂亮美眉.jpg"); //獲取文件名 String name = realPath.substring(realPath.lastIndexOf("http://")); //設置響應頭,通知客戶端以下載的方式打開文件 response.setHeader("Content-Disposition", "attachment;filename="+URLEncoder.encode(name, "UTF-8")); //構建輸入流 InputStream in = new FileInputStream(realPath); //輸出到客戶端的流 OutputStream out = response.getOutputStream(); int len = -1; byte buf[] = new byte[1024]; while((len=in.read(buf))!=-1) { out.write(buf, 0, len); } in.close();1.4 輸出隨機數字生成驗證碼圖片[java] view plain copy print? //設置不要緩存(3種方式,建議三種都設置,防止瀏覽器不支持) response.addHeader(”Pragma”, “no-cache”); response.setHeader(”Cache-Control”, “no-cache”); response.setHeader(”Expires”, “0”); //1.內存圖像 BufferedImage BufferedImage image = new BufferedImage(WIDTH,HEIGHT,BufferedImage.TYPE_INT_RGB); //2.創建畫筆 Graphics g = image.getGraphics(); //2.1畫邊框 g.setColor(Color.GRAY);//設置邊框顏色 g.drawRect(0, 0, WIDTH, HEIGHT);//畫矩形邊框 //2.2填充邊框 g.fillRect(1, 1, WIDTH-1, HEIGHT-1); //2.3輸出驗證隨機數字4個 Random r = new Random(); g.setColor(Color.BLUE); int x = 5; for(int i=0;i<4;i++) { g.setFont(new Font(“宋體”,Font.BOLD,20)); g.drawString(r.nextInt(10)+“”, x, 20); x+=30; } //2.4畫干擾線 g.setColor(Color.YELLOW); for(int i = 0;i<9;i++) { g.drawLine(r.nextInt(WIDTH),r.nextInt(HEIGHT), r.nextInt(WIDTH), r.nextInt(HEIGHT)); } //3 利用response輸出流輸出image ImageIO.write(image,”jpeg”,response.getOutputStream());<pre name=“code” class=“java”> //response.setHeader(“Expires”, (System.currentTimeMillis()+24*3600*10*1000)+”“);//緩存10天 response.setDateHeader(”Expires”,System.currentTimeMillis()+10*24*1000*60*60);</pre><br> <pre></pre> <p></p> <pre></pre> 1.5 控制客戶端刷新時間 <p></p> <p></p> <pre name=”code” class=“java”> //response.setHeader(“Refresh”, “5;URL=/day05/default.html”);//5秒后跳轉,url是跳轉的鏈接 response.getOutputStream().write(”<meta http-equiv=/”Refresh/” content=/”3;URL=/day05/login.html/”>”.getBytes());</pre>1.6 控制客戶端緩存時間 <p></p> <p></p> <pre name=”code” class=“java”> //response.setHeader(“Expires”, (System.currentTimeMillis()+24*3600*10*1000)+”“);//緩存10天 response.setDateHeader(”Expires”,System.currentTimeMillis()+10*24*1000*60*60);</pre><br> 1.7 用response實現請求重定向 <p></p> <p><img src=”http://s1.VeVb.com/20170221/ngwujgzxrds53.gif” alt=“”></p> <p>特點:地址欄會變,發送兩次請求,增加服務器負擔。</p> <p>實現方式:response.sendRedirect()<br> 實現原理:302狀態碼和location頭即可實現重定向<br> </p> <pre name=”code” class=“java”> //response.sendRedirect(“/day05/servlet/ResponseDemo5”);//絕對路徑 注意 // response.sendRedirect(“/servlet/ResponseDemo5”);//相對路徑這里用是錯誤的,因為重定向是由客戶端發起的 response.setStatus(307);//302 或者 307都可 response.setHeader(”location”, “http://localhost:8080/day05/servlet/ResponseDemo1”);</pre><br> 1.8 小細節 <p></p> <p></p> <pre name=”code” class=“java”> String s1 = “abc”; String s2 = ”def”; response.getOutputStream().write(s1.getBytes()); //response.getWriter().write(s2); //注:getOutputStream和getWriter這兩個方法互相排斥, //調用了其中的任何一個方法后,就不能再調用另一方法,會拋異常。 //java.lang.IllegalStateException: //getOutputStream() has already been called for this response</pre><br> <p><br> </p> <p>二、request(HttpServletRequest)對象</p> <p>2.1.get方法</p> <p></p><pre name=”code” class=“java”> String locale = request.getLocalName();//傳輸協議 String url = request.getRequestURL().toString();//請求的地址 String uri = request.getRequestURI();//沒有主機名的地址 String protocol = request.getProtocol();//獲取協議 String add = request.getRemoteAddr();//客戶端ip String host = request.getRemoteHost();//客戶端主機名 String port = request.getRemotePort()+”“;//客戶端端口號 String method = request.getMethod();//客戶端的請求方式 String localAddr = request.getLocalAddr();//獲取服務器地址 String username = request.getParameter(”username”);//地址后面?請求的參數 String serverPort = request.getServerPort()+”“;//服務器端口號 String serverName = request.getServerName();//服務器名</pre><br> 2.2 獲取客戶端請求頭<p></p> <p></p><pre name=”code” class=“java”> response.setContentType(“text/html;charset=UTF-8”); PrintWriter out = response.getWriter(); //獲取單個請求頭的值 out.write(request.getHeader(”Accept-Language”)+“<br/>”); //獲取單個請求頭多個值 Enumeration headers = request.getHeaders(”user-agent”); while(headers.hasMoreElements()) { out.println(headers.nextElement()+”<hr/>”); } //獲取所有的請求頭名 Enumeration names = request.getHeaderNames(); while(names.hasMoreElements()) { //根據請求頭名得到對應的值 String name = (String)names.nextElement(); out.println(name+”=”+request.getHeader(name)+“<br/>”); }</pre><br> 2.3獲取請求參數<p></p> <p>String usernameValue = request.getParameter(”username”);//參數不存在為null<br> </p> <p></p><pre name=”code” class=“java”>String names[] = request.getParameterValues(“username”); for(String name:names) { System.out.println(name);////得到某個請求參數的所有值 }</pre><pre name=”code” class=“java”> //獲取所有的請求參數名 Enumeration names = request.getParameterNames(); while(names.hasMoreElements()) { //根據參數名得到值 String name = (String)names.nextElement(); System.out.println(name+”——->”+request.getParameter(name)); }</pre><br> 2.4 封裝到bean<br> <pre name=”code” class=“java”>public class Student { private String[] username; private String passWord; public String[] getUsername() { return username; } public void setUsername(String[] username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } } </pre><pre name=”code” class=“java”>//利用BeanUtils和 getParameterMap()將對象封裝到bean private void test5(HttpServletRequest request) { // TODO Auto-generated method stub Map map = request.getParameterMap(); Student s = new Student(); try { BeanUtils.populate(s, map); } catch (IllegalaccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } String[] names = s.getUsername(); System.out.println(names[0]);//aa System.out.println(names[1]);//bb System.out.println(s.getPassword());//123 }//從客戶端傳過來的值username兩個(假如是aa和bb) 和一個password值(假如是123)</pre><br> 2.5 得到請求正文<br> <pre name=”code” class=“java”> //獲取請求正文 InputStream in = request.getInputStream(); byte[] buf =new byte[1024]; int len = -1; while((len=in.read(buf))!=-1) { System.out.println(new String(buf,0,len)); }</pre><br> 2.6解決請求參數的中文亂碼<p></p> <p> get方式:先按照原編碼得到原始字節碼,然后再重新編碼。如:name = new String(name.getBytes(“ISO-8859-1”),“UTF-8”);</p> <p>post方式:客戶端是什么編碼,發送的請求數據就是什么編碼,根據客戶端的編碼,告知服務器編碼方式。</p> <p>如:request.setCharacterEncoding(”UTF-8”);// 只適合POST請求方式</p> <p><br> </p> <p>2.7請求轉發 forward</p> <p><span style=”white-space:pre”></span>RequestDispatcher rd = request.getRequestDispatcher(“path”);//得到轉發器,path可以是相對路徑或者絕對路徑(因為是服務器發起的)<br> <span style=”white-space:pre”></span>rd.forward(request, response);<br> </p> <p><img src=”http://s1.VeVb.com/20170221/5nqhuq3ypfu53.gif” alt=“”><br> </p> <p>2.8 包含include</p> <p><span style=”white-space:pre”></span>RequestDispatcher rd = request.getRequestDispatcher(“/servlet/RequestDemo9”);<br> <span style=”white-space:pre”></span>rd.include(request, response);<br> </p> <p><img src=”http://s1.VeVb.com/20170221/wpjzchfijqx53.gif” alt=“”><br> </p> <p>三 、路徑的寫法:<br> a、絕對路徑寫法:ServeltContext都必須用絕對路徑。“/”開始 (如ServletContext.getRequestDispatcher(”path”) path必須是絕對路徑)<br> b、相對路徑:其他情況都可以使用相對路徑,也可以使用絕對路徑<br> <br> <br> c、在使用絕對路徑時,要不要加”/”或者是項目名:如果是服務器調用的,不用加項目名,用“/”就可以代表了當前應用根目錄<br> 如果是客戶端調用的,必須加上項目名<br> <br> <br> 1、轉發:request.getRequestDispather(String url)<br> 絕對路徑:url /servlet/ServletDemo<br> 2、重定向:response.sendRedirect(String url)<br> 絕對路徑:url /day05/servlet/ServletDemo<br> <br> <br> 3、超鏈接:<a href=“url”/><br> 絕對路徑:url /day05/servlet/ServletDemo<br> 4、類加載文件的路徑<br> web應用中只能用相對路徑,相對于classes目錄的<br> 5、<fomr action=“url”/><br> 絕對路徑:/day05/servlet/ServletDemo<br> 6、頁面分幀(frame)<br> 絕對路徑:/day05/servlet/ServletDemo<br> 7、ServletContext.getRealPath(url)<br> 絕對路徑:url /servlet/ServletDemo<br> <br> <br> URLEncoder.encode(”name”, “UTF-8”)//解決文件下載名中文亂碼</p> <p><br> </p> <p></p>//設置不要緩存(3種方式,建議三種都設置,防止瀏覽器不支持) response.addHeader("Pragma", "no-cache"); response.setHeader("Cache-Control", "no-cache"); response.setHeader("Expires", "0"); //1.內存圖像 BufferedImage BufferedImage image = new BufferedImage(WIDTH,HEIGHT,BufferedImage.TYPE_INT_RGB); //2.創建畫筆 Graphics g = image.getGraphics(); //2.1畫邊框 g.setColor(Color.GRAY);//設置邊框顏色 g.drawRect(0, 0, WIDTH, HEIGHT);//畫矩形邊框 //2.2填充邊框 g.fillRect(1, 1, WIDTH-1, HEIGHT-1); //2.3輸出驗證隨機數字4個 Random r = new Random(); g.setColor(Color.BLUE); int x = 5; for(int i=0;i<4;i++) { g.setFont(new Font("宋體",Font.BOLD,20)); g.drawString(r.nextInt(10)+"", x, 20); x+=30; } //2.4畫干擾線 g.setColor(Color.YELLOW); for(int i = 0;i<9;i++) { g.drawLine(r.nextInt(WIDTH),r.nextInt(HEIGHT), r.nextInt(WIDTH), r.nextInt(HEIGHT)); } //3 利用response輸出流輸出image ImageIO.write(image,"jpeg",response.getOutputStream());[java] view plain copy print?//response.setHeader("Expires", (System.currentTimeMillis()+24*3600*10*1000)+"");//緩存10天 response.setDateHeader("Expires",System.currentTimeMillis()+10*24*1000*60*60);//response.setHeader("Expires", (System.currentTimeMillis()+24*3600*10*1000)+"");//緩存10天 response.setDateHeader("Expires",System.currentTimeMillis()+10*24*1000*60*60);1.5 控制客戶端刷新時間[java] view plain copy print?//response.setHeader(“Refresh”, “5;URL=/day05/default.html”);//5秒后跳轉,url是跳轉的鏈接 response.getOutputStream().write(”<meta http-equiv=/”Refresh/” content=/”3;URL=/day05/login.html/”>”.getBytes());//response.setHeader("Refresh", "5;URL=/day05/default.html");//5秒后跳轉,url是跳轉的鏈接 response.getOutputStream().write("<meta http-equiv=/"Refresh/" content=/"3;URL=/day05/login.html/">".getBytes());1.6 控制客戶端緩存時間[java] view plain copy print?//response.setHeader(“Expires”, (System.currentTimeMillis()+24*3600*10*1000)+”“);//緩存10天 response.setDateHeader(”Expires”,System.currentTimeMillis()+10*24*1000*60*60);//response.setHeader("Expires", (System.currentTimeMillis()+24*3600*10*1000)+"");//緩存10天 response.setDateHeader("Expires",System.currentTimeMillis()+10*24*1000*60*60);1.7 用response實現請求重定向
特點:地址欄會變,發送兩次請求,增加服務器負擔。
實現方式:response.sendRedirect()實現原理:302狀態碼和location頭即可實現重定向
[java] view plain copy print? //response.sendRedirect(“/day05/servlet/ResponseDemo5”);//絕對路徑 // response.sendRedirect(“/servlet/ResponseDemo5”);//相對路徑這里用是錯誤的,因為重定向是由客戶端發起的 response.setStatus(307);//302 或者 307都可 response.setHeader(”location”, “http://localhost:8080/day05/servlet/ResponseDemo1”);//response.sendRedirect("/day05/servlet/ResponseDemo5");//絕對路徑 注意 // response.sendRedirect("/servlet/ResponseDemo5");//相對路徑這里用是錯誤的,因為重定向是由客戶端發起的 response.setStatus(307);//302 或者 307都可 response.setHeader("location", "http://localhost:8080/day05/servlet/ResponseDemo1");1.8 小細節[java] view plain copy print?String s1 = “abc”; String s2 = ”def”; response.getOutputStream().write(s1.getBytes()); //response.getWriter().write(s2); //注:getOutputStream和getWriter這兩個方法互相排斥, //調用了其中的任何一個方法后,就不能再調用另一方法,會拋異常。 //java.lang.IllegalStateException: //getOutputStream() has already been called for this responseString s1 = "abc"; String s2 = "def"; response.getOutputStream().write(s1.getBytes()); //response.getWriter().write(s2); //注:getOutputStream和getWriter這兩個方法互相排斥, //調用了其中的任何一個方法后,就不能再調用另一方法,會拋異常。 //java.lang.IllegalStateException: //getOutputStream() has already been called for this response二、request(HttpServletRequest)對象
2.1.get方法
[java] view plain copy print?String locale = request.getLocalName();//傳輸協議 String url = request.getRequestURL().toString();//請求的地址 String uri = request.getRequestURI();//沒有主機名的地址 String protocol = request.getProtocol();//獲取協議 String add = request.getRemoteAddr();//客戶端IP String host = request.getRemoteHost();//客戶端主機名 String port = request.getRemotePort()+”“;//客戶端端口號 String method = request.getMethod();//客戶端的請求方式 String localAddr = request.getLocalAddr();//獲取服務器地址 String username = request.getParameter(”username”);//地址后面?請求的參數 String serverPort = request.getServerPort()+”“;//服務器端口號 String serverName = request.getServerName();//服務器名String locale = request.getLocalName();//傳輸協議 String url = request.getRequestURL().toString();//請求的地址 String uri = request.getRequestURI();//沒有主機名的地址 String protocol = request.getProtocol();//獲取協議 String add = request.getRemoteAddr();//客戶端IP String host = request.getRemoteHost();//客戶端主機名 String port = request.getRemotePort()+"";//客戶端端口號 String method = request.getMethod();//客戶端的請求方式 String localAddr = request.getLocalAddr();//獲取服務器地址 String username = request.getParameter("username");//地址后面?請求的參數 String serverPort = request.getServerPort()+"";//服務器端口號 String serverName = request.getServerName();//服務器名2.2 獲取客戶端請求頭[java] view plain copy print?response.setContentType(“text/html;charset=UTF-8”); PrintWriter out = response.getWriter(); //獲取單個請求頭的值 out.write(request.getHeader(”Accept-Language”)+“<br/>”); //獲取單個請求頭多個值 Enumeration headers = request.getHeaders(”user-agent”); while(headers.hasMoreElements()) { out.println(headers.nextElement()+”<hr/>”); } //獲取所有的請求頭名 Enumeration names = request.getHeaderNames(); while(names.hasMoreElements()) { //根據請求頭名得到對應的值 String name = (String)names.nextElement(); out.println(name+”=”+request.getHeader(name)+“<br/>”); }response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); //獲取單個請求頭的值 out.write(request.getHeader("Accept-Language")+"<br/>"); //獲取單個請求頭多個值 Enumeration headers = request.getHeaders("user-agent"); while(headers.hasMoreElements()) { out.println(headers.nextElement()+"<hr/>"); } //獲取所有的請求頭名 Enumeration names = request.getHeaderNames(); while(names.hasMoreElements()) { //根據請求頭名得到對應的值 String name = (String)names.nextElement(); out.println(name+"="+request.getHeader(name)+"<br/>"); }2.3獲取請求參數String usernameValue = request.getParameter(“username”);//參數不存在為null
[java] view plain copy print?String names[] = request.getParameterValues(“username”); for(String name:names) { System.out.println(name);////得到某個請求參數的所有值 }String names[] = request.getParameterValues("username"); for(String name:names) { System.out.println(name);////得到某個請求參數的所有值 }[java] view plain copy print? //獲取所有的請求參數名 ion names = request.getParameterNames(); while(names.hasMoreElements()) { //根據參數名得到值 String name = (String)names.nextElement(); System.out.println(name+”——->”+request.getParameter(name)); }//獲取所有的請求參數名 Enumeration names = request.getParameterNames(); while(names.hasMoreElements()) { //根據參數名得到值 String name = (String)names.nextElement(); System.out.println(name+"------->"+request.getParameter(name)); }2.4 封裝到bean[java] view plain copy print?public class Student { private String[] username; private String password; public String[] getUsername() { return username; } public void setUsername(String[] username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }public class Student { private String[] username; private String password; public String[] getUsername() { return username; } public void setUsername(String[] username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; }}[java] view plain copy print?//利用BeanUtils和 getParameterMap()將對象封裝到bean private void test5(HttpServletRequest request) { // TODO Auto-generated method stub Map map = request.getParameterMap(); Student s = new Student(); try { BeanUtils.populate(s, map); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } String[] names = s.getUsername(); System.out.println(names[0]);//aa System.out.println(names[1]);//bb System.out.println(s.getPassword());//123 }//從客戶端傳過來的值username兩個(假如是aa和bb) 和一個password值(假如是123)//利用BeanUtils和 getParameterMap()將對象封裝到bean private void test5(HttpServletRequest request) { // TODO Auto-generated method stub Map map = request.getParameterMap(); Student s = new Student(); try { BeanUtils.populate(s, map); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } String[] names = s.getUsername(); System.out.println(names[0]);//aa System.out.println(names[1]);//bb System.out.println(s.getPassword());//123 }//從客戶端傳過來的值username兩個(假如是aa和bb) 和一個password值(假如是123)2.5 得到請求正文[java] view plain copy print?//獲取請求正文 InputStream in = request.getInputStream(); byte[] buf =new byte[1024]; int len = -1; while((len=in.read(buf))!=-1) { System.out.println(new String(buf,0,len)); }//獲取請求正文 InputStream in = request.getInputStream(); byte[] buf =new byte[1024]; int len = -1; while((len=in.read(buf))!=-1) { System.out.println(new String(buf,0,len)); }2.6解決請求參數的中文亂碼get方式:先按照原編碼得到原始字節碼,然后再重新編碼。如:name = new String(name.getBytes(“ISO-8859-1”),”UTF-8”);
post方式:客戶端是什么編碼,發送的請求數據就是什么編碼,根據客戶端的編碼,告知服務器編碼方式。
如:request.setCharacterEncoding(“UTF-8”);// 只適合POST請求方式
2.7請求轉發 forward
RequestDispatcher rd = request.getRequestDispatcher(“path”);//得到轉發器,path可以是相對路徑或者絕對路徑(因為是服務器發起的)rd.forward(request, response);
2.8 包含include
RequestDispatcher rd = request.getRequestDispatcher(“/servlet/RequestDemo9”);rd.include(request, response);
三 、路徑的寫法:a、絕對路徑寫法:ServeltContext都必須用絕對路徑?!?”開始 (如ServletContext.getRequestDispatcher(“path”) path必須是絕對路徑)b、相對路徑:其他情況都可以使用相對路徑,也可以使用絕對路徑c、在使用絕對路徑時,要不要加”/”或者是項目名:如果是服務器調用的,不用加項目名,用“/”就可以代表了當前應用根目錄如果是客戶端調用的,必須加上項目名1、轉發:request.getRequestDispather(String url)絕對路徑:url /servlet/ServletDemo2、重定向:response.sendRedirect(String url)絕對路徑:url /day05/servlet/ServletDemo3、超鏈接:<a href=”url”/>絕對路徑:url /day05/servlet/ServletDemo4、類加載文件的路徑web應用中只能用相對路徑,相對于classes目錄的5、<fomr action=”url”/>絕對路徑:/day05/servlet/ServletDemo6、頁面分幀(frame)絕對路徑:/day05/servlet/ServletDemo7、ServletContext.getRealPath(url)絕對路徑:url /servlet/ServletDemoURLEncoder.encode(“name”, “UTF-8”)//解決文件下載名中文亂碼
新聞熱點
疑難解答