欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

请求(Request)和响应(Response)

程序员文章站 2022-06-01 22:42:16
...

请求——Request

请求对象的介绍

  • 请求:获取资源。在BS架构中,就是客户端浏览器向服务端发出询问。
  • 请求对象:就是在项目当中用于发送请求的对象。ServletRequest 、HttpServletRequest
    请求(Request)和响应(Response)
    请求(Request)和响应(Response)

请求对象常用方法

获取各种路径
String getContextPath();			//获取虚拟目录名称
String getServletPath();			//获取Servlet映射路径
String getRemoteAddr();				//获取访问者ip地址
String getQueryString();			//获取请求的消息数据
String getRequestURI();				//获取同一资源标识符
StringBuffer getRequestURL();		 //获取统一资源定位符
获取请求头信息
String getHeader(String name);					//根据请求头名称获取一个值
Enumeration<String> getHeaders(String name);	 //根据请求头名称获取多个值
Enumeration<String> getHeaderNames();			 //获取所有请求头名称
获取请求参数信息
String getParameter();						//根据名称获取数据
String[] getParameterValues(String name);	  //根据名称获取所有数据
Enumeration<String> getParameterNames();	  //获取所有名称
Map<String,String[]> getParameterMap();		  //获取所有参数的键值对

获取请求参数并封装对象的三种方式

  • 手动封装方式
  • 反射封装方式
  • 工具类封装方式(重点掌握)

工具类封装方式(重点掌握)

  • 首先导入对应的 jar 包
    请求(Request)和响应(Response)
    工具类请求参数封装对象代码示例
package com.itheima.servlet;

import com.itheima.domain.User;
import org.apache.commons.beanutils.BeanUtils;

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("/servletTest03")
public class ServletTest03 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取所有的数据
        Map<String, String[]> map = req.getParameterMap();
        //封装学生对象
        User user = new User();
        try {
            BeanUtils.populate(user,map);
        } catch (Exception e) {
            e.printStackTrace();
        }
        //输出对象
        System.out.println(user);
    }

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

流对象获取请求信息

BufferedReader getReader(); //获取字符输入流; (注意)必须是post方式的请求
ServletInputStream getInputStream();	//获取字节输入流

解决中文乱码

  • get 方式,没有乱码问题,在 Tomcat8 版本后已经解决
  • post 方式,通过 setCharacterEncoding(“UTF-8”); 解决

请求域

  • 请求域:可以再一次请求范围内进行共享数据
  • 一般用于请求转发的多个资源*享数据
请求对象操作共享数据方法
void setAttribute(String name,Object value);	 //向请求域对象中存储数据
Object getAttribute(String name);				//通过名称获取请求域对象中的数据
void removeAttribute(String name);				//通过名称移除请求域对象中的数据

请求转发

  • 请求转发:客户端的一次请求到达之后,发现需要借助其他 Servlet 来实现功能。
  • 特点:
    • 浏览器地址不变
    • 域对象中的数据不丢失
    • 负责转发的 Servlet 转发前后的响应正文会丢失
    • 由转发的目的地来响应客户端
请求转发常用方法
RequestDispatcher getRequestDispatcher(String name);		//获取请求调度对象
void forward(ServletRequest req,ServletResponse resp);		//实现转发

请求包含

  • 请求包含:可以合并其他Servlet 中的功能一起响应给客户端。
  • 特点:
    • 浏览器地址栏不变
    • 域对象中的数据不丢失
    • 被包含的Servlet 响应头会丢失
请求包含常用方法
RequestDispatcher getRequestDispatcher(String name);	//获取请求调度对象
void include(ServletRequest req,ServletResponse resp);	//实现包含

响应:
https://blog.csdn.net/Mr_97xu/article/details/108188434