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=

随便看看

js引用类型赋值不改变原对象值

在JS中,对象的赋值是指默认情况下的赋值。如果更改指定对象,原始对象也将更改。如果要复制赋值,需要重新分配对象:vara={'name':'zhangsan'};varb=对象。分配b、 name='lisi';这样,原始对象的下一层的值不会更改,但如果对象中存在对象,下一层也会更改下一层中的原始对象。处理两个对象的相关性有一个简单而激烈的问题:obj1={...

CSS hover伪类改变其他元素的样式

重要的一点,hover在父元素上,对子元素进行样式调整。也可以#firdiv:hover~.se改变所有同级的元素总结一下:hover对同级别的元素改变样式,改变的是相邻兄弟元素的样式,即一个元素的样式;对元素的子元素应用hover改变样式,可以同时起作用。利用伪类改变其他元素的样式,其他元素须是hover元素的子元素。...

Python3 读取和写入excel

/py_工作/销售/包括/天气。csv'_工作簿函数读取并返回所有工作表● 以列表形式读取_仅:判断是否读取_仅以模式打开Excel文档● 编码:...

pl/sql中的取模运算

pl/sql语言的取模(即求余)运算不使用大部分语言所支持的a%b而是使用函数mod(a,b)例子如下:写一个匿名块判断某年是否是闰年,能被4但是不能被100整除,或者能被400整除1declare2judgevarchar2(200);3year_inputnumber;4begin5year_input:='&输入年份';6if(mod(year...

微信支付服务商模式支付与普通微信支付的配置区别

chapter=7_7&index=5注:与普通微信支付相比,源代码是上述7/8之间的区别,其他可以看作是服务提供商自己的微信支付配置;...

sqlserver 计算 百分比

selectltrim+'%'As百分比NUMERIC(P,S)P的默认值是:38S的默认值是:-84~127numeric(a,b)函数有两个参数,前面一个为总的位数,后面一个参数是小数点后的位数,例如numeric(5,2)是总位数为5,小数点后为2位的数,也就是说这个字段的整数位最大是3位。...