美文网首页
2.Requset和Response

2.Requset和Response

作者: _麻辣香锅不要辣 | 来源:发表于2019-11-08 10:57 被阅读0次
1.png

1.简介

request对象和response对象的原理:都是由服务器创建的。

2.Request

1.request对象的继承体系结构
ServletRequest ------- 接口
|继承
HttpServletRequest-------接口
|实现
org.apache.catalina.connector.RequestFacade(Tomcat)

2.1获取请求行数据

@WebServlet("/demo1")
public class ServletDemo1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       //获取请求消息数据
        //获取请求方式
        String method = req.getMethod();
        System.out.println(method);
        //获取虚拟目录
        String contextPath = req.getContextPath();
        System.out.println(contextPath);
        //获取Servlet路径
        String servletPath = req.getServletPath();
        System.out.println(servletPath);
        //获取get方式的请求参数
        String queryString = req.getQueryString();
        System.out.println(queryString);
        //获取请求URI
        String requestURI = req.getRequestURI();
        System.out.println(requestURI);
        //获取请求URL
        StringBuffer requestURL = req.getRequestURL();
        System.out.println(requestURL);
        //获取客户端的Ip地址
        String remoteAddr = req.getRemoteAddr();
        System.out.println(remoteAddr);
    }

GET

/demo1
null
/demo1
http://localhost:8080/demo1
0:0:0:0:0:0:0:1
2.2获取请求头数据
String host = req.getHea![![2.png](https://img.haomeiwen.com/i14115249/cfca1090bbac0695.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
](https://img.haomeiwen.com/i14115249/2ea6b9b283536266.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
er("host");
        System.out.println(host);
        //获取所有的headers
        Enumeration<String> headerNames = req.getHeaderNames();
        while(headerNames.hasMoreElements()){
            String s = headerNames.nextElement();
            String val = req.getHeader(s);
            System.out.println(val);
        }
2.3获取请求体数据

只有使用post请求方式时,才有请求体。

    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        BufferedReader reader = req.getReader();
        String str;
        while((str = reader.readLine()) != null){
            System.out.println(str);
        }
        //ServletInputStream inputStream = req.getInputStream();
    }

测试


2.png
{
    "name":"张三",
    "age":11
}
2.4其他功能:
  • 获取请求参数的通用方式:
    1.String getParameter(String name)
    2.String[] getParameterValues(String name)
    3.Enumeration<String> getParameterNames()
    4.Map<String,String[]> getParameterMap()
  • 请求转发:(服务器内部的资源跳转方式)
  • 共享数据
  • 获取ServletContext

2.4.1获取请求参数的通用方式
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String name = req.getParameter("name");
        System.out.println(name);
        String[] names = req.getParameterValues("name");
        for (int i = 0; i < names.length; i++) {
            System.out.println(names[i]);
        }
        Enumeration<String> parameterNames = req.getParameterNames();
        while(parameterNames.hasMoreElements()){
            System.out.println(parameterNames.nextElement());
        }

        Map<String, String[]> parameterMap = req.getParameterMap();
        System.out.println(parameterMap);
    }

2.4.2请求转发
   //通过request对象获取RequestDispatcher对象
        RequestDispatcher requestDispatcher = req.getRequestDispatcher("/demo0");
        requestDispatcher.forward(req,resp);
2.4.3共享数据
  • 域对象:一个有作用范围的对象,可以在范围内共享数据
  • request域:代表依次请求的范围,一般用于请求转发的多个资源中共享数据
  • 方法: req.setAttribute(key,value);req.getAttribute(key);removeAttribute(key)
2.4.4获取ServletContext对象:
  • 概念:代表整个web应用,可以和程序的容器(服务器)来通信
  • 功能:
    1.获取MIME类型(在互联网通信过程中定义的一种文件数据类型)
    格式:大类型/小类型 text/html;image/jpeg
    2.域对象:共享数据(由于是所有用户共享,不安全,一般不用此对象存储数据)
    3.获取文件的真实(服务器)路径
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext servletContext = req.getServletContext();
        String realPath = servletContext.getRealPath("index.jsp");//获取web目录下
        System.out.println(realPath);
//获取WEB-INF目录下
        String realPath1 = servletContext.getRealPath("/WEB-INF/web.xml");
        System.out.println(realPath1);
//获取src目录下
        String realPath2 = servletContext.getRealPath("/WEB-INF/classes/test.txt");
        System.out.println(realPath2);
    }

3.Response

1.设置响应行(setStatus)
2.设置响应头(setHeader)
3.设置响应体(getWriter(),getOutputStream()

编码问题
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setCharacterEncoding("utf-8");
//告诉浏览器,服务器发送的消息的编码,建议浏览器使用该编码解码。否则浏览器会使用默认的解码。
        //resp.setHeader("content-type","text/html;charset=utf-8");
        resp.setContentType("text/html;charset=utf-8");
        PrintWriter writer = resp.getWriter();
        writer.write("hello world 你好 世界");
    }
重定向
@WebServlet("/demo1")
public class ServletDemo1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        //resp.setStatus(302);
        //resp.setHeader("location","/hello.html");

resp.sendRedirect("/hello.html");
    }


重定向和转发的区别

重定向:

1.地址栏发生变化
2.可以访问其他服务器的资源
3.两次请求,不能使用request对象来共享数据

转发:

1.地址栏路径不变
2.只能访问当前服务器下的资源
3.一次请求,可以使用request对象来共享资源

相关文章

  • 2.Requset和Response

    1.简介 request对象和response对象的原理:都是由服务器创建的。 2.Request 1.reque...

  • python-requests模块

    response.text和response.content的区别 response.text类型:str解码类型...

  • JavaWeb——Request&Response&am

    Request&Response原理 Request对象和response对象的原理 request和respon...

  • response入门

    response response对象表示对程序发出的http请求的响应。 response对象常用属性和方法 r...

  • Scrapy爬虫框架(八) ------ 模拟登录

    1. Scrapy-Request和Response(请求和响应) Scrapy的Request和Response...

  • 请求

    Request: request对象和response对象的原理1. request和response对象是由服务...

  • 2019-06-24—XPATH

    2019-06-24 proxyhandler代理IP response.text和response.conten...

  • Request和Response

    一、request REST framework的 Request 扩展了标准的 HttpRequest,添加支持...

  • Responsability和Response

    想起来《高效能人士的七个习惯》中的一句话,它说,责任感的单词为什么是responsablility,因为他代表的是...

  • Request和Response

    请求转发:一种在服务器内部的资源跳转方式 步骤 1、通过request对象获取请求转发器对象:RequestDis...

网友评论

      本文标题:2.Requset和Response

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