HttpServletResponse和HttpServletRequest的简单实用

摘要:
1、HttpServletResponseweb服务器接收到客户端的http请求,针对这个请求,分别创建一一个代表请求的HttpServletRequest对象,代表响应的--个HttpServletResponse;如果要获取客户端请求过来的参数:找HttpServletRequest如果要给客户端响应一些信息:找HttpServletResponse响应状态码200:请求响应成功2003xx:
1、HttpServletResponse

web服务器接收到客户端的http请求,针对这个请求,分别创建一一个代表请求的HttpServletRequest
对象,代表响应的- -个HttpServletResponse;

  • 如果要获取客户端请求过来的参数:找HttpServletRequest
  • 如果要给客户端响应一些信息: 找HttpServletResponse

响应状态码

200:请求响应成功200
3xx:请求重定向 重定向:你重新到我给你新位置去;

4xx:找不到资源404 资源不存在;
5xx:服务器代码错误500 502:网关错误

response下载文件

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String realPath = "D:\IDEA\javaweb-01-maven\javaweb-01-maven\javaWeb-servlet\lession2\target\classes\1.png";
        System.out.println("下载文件的路径"+realPath);
        String fileName = realPath.substring(realPath.lastIndexOf("\") + 1);
        resp.setHeader("Content-disposition","attachment;filename="+java.net.URLEncoder.encode(fileName, "UTF-8"));
        FileInputStream in = new FileInputStream(realPath);
        int len=0;
        byte[] buffer = new byte[1024];
        ServletOutputStream out = resp.getOutputStream();
        while ((len=in.read(buffer))>0){
            out.write(buffer,0,len);
        }
        in.close();
        out.close();
    }

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

验证码实例

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        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.ITALIC,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");
        boolean write = ImageIO.write(image, "jpg", resp.getOutputStream());
    }

    private String makeNum(){
        Random ran=new Random();
        String num=ran.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);
    }

重定向 response.sendRedirect()

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setHeader("Location","/lession2_war/image");
        resp.setStatus(302);
        resp.sendRedirect("/lession2_war/image");
    }

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

请求转发与重定向的区别:

  • 相同点:都能实现页面跳转

  • 不同点:请求转发不改变URL的地址 307

    ​ 重定向改变URL的地址 302

    image-20200517232118239

2、HttpServletRequest

jsp编写form表单乱码问题解决办法

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

request处理表单

<html>
<body>
<%--${pageContext.request.contextPath}代表当前的项目--%>
 <%@ page contentType="text/html; charset=UTF-8"%>
<form action="${pageContext.request.contextPath}/login" method="get">
    用户名:<input type="text" name="username"><br>
    密码:<input type="password" name="password"><br>
    <input type="submit" name="submit" value="提交">
    <input type="reset" name="reset" value="重置">
</form>
</body>
</html>
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        System.out.println("进入请求");
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        resp.sendRedirect("/lession2_war/test.jsp");//重定向到成功页面
    }

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

req.getParameter(获取单个值) req.getParameterValues(获取集合)获取前端参数

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        String username = req.getParameter("username");
        String pwd = req.getParameter("pwd");
        String[] hobbies = req.getParameterValues("hobby");
        System.out.println("============================");
        System.out.println(username);
        System.out.println(pwd);
        System.out.println(Arrays.toString(hobbies));
        System.out.println("============================");

        resp.setCharacterEncoding("UTF-8");
        req.getRequestDispatcher("success.jsp").forward(req,resp);
    }

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

免责声明:文章转载自《HttpServletResponse和HttpServletRequest的简单实用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇jacoco统计server端功能测试覆盖率Java篇:Docker的介绍安装 和常用命令下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

Qt使用镜像源快速安装与更新

如果我们选择在线安装模式,那就更麻烦了,因为下载速度一般不慢。事实上,在中国,Qt图片来源很多,但很少有人使用。原因是Qt图像源做得不好。如果我们导入它,它将自动链接到官方图像源。因为它已经从官方来源同步,没有更改,所以我们无法逐个添加补丁,这太麻烦了。好吧,让我停止胡说八道。让我告诉你如何使用国产Qt图像源。...

axios 处理超时问题 记录

前言:记录最近两天处理请求超时的逻辑。...

安装qmake与环境变量解析

如果你已经有了qmake,可以跳过这里,请看10分钟学会使用qmake。手动安装qmake在手工连编Qt之前,下面这些环境变量必须被设置:QMAKESPEC这个必须设置为你所使用的系统的平台和编译器的组合。当编译完成时,qmake已经可以使用了。这里对添加环境变量时,是在path里头添加,还是new一个变量有点疑惑。而如果是new的话,当我们在为程序添加路径...

ES基本查询总结

ES与数据库比较查询操作Elasticsearch中当我们设置Mapping完毕后,就可以按照设定的方式导入数据。以下内容的原文需要参考ES官方文档1、结构化检索针对字段类型:日期、时间、数字类型,以及精确的文本匹配。结构化检索特点:*1)结构化查询,我们得到的结果总是非是即否,要么存于集合之中,要么存在集合之外。term查询是简单的,它接受一个字段名以及我...

GNN图神经网络(1)

通常来说,GNN通过邻居节点的加权求和来更新节点的隐藏状态。...

NPOI 导出Excel插入图片、设置边框样式、合并单元格、字体样式等小知识

1.将单元格顶部边框设置为黑色实线ICellStylecellStyleTail=sheet。工作簿。CreateCellStyle();cellStyleTrail.BorderTop=边框样式。薄的https://blog.csdn.net/ezreal_pan/article/details/811347012.如何插入图片#区域插入图片varpath...