美文网首页
Request,Response

Request,Response

作者: 扶光_ | 来源:发表于2023-10-21 19:08 被阅读0次
流程图

一,Request

1.1 request的继承体系

继承体系

1.2 获取请求数据

  • 1 请求行(get获取)

    请求行
    String getMethod():获取请求方式GET
    String getContextPath():获取项目访问路径 :/request-demo
    StringBuffer getRequestURL():获取URL,http://localhost/request-demo/req1
    String getRequestURI():获取标识符 :request-demo/req1
    String getQueryString():获取请求参数 :user=hx&pwd=123
  • 2 请求头 (就是键值对的形式)


    请求头
  • 3 请求体(post获取)
    post请求的数据
    用输入流来获取
    纯文本形式用字符输入流 BufferReader getReader()获取字符输入流
    获取字节数据,比如图片:ServletInputStream getInputStream() 获取字节输入流

1.3 获取请求参数

GET获取请求参数String getQueryString()
POST获取请求参数 BufferReader getReader()


image.png
image.png
@WebServlet("/demo2")
public class ServletDemo2 extends HttpServlet{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("get..................");
        //获取所有参数的map集合
        Map<String ,String[]> map = req.getParameterMap();
        //遍历键名
        for (String key : map.keySet()) {
            System.out.println(key+":");

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

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("post..................");
        this.doGet(req,resp);
    }

取单独一个键的值,数组

String[] hobbies = req.getParameterValues("hobby");
for(String hobby:hobbies){
    System.out.println(hobby);
  }

根据key获取单独属性值

String name = req.getParameter("name");
String password = req.getParameter("pwd");

可以使用Servlet模板来创建这种servlet

1.4 解决输入中文乱码问题

post请求解决中文乱码request.setCharacterEnconding('utf-8');
get请求解决中文乱码``
在get请求中,他会将utf-8的编码将字符串转换为二进制数的形式进行传播,那么tomcat的默认解码是ISO-8859-1 所以会出现乱码
那么utf-8 一个中文代表三个字节,每个字节转换2个16进制并在前添加%.如果两个汉字中文编码url就变成了6个
%E5%A0%E4%B8%BC%F5%

解决方法
将字符串转换为字节数据,在将字节数组转换为字符串

byte[] bytes = decode.getBytes("ISO-8859-1");
String s = new String(bytes,"utf-8");

1.5 请求转发

一种服务器内部的资源跳转方式


内部跳转
req.getRequestDispatcher("资源B路径").forward(req,res);

二,Response

使用Response对象设置响应数据。

  • 1 响应行
    HTTP/1.1 200 OK
    void setStatus(int sc);//设置响应状态码
  • 2 响应头
    Content-Type:text/html
  • 3 响应体
    <html><head></head></html>
    获取字符输出流 PrintWrite getWriter()
    获取字节输出流 ServletOutputStream getOutputStream()

2.2 response完成重定向

一种资源跳转的方式

resp.setStatus(302);
resp.setHeader("location","跳转的路径 ")

关于路径
如果是浏览器使用需要+项目根目录访问路径
如果是服务器内部使用 不需要+目录
关于重定向可以动态获取虚拟目录
String contextPath = request.getContextPath();
resp.setHeader(contextPath+"/resp");

2.3 Response响应字符数据

使用Response对象获取字符输出流
1
PrintWriter writer = resp.getWriter();
2
writer.write("啊啊");

2.4Response响应字节数据

1
ServletOutputStream = resp.getOutputStream();
2
outputStream.write(字节数据);//图片 音频 等等

可以使用IOUtils工具类进行字节的复制操作
在pom.xml导入以下标签

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

使用IOUtils.copy(输入流,输出流);

相关文章

网友评论

      本文标题:Request,Response

      本文链接:https://www.haomeiwen.com/subject/ytvlidtx.html