javaweb问题记录

1.$(function () {
$("#updateBtn").click(function () {
$.ajax({
url:'update',
type:'get',
contentType:'application/x-www-form-urlencoded;charset=UTF-8',
data:{
id:3,
name:"王五",
sex:"女",
age:20
},
success:function (resp) {
alert(resp);
}
})
})
})其中, String id = req.getParameter("id");
String name = req.getParameter("name");
String sex = req.getParameter("sex");
String age = req.getParameter("age");为什么不用获取属性的方法呢

在你的代码中,前端通过 AJAX 以 application/x-www-form-urlencoded 格式发送数据(这是 GET 请求的默认格式),后端使用 req.getParameter("xxx") 就能获取参数,这是由数据传输格式和 Servlet 的参数解析机制决定的,不需要额外的“获取属性的方法”,原因如下:

1. 数据传输格式与解析方式匹配

前端 AJAX 配置了 contentType: 'application/x-www-form-urlencoded;charset=UTF-8',这种格式会将数据转换为 key=value&key=value 的字符串(如 id=3&name=王五&sex=女&age=20),并附加在 URL 后(GET 请求)或放在请求体中(POST 请求)。

Servlet 容器(如 Tomcat)会自动解析这种格式的数据,并将参数存入 HttpServletRequest 的参数列表中,因此直接通过 req.getParameter("id") 就能获取,无需额外处理。

2. “属性”与“参数”的区别

  • getParameter("xxx"):用于获取前端显式传递的请求参数(如 URL 拼接的参数、表单提交的参数、AJAX 的 data 数据),适用于 application/x-www-form-urlencoded 等标准格式。

  • “获取属性的方法”(如 getAttribute("xxx")):用于获取后端在请求/会话范围内手动设置的属性(通过 setAttribute("key", value) 存储),例如:

    // 后端设置属性
    req.setAttribute("user", userObj); 
    // 后端获取属性
    User user = (User) req.getAttribute("user");
    

    这些属性是后端内部传递数据的方式,与前端发送的请求参数无关。

3. 何时需要其他方法?

如果前端发送的数据格式不是 application/x-www-form-urlencoded(例如 JSON 格式),则 getParameter 无法直接获取,需要使用流读取请求体并手动解析,例如:

// 前端发送 JSON 格式(需修改 contentType)
$.ajax({
  url: 'update',
  type: 'post',
  contentType: 'application/json', // JSON 格式
  data: JSON.stringify({id:3, name:"王五"}), // 转换为 JSON 字符串
  // ...
})

此时后端需要通过输入流读取 JSON 字符串,再用 JSON 解析库(如 Jackson、Gson)转换为对象:

// 后端读取 JSON 格式数据
BufferedReader reader = req.getReader();
String json = reader.lines().collect(Collectors.joining());
User user = new ObjectMapper().readValue(json, User.class); // 解析为对象

总结

你的代码中,前端使用了 Servlet 能直接解析的 application/x-www-form-urlencoded 格式,因此用 req.getParameter 是最直接高效的方式。而“获取属性的方法”(getAttribute)用于后端内部数据传递,与前端请求参数无关,因此不需要使用。

posted @ 2025-08-23 09:26  f-52Hertz  阅读(6)  评论(0)    收藏  举报