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)用于后端内部数据传递,与前端请求参数无关,因此不需要使用。
浙公网安备 33010602011771号