• 6.Request和Response


    一、Requset 继承体系

    二、Requset 获取请求数据

    1.请求行: GET  /request-demo/req1?username=zhangsan HTTP/1.1

             String getMethod(): 获取请求方式 :   GET

            String getContextPath(): 获取虚拟目录(项目访问路径): /requset-demo

            StringBuffer getRequsetURL() :获取URL(统一资源定位符):http://localhost:8080/requset-demo/req1

            String getRequsetURL(): 获取URL(统一资源标识符) : /requset-demo/req1

            String getQueryString(): 获取请求参数(GET方式):username=zhangsan&password=123

    2.请求头:

            String getHeader(String name): 根据请求头名称,获取值

    3.请求体:POST

             ServletInputStream getInputStream(): 获取字节输入流

            BufferedReader getReader(): 获取字符输入流

    4.post或get调用相互的方法    this.doPost(req.resp)

    三、Requset 通用方式获取请求参数

    Map getParameterMap(): 获取所有参数Map集合

    String[] getParameterValues(String name) : 根据名称获取参数值(数组)

    String getParamter(String name): 根据名称获取参数值(单个值)

    四、Idea模板创建Servlet(网上找)

    五、请求参数中文乱码问题-POST解决方案

            req.setCharactorEncoding("UTF-8")

    1. package com.itheima.servlet;
    2. import javax.servlet.ServletException;
    3. import javax.servlet.annotation.WebServlet;
    4. import javax.servlet.http.HttpServlet;
    5. import javax.servlet.http.HttpServletRequest;
    6. import javax.servlet.http.HttpServletResponse;
    7. import java.io.IOException;
    8. @WebServlet("/demo5")
    9. public class ServletDemo5 extends HttpServlet {
    10. @Override
    11. protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    12. req.setCharacterEncoding("UTF-8");
    13. System.out.println("哈哈哈"+req.getParameter("username"));
    14. }
    15. }

    六、请求参数中文乱码问题-GET解决方法

    通用方法get/post:        new String(username.getBytes("ISO-8859-1"),"UTF-8")

    1. package com.itheima.servlet;
    2. import javax.servlet.ServletException;
    3. import javax.servlet.annotation.WebServlet;
    4. import javax.servlet.http.HttpServlet;
    5. import javax.servlet.http.HttpServletRequest;
    6. import javax.servlet.http.HttpServletResponse;
    7. import java.io.IOException;
    8. import java.nio.charset.StandardCharsets;
    9. @WebServlet("/demo6")
    10. public class ServletDemo6 extends HttpServlet {
    11. @Override
    12. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    13. String regStr = new String(req.getParameter("username").getBytes("ISO-8859-1"), "UTF-8");
    14. System.out.println("哈哈哈"+regStr);
    15. }
    16. }

    七、Request请求转发

    实现方式:req.getRequsetDispatcher("资源B路径").forward(req,resp);

    请求转发资源间共享数据:使用Requset对象

    Void setAttribute(String name,Object o): c存储数据到requset域中

    Object getAttribute(String name):根据key,获取值

    void removeAttribute(String name):根据Key,删除该键值对

    1. @WebServlet("/demo7")
    2. public class ServletDemo7 extends HttpServlet {
    3. @Override
    4. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    5. System.out.println("demo7");
    6. //存储数据
    7. req.setAttribute("msg","hello");
    8. //请求转发
    9. req.getRequestDispatcher("/demo8").forward(req,resp);
    10. }
    11. }
    1. @WebServlet("/demo8")
    2. public class ServletDemo8 extends HttpServlet {
    3. @Override
    4. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    5. System.out.println("demo8");
    6. //获取数据
    7. System.out.println("demo8"+req.getAttribute("msg"));
    8. }
    9. }

    八、Response设置响应数据功能介绍&完成重定向

    相应行:HTTP/1.1 200 OK

    响应头:Content-Type:text/html

    响应体:

    九、Response完成重定向

    实现方式一:resp.setStatus(302)   resp.setHeader("Location","资源B的路径")

    简化:resp.sendRedirect("资源B的路径")

    1. @WebServlet("/demo9")
    2. public class ServletDemo9 extends HttpServlet {
    3. @Override
    4. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    5. System.out.println("demo9");
    6. //方式一
    7. // resp.setStatus(302);
    8. // resp.setHeader("Location","/web-demo/demo1");
    9. //简化
    10. resp.sendRedirect("/web-demo/demo1");
    11. }
    12. }

    十、路径问题

    明确路径谁使用?

            1.浏览器使用:需要加虚拟目录(项目访问路径)

            2.服务端使用:不需要加虚拟目录

    练习:

                 加虚拟目录

           

    加虚拟目录

            req.getRequestDispatcher("路径")   不加虚拟目录

            resp.sendRedirect("路径") 加虚拟目录

    因为pom.xml可以修改虚拟目录名字,所以我们需要动态获取虚拟目录:

            String contextPath = requset.getContextPath()    responce.sendRedirect(contextPath+"/resp2")

    十一、Responce响应字符数据

    1.通过Responce对象获取字符输出流    PrintWriter writer = resp.getWriter();     2.写数据  writer.write("aaa")

    2.返回结果中文乱码  resp.setContentType("text/html;charset=utf-8")

    十二、Response响应字节数据

     

  • 相关阅读:
    【无标题】
    解决Nacos服务器连接问题:一次完整的排查经验分享
    k8s配置ingress访问集群外部资源
    3D数学之三角公式
    简析电能管理系统在某煤矿的应用
    ES6新特性:const关键字详解
    oracle pdb创建directory报ORA-65254,报错分析和解决
    递增递减运算符 ++ -- 前置后置的区别
    Android的FragmentManager介绍以及它管理Fragment的流程
    .NET周刊【8月第3期 2023-08-20】
  • 原文地址:https://blog.csdn.net/m0_61927991/article/details/127825724