当前位置: 首页 > news >正文

java web5(黑马)

Request & Response

作用:       Request:获取请求数据                Response:设置响应数据

Request

继承体系

1.Tomcat需要解析请求数据,封装为request对象,并且创建request对象传递到service方法中

2. 使用request对象,查阅JavaEE API文档的HttpServletRequest接口
 

获取请求数据

1.获取请求数据

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

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

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

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

  String getRequestURl():       获取URI(统一资源标识符):  /request-demo/req1

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

       >请求头:          User-Agent: Mozilla/5.0 Chrome/91.0.4472.106

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

>请求体:        username=superbaby&password=123

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

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

2.通用方式获取请求参数



  1. Map<String,String[]> getParameterMap(): 获取所有参数Map集合

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

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


>使用通用方式获取请求参数后,屏蔽了GET和POST的请求方式代码的不同,则代码可以定义为如下格式:

@webServlet("/reqDeno3")

public class RequestDemo3 extends HttpServlet {
               @0verride
                protected void doGet(HttpServletRequest req,HttpServletResponse resp){

             }
@0verride

protected void doPost(HttpServletReguest reg, HttpServletResponse resp){

               this.doBet(req,resp);

           }

}

>可以使用Servlet模板创建Servlet更高效


 

3.请求参数中文乱码处理

     1. 请求参数如果存在中文数据,则会乱码

     2. 解决方案:

        >POST:设置输入流的编码

                req.setCharacterEncoding("UTF-8");


          >通用方式(GET/POST):先编码,再解码

                 new String(username.getBytes("ISO-8859-1"),"UTF-8");

      3. URL编码

          >将字符串技照编码方式转为二进制

          >每个字节转为2个16进测数并在前边加上%



   4. URL编码实现方式:

       编码:  URLEncoder.encode(str, "utf-8”);

       解码:  URLDecoder.decode(s,"lSO-8859-1");
 

注:Tomcat 8.0 之后,已将GET请求乱码问题解决,设置默认的解码方式为UTF-8

请求转发

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

2. 实现方式:   reg.getRequestDispatcher("资源B路径”).forward(req,resp);

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

      >void setAttribute(String name,Object o):存储数据到request城中

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

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

4. 请求转发特点:

      >浏览器地址栏路径不发生变化

      >只能转发到当前服务器的内部资源

      >一次请求,可以在转发的资源间使用request共享数据

Response

设置响应数据功能介绍

响应数据分为3部分:

1. 响应行:      HTTP/1.1 200 OK

       void setStatus(int sc):   设置响应状态码

2. 响应头:      Content-Type: text/html

       void setHeader(String name, String value):   设置响应头键值对

3. 响应体:        <html><head>head><body></body></html>

       PrintWriter getWriter():   获取字符输出流

       ServletOutputStream getOutputStream():   获取字节输出流

完成重定向


1. 重定向(Redirect):一种资源跳转方式
 

2. 实现方式:
       resp.setStatus(302);

       resp.setHeader("location","资源B的路径");

       resp.sendRedirect("资源B的路径”);

3. 重定向特点:

       >浏览器地址栏路径发生变化

       >可以重定向到任意位置的资源(服务器内部、外部均可)

       >两次请求,不能在多个资源使用request共享数据
 

响应字符数据


1. 使用:

          >通过Response对象获取字符输出流1.

              PrintWriter writer = resp.getWriter();

          >写数据

              writer.write("aaa");

2. 注意:

         >该流不需要关闭,随着响应结束,response对象销毁,由服务器关闭

        >中文数据乱码: 原因通过Response获取的字符输出流默认编码:ISO-8859-1

                 resp.setContentType("texthtml;charset=utf-8");

响应字节数据

1.使用:

       >通过Response对象获取字符输出流

            SemietOutputStream outputStream = resp.getOutputStream();

       >写数据

            outputStream.write(字节数据);

2.lOUtils工具类使用

       >导入坐标

<dependency>

       <groupld>commons-io</groupld>

      <artifactld>commons-io</artifactld>

      <version>2.6</version>

</dependency>

      >使用

    lOUtils.copy(输入流,输出流);

http://www.lryc.cn/news/580109.html

相关文章:

  • Vue内置指令
  • 一、react18+项目初始化(vite)
  • 支付宝小程序关键词排名实战攻略,从0到1的突破之路
  • 八股学习(三)---MySQL
  • Spring AI Alibaba 来啦!!!
  • 【网络与系统安全】强制访问控制——BLP模型
  • Redis基础(5):Redis的Java客户端
  • 马尔可夫链:随机过程的记忆法则与演化密码
  • 【github】想fork的项目变为私有副本
  • WPF学习笔记(23)Window、Page与Frame、ViewBox
  • WPF+HelixToolkit打造炫酷自定义3D贴图立方体盒子模型
  • 简单 Python 爬虫程序设计
  • latency 对功耗的影响
  • VSCode 安装使用教程
  • vue3引入海康监控视频组件并实现非分屏需求一个页面同时预览多个监控视频;
  • 玩转n8n工作流教程(一):Windows系统本地部署n8n自动化工作流(n8n中文汉化)
  • goole chrome变更默认搜索引擎为百度
  • DotNetBrowser 2.27.14 版本发布啦!
  • Ubuntu下的Tomcat服务器部署
  • 智慧园区新引擎 —— 基于Java的企业级智慧园区解决方案
  • Vue3-组件化-Vue核心思想之一
  • jsonCPP 开源库详解
  • 微软医疗AI诊断系统发布 多智能体协作实现疑难病例分析
  • 《汇编语言:基于X86处理器》第6章 复习题和练习,编程练习
  • js中的FileReader对象
  • 【网络与系统安全】域类实施模型DTE
  • Java技术深潜:从并发陷阱到云原生突围
  • RabbitMQ用法的6种核心模式全面解析
  • Response对象
  • Qt应用快速启动的重要性:从系统上电到界面渲染的全链路加速实践