Servlet: HttpServletResponse

发布时间 2023-06-14 07:05:32作者: ming1010

HttpServletResponse most includes response to file, response to image, response to redirect(most important).

1.response to file(I/O)

 1 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
 2        // String realPath = this.getServletContext().getRealPath("C:\\Users\\Mingy\\developer\\javaweb_02_servlet\\response\\src\\main\\resources\\1.jpg");
 3         String realPath = "C:\\Users\\Mingy\\developer\\javaweb_02_servlet\\response\\src\\main\\resources\\1.jpg";
 4         System.out.println("download path: "+ realPath);//get file path
 5         String fileName = realPath.substring(realPath.lastIndexOf("\\") + 1);//get file name
 6         resp.setHeader("Content-Disposition", "attachment; filename= "+fileName);//browser can support download the image
 7         FileInputStream inputStream = new FileInputStream(realPath);//get the inputStream of download file
 8         int len = 0;
 9         byte[] buffer = new byte[1024];//create buffer
10         ServletOutputStream outputStream = resp.getOutputStream();//get outputStream
11         while ((len = inputStream.read(buffer)) > 0){//read inputStream into buffer,and use outputStream to write the data to client
12             outputStream.write(buffer,0,len);
13         }
14         inputStream.close();
15         outputStream.close();
16     }

2.response to image (problem: browser can refresh per 3 second, but the image cannot be generated)

 1  protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
 2         //verification code
 3         resp.setHeader("refresh", "3");//是否是这里的问题,浏览器无法出现验证码
 4         BufferedImage image = new BufferedImage(80,20,BufferedImage.TYPE_INT_RGB);
 5         Graphics2D graphics = (Graphics2D) image.getGraphics();
 6         //set bgm color
 7         graphics.setColor(Color.white);
 8         graphics.fillRect(0,0,80,20);
 9         //write data into image
10         graphics.setColor(Color.blue);
11         graphics.setFont(new Font(null,Font.BOLD,20));
12         graphics.drawString(makeNum(),0,20);
13         //there is cache in website, set no cache.
14         resp.setContentType("image/jpeg");//let browser open it in image
15         resp.setDateHeader("expires", -1);
16         resp.setHeader("Cache-Control", "no-cache");
17         resp.setHeader("Pragma", "no-cache");
18     }

random method:

 1   private String makeNum(){
 2         Random random = new Random();
 3         String num = String.valueOf(random.nextInt(9999999));
 4         StringBuffer stringBuffer = new StringBuffer();
 5         for (int j = 0; j < 7 -num.length(); j++) {
 6             stringBuffer.append("0");
 7 
 8         }
 9         num = stringBuffer.toString() + num;
10         return num;
11     }

3.response to redirect

3.1 redirect

1 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
2         resp.sendRedirect("/response_war/img");//path must be "/response_war/img" can not be "/img" or "response_war/img"
3 
4     }

3.2 redirect to .jsp

1 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
2         String username = req.getParameter("username");
3         String password = req.getParameter("password");
4         System.out.println(username+" : "+password);
5         resp.sendRedirect("/response_war/success.jsp");
6     }
 1 <body>
 2 <h2>Hello, Ming</h2>
 3 <form action="success.jsp" method="get">
 4     username: <input type="text" name="username"><br>
 5     password: <input type="password" name="password"><br>
 6     <input type="submit">
 7 
 8 </form>
 9 
10 </body>