• 入门JavaWeb之 Response 验证码和重定向


    Response 写验证码

    1. package com.demo.response;
    2. import javax.imageio.ImageIO;
    3. import javax.servlet.ServletException;
    4. import javax.servlet.http.HttpServlet;
    5. import javax.servlet.http.HttpServletRequest;
    6. import javax.servlet.http.HttpServletResponse;
    7. import java.awt.*;
    8. import java.awt.image.BufferedImage;
    9. import java.awt.image.RenderedImage;
    10. import java.io.IOException;
    11. import java.nio.IntBuffer;
    12. import java.util.Random;
    13. public class Image extends HttpServlet {
    14. @Override
    15. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    16. //浏览器5s刷新
    17. resp.setHeader("refresh","5");
    18. //在内存中创建一个图片,设置宽高颜色
    19. BufferedImage bufferedImage = new BufferedImage(80,20,BufferedImage.TYPE_INT_RGB);
    20. //得到图片 Graphics 是一支笔
    21. Graphics2D graphics = (Graphics2D) bufferedImage.getGraphics();
    22. //设置图片的背景颜色
    23. graphics.setColor(Color.black);
    24. graphics.fillRect(0,0,80,20); //填充
    25. //给图片写数据
    26. graphics.setColor(Color.white);
    27. graphics.setFont(new Font(null,Font.ITALIC,20));
    28. graphics.drawString(num(),0,20);
    29. //告诉浏览器,这个请求用图片的方式打开
    30. resp.setContentType("image/jpg");
    31. //网站存在缓存,不让浏览器缓存
    32. resp.setDateHeader("expores",-1);
    33. resp.setHeader("Cache-Control","no-cache");
    34. resp.setHeader("Pragma","no-cache");
    35. //把图片写给浏览器
    36. ImageIO.write(bufferedImage,"jpg",resp.getOutputStream());
    37. }
    38. //生成随机数
    39. private String num(){
    40. Random random = new Random();
    41. String num = random.nextInt(9999)+"";
    42. StringBuffer stringBuffer = new StringBuffer();
    43. for (int i = 0; i < 4-num.length(); i++) {
    44. stringBuffer.append("0"); //不足用0填充数字
    45. }
    46. return stringBuffer.toString() + num;
    47. }
    48. @Override
    49. protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    50. doGet(req, resp);
    51. }
    52. }

    记得先注册后运行

    1. <servlet>
    2. <servlet-name>imgservlet-name>
    3. <servlet-class>com.demo.response.Imageservlet-class>
    4. servlet>
    5. <servlet-mapping>
    6. <servlet-name>imgservlet-name>
    7. <url-pattern>/imgurl-pattern>
    8. servlet-mapping>

    Response 重定向:

    一个 web 资源接收到客户端的请求后,它会通知客户端去访问另一个 web 资源,这个过程叫做重定向

    sendRedirect 重定向

    1. public class Redirect extends HttpServlet {
    2. @Override
    3. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    4. //resp.sendRedirect("/response/index.jsp");
    5. resp.sendRedirect("/response/img"); //重定向
    6. }

    注意路径前要加自己命名的路径

    web.xml 注册:

    1. <servlet>
    2. <servlet-name>reservlet-name>
    3. <servlet-class>com.demo.response.Redirectservlet-class>
    4. servlet>
    5. <servlet-mapping>
    6. <servlet-name>reservlet-name>
    7. <url-pattern>/reurl-pattern>
    8. servlet-mapping>

    浏览器输入后缀,将会跳转到另一个页面,地址栏改变,实现重定向

    实现原理:

    1. resp.setHeader("Location","/response/img");
    2. resp.setStatus(302); //302重定向

    一个响应头 Location、一个状态码 302

    重定向和转发的区别:

    相同点:页面都会实现跳转

    不同点:

    1.请求转发的时候,url 不会变化

    2.重定向时,url 地址栏会发生变化

    写个简单的提交重定向

    修改 index.jsp

    1. <%-- ${pageContext.request.contextPath}代表当前的项目 --%>
    2. <form action = "${pageContext.request.contextPath}/login" method = "get">
    3. username: <input type = "text" name = "username"> <br>
    4. password: <input type = "password" name = "password"> <br>
    5. <input type = "submit">
    6. form>

    代码如下:

    1. package com.demo.response;
    2. import javax.servlet.ServletException;
    3. import javax.servlet.http.HttpServlet;
    4. import javax.servlet.http.HttpServletRequest;
    5. import javax.servlet.http.HttpServletResponse;
    6. import java.io.IOException;
    7. public class Request extends HttpServlet {
    8. @Override
    9. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    10. //处理请求
    11. String username = req.getParameter("username");
    12. String password = req.getParameter("password");
    13. resp.sendRedirect("/response/success.jsp");
    14. }
    15. @Override
    16. protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    17. doGet(req, resp);
    18. }
    19. }

    再写个跳转的 success.jsp

    web.xml 注册:

    1. <servlet>
    2. <servlet-name>loginservlet-name>
    3. <servlet-class>com.demo.response.Requestservlet-class>
    4. servlet>
    5. <servlet-mapping>
    6. <servlet-name>loginservlet-name>
    7. <url-pattern>/loginurl-pattern>
    8. servlet-mapping>

    注意 的路径名与 index.jsp 里的 ${pageContext.request.contextPath} 保持一致

    运行,提交后进入 success 页面

  • 相关阅读:
    HuggingFace 机器学习总监、Grafana Labs 团队与你相约 KubeCon 2023!
    Python3实用安装教程
    漏洞复现-CVE-2022-1388命令执行F5 BIG-IP iControl REST
    观点:DeFi和区块链游戏 两者中谁才是杀手级应用?
    RabbitMQ
    XTTS系列之四:迷迷糊糊的并行度
    MySQL数据库——存储过程-if条件判断、参数、case(介绍、用法、案例)
    Day19—Scrapy框架高级特性
    软件测试面试题:缺陷记录应包含的内容?
    umich cv-2-2
  • 原文地址:https://blog.csdn.net/m0_58838332/article/details/139901451