javaweb/4/2

HttpServletResponse

常见应用

  • 向浏览器输出消息
  • 下载文件

验证码

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //如何让浏览器3秒刷新一次
        resp.setHeader("refresh","3");//js中的refresh实现刷新
        //在内存中创建一个空图片
        BufferedImage image = new BufferedImage(100,50,BufferedImage.TYPE_INT_RGB);
        //得到图片
        Graphics2D graphics = (Graphics2D)image.getGraphics();//拿到2D画笔
        //设置背景颜色
        graphics.setColor(Color.white);//设置笔的颜色为白色
        graphics.fillRect(0,0,100,50);//根据坐标设置填充白色的位置
        //在图片上写数字
        graphics.setColor(Color.blue);//修改笔的颜色为蓝色
        graphics.setFont(new Font(null,Font.BOLD,20));//设置字体
        graphics.drawString(makeNum(),0,40);

        //告诉浏览器这个请求用图片的方式打开
        resp.setContentType("image/png");
        //网站存在缓存,不让浏览器缓存
        resp.setDateHeader("expires",-1);

        //把图片写给浏览器
        ImageIO.write(image,"png",resp.getOutputStream());
    }
    //生成随机数的方法
    //StringBuffer长度和内容可变
    private String makeNum(){
        Random random = new Random();//生成一个随机数
        String num = random.nextInt(999999) + "";//生成0~999999之间的数
        StringBuffer sb = new StringBuffer();//用于拼接随机数
        for (int i = 0; i < 6-num.length(); i++) {
            sb.append("0");//如果上面产生的随机数不够七位,则用0填充
        }
        num = sb.toString()+num;
        return num;
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }

实现重定向

一个web资源收到客户端请求后,它会通知客户端去访问另一个web资源,这个过程叫重定向
常见场景:用户登录,成功后会转向另一个页面

 @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.sendRedirect("/s/img");//在上一级中添加/s,这与Tomcat的部署中的应用程序上一样
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }

重定向面试题

重定向和转发的区别

  • 相同点:页面都会实现跳转
  • 不同点:请求转发URL不变(页面转发,URL不变),重定向URL会变

解决edge浏览器无法编码

1.打开开发者模式,拖入charset插件
2.在jsp中添加标签

<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8"%>

登录

1.登录页面

<html>
<body>
<h2>Hello World!</h2>

<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8"%>
<form action="${pageContext.request.contextPath}/res" method="get">
    用户名:<input type="text" name="username"><br>
    密码:<input type="password" name="password"><br>
    <input type="submit">
</form>
</body>
</html>

2.响应内容

@Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //在这里处理请求,给予响应
        String username = req.getParameter("username");//在请求里获取参数
        String password = req.getParameter("password");
        resp.setCharacterEncoding("UTF-8");
        resp.setContentType("text/html;charset=utf-8");
        System.out.println(username+":"+password);
        resp.sendRedirect("/s/seccess.jsp");//做出的响应是重定向
    }

3.重定向的页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h1>seccess</h1>
</body>
</html>
posted @ 2022-04-02 22:47  想吃坚果  阅读(27)  评论(0)    收藏  举报