关于HttpServletResponse的理解2

149 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路

阅读本文前,请先阅读:关于HttpServletResponse的理解1

3、验证码功能

     public class ImageServlet extends HttpServlet {
         @Override
         protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
             // 让浏览器3秒自动刷新一次
             resp.setHeader("refresh","3");
     
             //在内存中创建一个图片
             BufferedImage image = new BufferedImage(80, 20, BufferedImage.TYPE_INT_RGB);
             //得到图片
             Graphics2D g = (Graphics2D) image.getGraphics();//笔
             //设置图片的背景颜色
             g.setColor(Color.white);
             g.fillRect(0,0,80,20);
             //给图片写数据
             g.setColor(Color.BLUE);
             g.setFont(new Font(null,Font.BOLD,20));
             g.drawString(makeNum(),0,20);
     ​
             //告诉浏览器,这个请求用图片的方式打开
             resp.setContentType("image/jpeg");
             //网站存在缓存
             resp.setDateHeader("expires",-1);
             resp.setHeader("Cache-Control","no-cache");
             resp.setHeader("Pragma","no-cache");
     ​
             //把图片写给浏览器
             ImageIO.write(image,"jpg",resp.getOutputStream());
     ​
         }
     ​
         //生成随机数
         private String makeNum(){
             Random random = new Random();
             String num = random.nextInt(9999999) + "";
             StringBuffer sb = new StringBuffer();
             for (int i = 0; i < 7-num.length(); i++) {
                 sb.append("0");
             }
             num  = sb.toString()+num;
             return num;
         }
         @Override
         protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
             doGet(req, resp);
         }
     ​
     }

4、实现重定向

image.png 一个web资源收到客户端某同学的请求后,班长的服务器会通知某同学去访问另外一个web资源老师,这个过程叫做重定向。

常见场景:

用户登录

 void sendRedirect(String var1) throws IOException;

测试

 public class RedirectServlet extends HttpServlet {
     @Override
     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
          resp.sendRedirect("/response01_war/img");//重定向
     }

重定向和转发的区别:

相同点

  • 页面都会实现跳转

不同点

  • 请求转发时,url不会发生变化
  • 重定向时,url地址栏会发生变化

image.png

index.jsp:

 <html>
 <body>
 <h2>Hello World!</h2>
 <form action="${pageContext.request.contextPath}/login" method="get">
     用户名:<input type="text" name="username"><br>
     密码:<input type="password" name="pwd"><br>
     <input type="submit">
 </form>
 </body>
 </html>
 public class RequestTest extends HttpServlet {
     @Override
     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
         //处理请求
         String username = req.getParameter("username");
         String pwd = req.getParameter("pwd");
 ​
         System.out.println(username+ ":" +pwd);
 ​
         //重定向的时候一定要路径问题,否则就会404
         resp.sendRedirect("/res/success.jsp");
     }
>作者:老6\
>qq664474618\
>欢迎一起起交流学习