Java Web(七)Request&Response

简介: 对req和resp这两个对象进行简单的使用

Request&Response

网络异常,图片无法展示
|

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

一.Request对象

1.Request继承体系

网络异常,图片无法展示
|

  • Tomcat需要解析请求数据,封装为requestx对象并且创建requestx对象传递到service方法中
  • 使用request对象,查阅JavaEE API文档的HttpServletRequest接口

2.Request获取请求数据

2.1获取请求数据
  • 请求数据分为3部分:

1.请求行:

GET /request-demo/req1?username=zhangsan HTTP/1.1

  • String getMethod():获取请求方式:GET
  • String getContextPath():获取虚拟目录(项目访问路径):/request-demo
  • StringBuffer getRequestURL0:获取URL(统一资源定位符):http:/localhost:8080/request-demo/req1
  • String getRequestURI():获取URI(统一资源标识符):/request-demo/req1
  • String getQueryString() :获取请求参数(GET方式):username=zhangsan&password=123

2.请求头

User-Agent:Mozilla/5.0 Chrome/91.0.4472.106

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

3.请求体

username=superbaby&password=123

  • ServletInputStream getlnputStream():获取字节输入流
  • BufferedReader getReader(():获取字符输入流
2.2通用方式获取请求参数
  • 请求参数获取方式

get方式:

String getQueryString()

post方式:

BufferedReader getReader()

思考:

GET请求方式和POST请求方式区别主要在于获取请求参数的方式不一样,是否可以提供一种统一获取请求参数的方式,从而统一doGet和doPost方法内的代码?

3.Request通用方式获取请求参数

网络异常,图片无法展示
|

  • Map<String,String[]>getParameterMap():获取所有参数Map集合
  • String[]getParameterValues(String name):根据名称获取参教值(数组)
  • String getParameter(String name):根据名称获取参数值(单个值)
  • 使用通用方式获取请求参数后,屏蔽了GET和POST的请求方式代码的不同,则代码可以定义为如下格式:

@WebServlet("/reqDemo3")

publicclassRequestDemo3extendsHttpServlet{

   @override

   protectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp){

   }

   @override

   protectedvoiddoPost(HttpServletRequestreq,HttpServletResponseresp){

   this.doGet(req,resp);

   }

}

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

网络异常,图片无法展示
|

若是没有new Servlet选项
  1. 在pom.xml文里导入servlet得依赖
    网络异常,图片无法展示
    |

  2. 在File里的Project Structure找到Modules
    网络异常,图片无法展示
    |

  3. 点击Dependencies勾选servlet-api的选项
    网络异常,图片无法展示
    |

  • 若想改变模板的格式

网络异常,图片无法展示
|

4.Request请求参数中文乱码

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

//POST的乱码

//1.解决乱码:PoST的底层实现是getReader

request.setCharacterEncoding("UTF-8");//设置字符输入流的编码

//要先设置编码格式,否则后续仍然会中文乱码

//2.获取username

Stringusername=request.getParameter("username");

System.out.println(username);

//GET的乱码

//1.GET,获取参数的方式:getQuerystring

//乱码原因:tomcat进行URL解码,默认的字符集IS0-8859-1

//1.1先对乱码数据进行编码:转为字节数组

username.getByte(StandardCharsets.IS0_8859_1);

//1.2字节数组解码

username=newString(bytes,StandardCharsets.ISO_8859_1)

//1.1和1.2可合为一行

username=newString(username.getBytes((StandardCharsets.ISO_8859_1),StandardCharsets.ISO_8859_1);

  • get的乱码原因

网络异常,图片无法展示
|

  • URL编码

1.将字符串按照编码方式转为二进制2.每个字节转为2个16进制数并在前边加上%

网络异常,图片无法展示
|

  • 解决方案:

POST:设置输入流的编码

req.setCharacterEncoding("UTF-8");

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

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

Tomcat8.0之后,已将GET请求乱码问题解决,设置默认的解码方式为UTF-8

5.Request请求转发

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

网络异常,图片无法展示
|

  • 实现方式

req.getRequestDispatcher(("资源B路径").forward(req,resp);

  • 请求转发资源间共享数据:使用Request对象
  • void setAttribute(String name,Object o):存储数据到request域中
  • Object getAttribute(String name):根据key,获取值
  • void removeAttribute(String name):根据key,删除该键值对
  • 请求转发特点:

浏览器地址栏路径不发生变化只能转发到当前服务器的内部资源一次请求,可以在转发的资源间使用request共享数据

二.Response对象

1.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 getQutputStream():获取字节输出流

2.Response完成重定向

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

网络异常,图片无法展示
|

  • 实现方式:

resp.setStatus(302);

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

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

  • 重定向的特点

浏览器地址栏路径发生变化可以重定向到任意位置的资源(服务器内部、外部均可)两次请求,不能在多个资源使用request共享数据

  • 路径问题

是否要加虚拟目录

明确路径谁使用?浏览器使用:需要加虚拟目录(项目访问路径)服务端使用:不需要加虚拟目录

//简化方式完成重定向

//动态获取虚拟目录

StringcontextPath=request.getContextPath();

response.sendRedirect(contextPath+"/resp2");

3.Response响应字符数据

  • 使用1.通过Response对象获取字符输出流

PrintWriterwriter=resp.getWriter()

  • 2.写数据

writer.write("aaa");

  • 正常写入数据就调用write方法即可,如想要写入html文本语言,则要设置ContentType

response.setContentType("text/html;charset=utf-8");

//1.获取字符输出流

PrintWriter writer response.getWriter();

//content-type

//response.setHeader("content-type","text/html");

writer.write(s:"你好");

writer.write(s:"<h1>aaa</h1>");

//细节:流不需要关闭

  • 注意该流不需要关闭,随着响应结束,response对象销毁,由服务器关闭中文数据乱码:原因通过Response获取的字符输出流默认编码:ISO-8859-1

resp.setContentType("text/html;charset=utf-8");

4.Response响应字节数据

  • 使用1.通过Responsel对象获取字符输出流

ServletOutputStreamoutputStream=resp.getOutputStream();

  • 2.写数据

outputStream,write(字节数据)

  • IOUtils工具类使用1.导入坐标

<dependency>

   <groupld>commons-io</groupld>

   <artifactld>commons-io</artifactld>

   <version>2.6</version>

</dependency>

  • 2.使用

IOUtils.copy(输入流,输出流)

5.SqlSession工具类抽取

  • 创建SqlSessionFactory代码优化

//2.1获取SqlSessionFactory对象

Stringresource"mybatis-config.xml";

Inputstreaminputstream=Resources.getResourceAsstream(resource);

SqlSessionFactorysqlSessionFactory=newSqlSessionFactoryBuilder().build(inputstream);

  • 问题1.代码重复:工具类2.SqlSessionFactory工厂只创建一次,不要重复创建:静态代码块
目录
相关文章
|
9月前
|
安全 Java API
Java Web 在线商城项目最新技术实操指南帮助开发者高效完成商城项目开发
本项目基于Spring Boot 3.2与Vue 3构建现代化在线商城,涵盖技术选型、核心功能实现、安全控制与容器化部署,助开发者掌握最新Java Web全栈开发实践。
786 1
|
9月前
|
存储 前端开发 Java
【JAVA】Java 项目实战之 Java Web 在线商城项目开发实战指南
本文介绍基于Java Web的在线商城技术方案与实现,涵盖三层架构设计、MySQL数据库建模及核心功能开发。通过Spring MVC + MyBatis + Thymeleaf实现商品展示、购物车等模块,提供完整代码示例,助力掌握Java Web项目实战技能。(238字)
1084 0
|
10月前
|
JavaScript Java 微服务
现代化 Java Web 在线商城项目技术方案与实战开发流程及核心功能实现详解
本项目基于Spring Boot 3与Vue 3构建现代化在线商城系统,采用微服务架构,整合Spring Cloud、Redis、MySQL等技术,涵盖用户认证、商品管理、购物车功能,并支持Docker容器化部署与Kubernetes编排。提供完整CI/CD流程,助力高效开发与扩展。
1070 64
|
10月前
|
前端开发 Java 数据库
Java 项目实战从入门到精通 :Java Web 在线商城项目开发指南
本文介绍了一个基于Java Web的在线商城项目,涵盖技术方案与应用实例。项目采用Spring、Spring MVC和MyBatis框架,结合MySQL数据库,实现商品展示、购物车、用户注册登录等核心功能。通过Spring Boot快速搭建项目结构,使用JPA进行数据持久化,并通过Thymeleaf模板展示页面。项目结构清晰,适合Java Web初学者学习与拓展。
590 1
|
11月前
|
缓存 NoSQL Java
Java Web 从入门到精通之苍穹外卖项目实战技巧
本项目为JavaWeb综合实战案例——苍穹外卖系统,涵盖Spring Boot 3、Spring Cloud Alibaba、Vue 3等主流技术栈,涉及用户认证、订单处理、Redis缓存、分布式事务、系统监控及Docker部署等核心功能,助你掌握企业级项目开发全流程。
1066 0
|
11月前
|
安全 JavaScript Java
java Web 项目完整案例实操指南包含从搭建到部署的详细步骤及热门长尾关键词解析的实操指南
本项目为一个完整的JavaWeb应用案例,采用Spring Boot 3、Vue 3、MySQL、Redis等最新技术栈,涵盖前后端分离架构设计、RESTful API开发、JWT安全认证、Docker容器化部署等内容,适合掌握企业级Web项目全流程开发与部署。
950 0
|
网络协议 Java Shell
java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
1082 7
|
8月前
|
算法 Java Go
【GoGin】(1)上手Go Gin 基于Go语言开发的Web框架,本文介绍了各种路由的配置信息;包含各场景下请求参数的基本传入接收
gin 框架中采用的路优酷是基于httprouter做的是一个高性能的 HTTP 请求路由器,适用于 Go 语言。它的设计目标是提供高效的路由匹配和低内存占用,特别适合需要高性能和简单路由的应用场景。
610 4
|
12月前
|
缓存 JavaScript 前端开发
鸿蒙5开发宝藏案例分享---Web开发优化案例分享
本文深入解读鸿蒙官方文档中的 `ArkWeb` 性能优化技巧,从预启动进程到预渲染,涵盖预下载、预连接、预取POST等八大优化策略。通过代码示例详解如何提升Web页面加载速度,助你打造流畅的HarmonyOS应用体验。内容实用,按需选用,让H5页面快到飞起!
|
12月前
|
JavaScript 前端开发 API
鸿蒙5开发宝藏案例分享---Web加载时延优化解析
本文深入解析了鸿蒙开发中Web加载完成时延的优化技巧,结合官方案例与实际代码,助你提升性能。核心内容包括:使用DevEco Profiler和DevTools定位瓶颈、四大优化方向(资源合并、接口预取、图片懒加载、任务拆解)及高频手段总结。同时提供性能优化黄金准则,如首屏资源控制在300KB内、关键接口响应≤200ms等,帮助开发者实现丝般流畅体验。