首页 > 其他分享 >一篇博客上手request和response

一篇博客上手request和response

时间:2023-04-19 15:55:40浏览次数:26  
标签:request System javax 上手 import servlet response

概念

request:获取请求数据
response:设置响应数据

Request

request继承体系

ServletRequest——Java提供的请求对象根接口
HttpServletRequest——Java提供的对http协议封装的请求对象接口
RequestFacade——tomcat实现定义类

request获取数据

package com.itheijma.web;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedReader;
import java.io.IOException;

@WebServlet("/req1")
public class RequestDemo1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //String method() 获取请求方式
        String method = req.getMethod();
        System.out.println(method);
        //String getContextPath() 获取虚拟目录(项目访问路径)
        String contextPath = req.getContextPath();
        System.out.println(contextPath);
        //StringBuffer getRequestURL() 获取URL(统一资源定位符)
        StringBuffer url = req.getRequestURL();
        System.out.println(url.toString());
        //String getRequestURI() 获取URI(统一资源标识符)
        String uri = req.getRequestURI();
        System.out.println(uri);
        //String getQueryString() 获取请求参数(get方式)
        String queryString = req.getQueryString();
        System.out.println(queryString);

        //------------
        //获取请求头
        String agent = req.getHeader("user-agent");
        System.out.println(agent);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取post请求体:请求参数

        // 1. 获取字符输入流
        BufferedReader br = req.getReader();
        // 2. 读取数据
        String line = br.readLine();
        System.out.println(line);

    }
}

request通用的方式获取数据

package com.itheijma.web;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Map;

@WebServlet("/req2")
public class RequestDemo2 extends HttpServlet{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //get请求逻辑
//        System.out.println("get...");

        // 1.获取所有参数的map集合
        Map<String, String[]> map = req.getParameterMap();
        for (String key : map.keySet()) {
            //username:zhangsan
            System.out.print(key+":");

            //获取值
            String[] values = map.get(key);
            for (String value : values) {
                System.out.print(value + " ");
            }

            System.out.println();
        }

        System.out.println("----------");

        // 2.根据key获取参数值,数组
        String[] hobbies = req.getParameterValues("hobby");
        for (String hobby : hobbies) {

            System.out.println(hobby);
        }

        // 3. 根据key获取单个参数值
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        System.out.println(username);
        System.out.println(password);


    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //post请求逻辑
        this.doGet(req,resp);


//        System.out.println("post...");
//        // 1.获取所有参数的map集合
//        Map<String, String[]> map = req.getParameterMap();
//        for (String key : map.keySet()) {
//            //username:zhangsan
//            System.out.print(key+":");
//
//            //获取值
//            String[] values = map.get(key);
//            for (String value : values) {
//                System.out.print(value + " ");
//            }
//
//            System.out.println();
//        }
//
//        System.out.println("----------");
//
//        // 2.根据key获取参数值,数组
//        String[] hobbies = req.getParameterValues("hobby");
//        for (String hobby : hobbies) {
//
//            System.out.println(hobby);
//        }
//
//        // 3. 根据key获取单个参数值
//        String username = req.getParameter("username");
//        String password = req.getParameter("password");
//        System.out.println(username);
//        System.out.println(password);


    }
}

request请求参数中文乱码解决方法

package com.itheijma.web;



import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.nio.charset.StandardCharsets;


/**
 * 中文乱码问题解决方案
 */
@WebServlet("/req3")
public class RequestDemo3 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 1. 解决乱码 POST 获取参数方式:getReader()读取数据流
        request.setCharacterEncoding("utf-8"); //设置字符输入流的编码


        // 2. 获取username
        String username = request.getParameter("username");
        System.out.println("解决乱码前:"+username);


        // 3. 解决乱码 GET 获取参数方式:getQueryString
        // 乱码原因:tomcat进行url解码,默认的字符集ISO-8859-1
//        // 3.1 先对乱码数据进行编码:转为字节数组
//        byte[] bytes = username.getBytes(StandardCharsets.ISO_8859_1);
//        // 3.2 字节数组解码
//        username = new String(bytes, StandardCharsets.UTF_8);

        username = new String(username.getBytes(StandardCharsets.ISO_8859_1),StandardCharsets.UTF_8);

        System.out.println("解决乱码后"+username);


    }
}

request请求转发

请求转发(forward):一种在服务器内部的资源跳转方式。
请求转发特点:

  1. 浏览器地址栏路径不发生变化
  2. 只能转发到当前服务器的内部资源
  3. 一次请求,可以在转发的资源间使用request共享数据
    req4
package com.itheijma.web;



import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.nio.charset.StandardCharsets;


/**
 * 请求转发
 */
@WebServlet("/req4")
public class RequestDemo4 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("demo4");

        //存储数据
        request.setAttribute("msg","hello");

        //请求转发
        request.getRequestDispatcher("/req5").forward(request,response);
    }
}

req5

package com.itheijma.web;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/req5")
public class RequestDemo5 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("demo5");

        //获取数据
        Object msg = request.getAttribute("msg");
        System.out.println(msg);
    }
}

response

Response完成重定向

重定向:一种资源跳转的方式
resp1

package com.itheima.web.response;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/resp1")
public class ResponseDemo1 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("resp1...");

//        // 重定向
//        // 1. 设置状态码 302
//        response.setStatus(302);
//        // 2. 设置响应头 Location
//        response.setHeader("Location","/tomcat-demo2/resp2");

        // 简化方式完成重定向
        response.sendRedirect("/tomcat-demo2/resp2");

    }
}

resp2

package com.itheima.web.response;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/resp2")
public class ResponseDemo2 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("resp2...");
    }
}

重定向特点:

  1. 浏览器地址栏路径发生变化
  2. 可以重定向到任意位置的资源(服务器内、外部均可)
  3. 两次请求,不能在多个资源使用request共享数据

资源路径问题(什么时候加虚拟目录)
浏览器使用:需要加虚拟目录
服务端使用:不需要加虚拟目录

动态获取虚拟目录

        //动态获取虚拟目录
        String contextPath = request.getContextPath();
        response.sendRedirect(contextPath + "/resp2");

Response响应字符数据

package com.itheima.web.response;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;


/**
 * 响应字符数据:设置字符数据的响应体
 */
@WebServlet("/resp3")
public class ResponseDemo3 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        //获取字符输出流
        PrintWriter writer = response.getWriter();
        //content-type
        //response.setHeader("content-type","text/html");
        writer.write("你好");
        writer.write("<h1>aaa</h1>");

        //细节:流不需要关闭
    }
}

Response响应字节数据

package com.itheima.web.response;

import org.apache.commons.io.IOUtils;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.PrintWriter;


/**
 * 响应字节数据:设置字节数据的响应体
 */
@WebServlet("/resp4")
public class ResponseDemo4 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        // 1. 读取文件
        FileInputStream fis = new FileInputStream("e://a.jpg");

        // 2. 获取response字节输出流
        ServletOutputStream os = response.getOutputStream();

        // 3. 完成流的copy

//        byte[] buff = new byte[1024];
//        int len = 0;
//        while ((len = fis.read(buff)) != -1){
//            os.write(buff,0,len);
//        }
        IOUtils.copy(fis,os);//使用工具类

        fis.close();
    }
}

pom文件导入工具类

<dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.6</version>
        </dependency>

标签:request,System,javax,上手,import,servlet,response
From: https://www.cnblogs.com/he-cheng/p/17272873.html

相关文章

  • openpyxl 快速上手教程
    openpyxlwb=Workbook()#新建工作薄ws=wb.active#获取活动工作表wb['Sheet1']#通过名字获取工作表wb.worksheets[0]#通过索引获取工作表ws.append([])#追加一行数据ws.save()#报错呢到指定路径###读取wb=load_work('filename')ws=wb.activeforrowinws.values:#......
  • 外贸海外推广如何迅速上手?
    作为一名外贸行业的小白,我曾经对海外推广一无所知。但在一段时间的学习和摸索中,我逐渐掌握了一些基本的方法和技巧。在这篇文章中,我将与大家分享我的经验,希望对同样是新手的你有所帮助。在进行外贸海外推广时,外链是一个不可忽视的因素。国外付费外链多少钱一条?谷歌网站做外链的方法......
  • jmeter取样器javaRequest脚本8
    1,创建一个maven工程2,通过maven编译打包生成一个jar包3,重启jmeter,新建javarequest请求4,开始执行脚本本文永久更新地址:1,创建一个maven工程在pom.xml文件中添加maven下载地址:https://mvnrepository.com/artifact/org.apache.jmeter/ApacheJMeter_java/5.4.1<depe......
  • requests代理设置
    和urllib一样,多的介绍就不说了,直接上代码:importrequestsproxies={"http":"http://user:[email protected]:80","https":"http://10.10.1.10:1080",}requests.get("https://www.geekdigging.com/",proxies=proxies)......
  • 虚拟机ubuntu22.4报错ok_update_request:I/oerror, dev fdo, sector 0 op OX0:(READ)tl
    ok_update_request:I/oerror,devfdo,sector0opOX0:(READ)tlags0x0phys_segprioclass0BufferI/oerrorondevfdo,logicalblock0,asyncpageread如下图 不管你用的HYPER-V创建虚拟机,还是VMVBOX等。只要找到这里: 把DVD/CD或者软驱修改为物理驱动器,即可。 ......
  • requests如何不使用系统代理
    1.指定域名不使用代理importosimportrequestsos.environ['NO_PROXY']='stackoverflow.com'response=requests.get('http://www.stackoverflow.com')2.设置代理为Noneimportrequestsproxies={"http":None,"......
  • flask请求上下文分析(request原理)、wtforms
    上节回顾#1蓝图第一步:导入第二步:实例化得到对象,可以指定static和templates第三步:app中注册蓝图,注册蓝图时,可以指定前缀第四步:使用蓝图,注册路由,注册请求扩展#2g对象当次请求的全局对象,在当次请求中可以放值和取值跟session的区别是session可......
  • PayloadTooLargeError: request entity too large错误解决
    这个错误通常是由于你正在尝试上传大于服务器最大允许大小的文件或数据导致的。这通常可以通过在服务器端进行一些配置更改来解决。如果您使用的是Node.js,您可以使用body-parser中间件来增加请求体的限制。例如,以下代码将允许请求体的最大大小为10MB:varbodyParser=require('body......
  • 编程中最难的就是命名?这几招教你快速上手
    前言本文转载于阿里开发者公众号,具体详见:编程中最难的就是命名?这几招教你快速上手正文 你可不能像给狗狗取名字那样给类、方法、变量命名。仅仅因为它很可爱或者听上去不错。在写代码的时候,你要经常想着,那个最终维护你代码的人可能将是一个有暴力倾向的疯子,并且他还知道你住......
  • requests模块
    1、介绍requests是python用于处理http/https的一个第三方库,需要pip安装。2、request函数importrequestsres=requests.request(method='GET',url='https://www.baidu.com/');request是一个函数,method和url参数必须给定res的类型为<class‘requests.models.Response’>......