java面试基础

HTTP 协议特点

  • 基于请求 - 响应模型:客户端主动发起请求,服务器被动响应。
  • 无状态:服务器不会保存客户端的任何历史信息,每次请求相互独立。
  • 无连接:每次请求响应完成后立即断开连接,不长期占用资源。
  • 简单灵活:协议格式简单,支持多种数据类型(HTML、图片、JSON 等)。
  • 明文传输:默认不加密,数据易被窃取和篡改(HTTPS 解决此问题)。
  • 支持客户端 / 服务器模式:基于 B/S 架构(浏览器 / 服务器)。

get和post请求的区别

  • 参数位置不同

    • GET:参数拼接在URL 后面,可见
    • POST:参数放在请求体中,不可见
  • 数据大小限制不同

    • GET:有长度限制,传输数据小
    • POST:理论无限制,适合传大量数据
  • 安全性不同

    • GET:不安全,参数明文显示
    • POST:相对安全,参数不直接暴露
  • 缓存与书签

    • GET:会被浏览器缓存、可收藏为书签
    • POST:不会缓存,不能收藏
  • 用途不同

    • GET:用于查询、获取数据
    • POST:用于提交表单、上传文件、敏感操作

请求乱码产生的原因

  1. 浏览器与服务器编码格式不一致 浏览器用 UTF-8 发送,服务器默认用 ISO-8859-1 解析,不兼容就乱码。

  2. GET 与 POST 乱码位置不同

    • GET:参数在 URL 里,由 服务器(Tomcat) 编码解析
    • POST:参数在请求体里,由 request 解析
  3. 未统一设置字符编码 没有显式设置 request.setCharacterEncoding("UTF-8"),导致解析错误。

如何来处理get请求产生的乱码

修改 Tomcat 配置文件(推荐)

1. 找到并打开 server.xml 路径通常在:Tomcat安装目录/conf/server.xml

2. 找到 Connector 标签,添加编码配置 在 <Connector port="8080" ...> 这一行里,直接加上这两个属性:

XML 复制代码
<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443"
           URIEncoding="UTF-8"  <!-- 重点:添加这一行 -->
           useBodyEncodingForURI="true"/> <!-- 重点:添加这一行 -->

3.重启 Tomcat 服务器这样 Tomcat 就会永远用 UTF-8 解析所有 GET 请求,乱码彻底解决。

方案二:代码手动转码(临时应急)

java 复制代码
// 假设乱码的参数名叫 username
String name = request.getParameter("username");

// 手动转码:先按 ISO-8859-1 解码,再用 UTF-8 编码
name = new String(name.getBytes("ISO-8859-1"), "UTF-8");

Request生命周期

客户端请求

↓

服务器解析请求 → 创建 HttpServletRequest

↓

Web 容器定位 Servlet → 实例化 + 调用 init() (仅一次)

↓

调用 service() → 调用 doGet/doPost (处理业务逻辑, 持续整个请求过程)

↓

构建响应 → 发送给客户端

↓

请求结束 → 销毁局部资源

↓

服务器关闭 → 调用 destroy() (仅一次) → 释放核心资源

如何处理响应乱码

  • 检查源头 :确认后端代码、数据库、接口返回的所有数据编码均为 UTF-8。
  • 检查传输 :确保 HTTP 请求 / 响应头中明确指定 charset=UTF-8(如 Content-Type)。
  • 检查接收端:前端页面、AJAX、客户端应用是否统一使用 UTF-8 解析数据。
  • 工具验证 :使用浏览器开发者工具(Network 面板)查看请求 / 响应的 Content-Type 和实际数据,定位具体乱码环节。
相关推荐
不是万能的豆学长4 小时前
filetidy 文件整理助手:一键归类 + 规范重命名(Python 零依赖单文件工具)
大数据·开发语言·python·技术美术
时间静止不是简史4 小时前
生产事故排查:Redis 宕机导致补偿队列消费线程死亡,通话录音未上送业务平台
java·redis
2301_32241428047 小时前
基于SpringBoot+Vue的休闲零食超市管理系统的设计与实现59004-计算机毕设 原创(免费领源码+部署教程+开发环境)
java·vue.js·spring boot·redis·mysql·决策树·推荐算法
懂点Tech8 小时前
ctfshow MISC入门图片篇(信息附加):misc41解题思路
开发语言·python
金銀銅鐵9 小时前
[Java] 用 GUI 展示 EnumSet 增减元素时的内部变化(上)
java·后端·ai编程
catchadmin9 小时前
PHP 8.7 协程新提案 让跨协程代码共享请求身份
开发语言·php
福建佰胜张工9 小时前
SMC 薄型气爪 MHF2-16D1 深度解析:平行开闭、低剖面结构在自动化装配中的选型与落地
java·服务器·安全·自动化
念何架构之路9 小时前
go-grpc设计思想
开发语言·后端·golang
catoop10 小时前
API Key 设计与安全生成方案:结构拆解、数据库设计与 Java 实现
java·数据库·安全
system_error_x10 小时前
SpringBoot 集成 Thymeleaf 简洁入门
java·spring boot·后端