javaee中request与response分不清以及请求转发

  1. import java.io.IOException;  
  2. import java.io.PrintWriter;  
  3.   
  4. import javax.servlet.ServletException;  
  5. import javax.servlet.http.HttpServlet;  
  6. import javax.servlet.http.HttpServletRequest;  
  7. import javax.servlet.http.HttpServletResponse;  
  8.   
  9. public class demo5 extends HttpServlet {  
  10.   
  11.     /** 
  12.      *路劲问题: 
  13.      *  首先给每个需要写路径的地方带上一个/,然后区分 
  14.      * 1)服务器行为 :则斜杠就代表是在项目下的地方,需要访问什么路劲便可以直接填写 
  15.      * 2)浏览器行为 :则斜杠就代表是在webapps下,但是不确定是在什么项目,所以路径需要先填写一个项目名 
  16.      */  
  17.     public void doGet(HttpServletRequest request, HttpServletResponse response)  
  18.             throws ServletException, IOException {  
  19.   
  20.         //请求转发,属于服务器行为  
  21.         request.getRequestDispatcher("/index.jsp").forward(request, response);  
  22.           
  23.         //响应重定向,属于浏览器行为  
  24.         response.sendRedirect("/Myitcast_day05/index.jsp");  
  25.           
  26.         //读取web应用的文件,属于服务器行为  
  27.         this.getServletContext().getRealPath("/index.jsp");  
  28.         this.getServletContext().getResourceAsStream("/index.jsp");  
  29.           
  30.         //超链接,属于在浏览器发送请求,是浏览器行为  
  31.         //<a href="/Myitcast_day05/index.jsp">点击</a>  
  32.           
  33.         //表单提交,也是在浏览器发送请求,是浏览器行为  
  34.         //<form action="/Myitcast_day05/index.jsp"></form>  
  35.           
  36.           
  37.     }  
  38.   
  39.       
  40.     public void doPost(HttpServletRequest request, HttpServletResponse response)  
  41.             throws ServletException, IOException {  
  42.   
  43.         doGet(request, response);  
  44.     }  
  45.   
  46. }  

二、根据在视图层显示字符数据

[java] view plain copy
  1. import java.io.IOException;  
  2. import java.io.OutputStream;  
  3. import java.io.PrintWriter;  
  4.   
  5. import javax.servlet.ServletException;  
  6. import javax.servlet.http.HttpServlet;  
  7. import javax.servlet.http.HttpServletRequest;  
  8. import javax.servlet.http.HttpServletResponse;  
  9.   
  10. public class demo6 extends HttpServlet {  
  11.   
  12.     /** 
  13.      *显示数据字符给视图  
  14.     */  
  15.         public void doGet(HttpServletRequest request, HttpServletResponse response)  
  16.             throws ServletException, IOException {  
  17.       
  18.             //告诉浏览器以utf-8的形式输出内容,但是浏览器的码表却没有改  
  19.             //所以一般是设置setContentType这个方法,这个方法便可以省略了  
  20.             response.setCharacterEncoding("UTF-8");  
  21.               
  22.             //输出的内容以html形式,text/html也是浏览器默认设置的形式  
  23.             response.setContentType("text/html;charset=utf-8");  
  24.               
  25.             //输出响应头信息content-type为text/html;charset=utf-8,这个方法是总的方法  
  26.             //当输出了setContentTy这个方法便不用输出这个  
  27.             response.setHeader("content-type","text/html;charset=utf-8");  
  28.               
  29.             //把输出的内容换成xml的形式输出  
  30.             response.setContentType("text/xml;charset=utf-8");  
  31.               
  32.               
  33.             //在浏览器输出内容的时候查询的码表是ISO-8859-1,不支持中文,所以需要转码表  
  34.             //PrintWriter out = response.getWriter();  
  35.             //out.write("暴龙");  
  36.               
  37.               
  38.             OutputStream out = response.getOutputStream();  
  39.             out.write("暴龙".getBytes());   //这个字节码的形式输出参照的码表是GBK,所以需要转换为utf-8来输出  
  40.             out.write("暴龙".getBytes("UTF-8"));  
  41.         }  
  42.   
  43.       
  44.         public void doPost(HttpServletRequest request, HttpServletResponse response)  
  45.             throws ServletException, IOException {  
  46.       
  47.         doGet(request,response);  
  48.         }  
  49.   
  50. }  

三、在视图层下载数据给用户

[java] view plain copy
  1. import java.io.File;  
  2. import java.io.FileInputStream;  
  3. import java.io.IOException;  
  4. import java.io.OutputStream;  
  5.   
  6. import javax.servlet.ServletException;  
  7. import javax.servlet.http.HttpServlet;  
  8. import javax.servlet.http.HttpServletRequest;  
  9. import javax.servlet.http.HttpServletResponse;  
  10.   
  11. public class demo7 extends HttpServlet {  
  12.   
  13.     /** 
  14.      * 在浏览器下载给用户 
  15.      */  
  16.     public void doGet(HttpServletRequest request, HttpServletResponse response)  
  17.             throws ServletException, IOException {  
  18.   
  19.         //读取服务器发布的内容,创建成一个文件  
  20.         String path = this.getServletContext().getRealPath("/attach/hibernate.zip");  
  21.         File file = new File(path);  
  22.           
  23.         //设置响应头content-disposition来设置下载的形式  
  24.         response.setHeader("content-disposition""attachment; filename="+file.getName());  
  25.           
  26.         //读文件并按照流的方式输出  
  27.         FileInputStream in = new FileInputStream(file);  
  28.           
  29.         OutputStream out = response.getOutputStream();  
  30.           
  31.         byte[] b = new byte[512];  
  32.         int length = 0;  
  33.         while((length=in.read())!=1){  
  34.             out.write(b, 0, length);  
  35.         }  
  36.           
  37.         out.close();  
  38.         in.close();  
  39.     }  
  40.   
  41.       
  42.     public void doPost(HttpServletRequest request, HttpServletResponse response)  
  43.             throws ServletException, IOException {  
  44.   
  45.         doGet(request, response);  
  46.     }  
  47.   
  48. }  

四、关于request和response的刷新转发重定向的问题

[java] view plain copy
  1. import java.io.IOException;  
  2.   
  3. import javax.servlet.ServletException;  
  4. import javax.servlet.http.HttpServlet;  
  5. import javax.servlet.http.HttpServletRequest;  
  6. import javax.servlet.http.HttpServletResponse;  
  7.   
  8. public class demo8 extends HttpServlet {  
  9.   
  10.     /** 
  11.      * The doGet method of the servlet. <br> 
  12.      * 
  13.      * This method is called when a form has its tag value method equals to get. 
  14.      *  
  15.      * @param request the request send by the client to the server 
  16.      * @param response the response send by the server to the client 
  17.      * @throws ServletException if an error occurred 
  18.      * @throws IOException if an error occurred 
  19.      */  
  20.     public void doGet(HttpServletRequest request, HttpServletResponse response)  
  21.             throws ServletException, IOException {  
  22.   
  23.         //设置响应头为refresh,当值为整数时候,表示当多少秒时该网页会自动刷新  
  24.         response.setHeader("refresh""3");  
  25.           
  26.         //当值为整数;url=xxxx,表示当多少秒后会刷新到url指定的页面  
  27.         response.setHeader("refresh""3;url=/Myitcast_day05/index.jsp");  
  28.           
  29.           
  30.         //设置响应头location,表示会转发到后面指定的url页面,常常配合状态码302  
  31.         response.setHeader("location""/Myitcast_day05/index.jsp");  
  32.         response.setStatus(302);  
  33.           
  34.           
  35.         //整个web应用只有一个servletContext对象,  
  36.         //放入ServletContet的数据常驻内存的,一般是不用这个属性的  
  37.         this.getServletContext().setAttribute("p""9");  
  38.   
  39.         //另一个域对象:HttpServletRequest对象  
  40.         //注意:只需要使用1次的数据,可以用request对象共享出去  
  41.         request.setAttribute("p""9");  
  42.           
  43.         //request的请求转发是可以得到共享数据的,但是response的重定向是不可以的  
  44.         request.getRequestDispatcher("/demo4").forward(request, response);  
  45.         response.sendRedirect("/Myitcast_day05/demo4");  
  46.           
  47.         //request能够得到在request域中存放的共享数据  
  48.         request.getAttribute("p");  
  49.           
  50.     }  
  51.   
  52.       
  53.     public void doPost(HttpServletRequest request, HttpServletResponse response)  
  54.             throws ServletException, IOException {  
  55.   
  56.         doGet(request, response);  
  57.     }  
  58.   
  59. }  

最后的总结:

responset的重定向和request的转发的区别:

请求重定向:

1)浏览器一共发出了2次请求

2)浏览器行为

3)地址栏会改变,变成了去到的地址

4)请求重定向不能通过request共享数据

javaee中request与response分不清以及请求转发

请求转发:

1)浏览器只发出1次请求

2)服务器行为 

3)地址栏不会改变的!

4)请求转发可以通过request共享数据

javaee中request与response分不清以及请求转发javaee中request与response分不清以及请求转发