返回

SpringMVC 核心技术点全解读:轻松实现参数获取和数据共享

后端

SpringMVC 参数获取和数据共享术

SpringMVC 作为 Java Web 开发的强大框架,提供了多种方式来获取请求参数和共享数据。掌握这些技术至关重要,因为它赋予开发人员构建健壮且用户友好的应用程序的能力。

参数获取

通过 ServletAPI

最直接的方式是使用 ServletAPI 的 request.getParameter() 方法。它返回一个请求参数的值,例如:

String username = request.getParameter("username");
String password = request.getParameter("password");

控制器方法形参

更优雅的方式是使用 @RequestParam 注解在控制器方法形参上。SpringMVC 会自动绑定请求参数到这些形参上,例如:

public String login(@RequestParam("username") String username,
                    @RequestParam("password") String password) {
    // 业务逻辑代码
}

POJO 对象绑定

如果需要处理复杂的参数,可以使用 POJO 对象绑定。创建与请求参数同名的 POJO,然后使用 @ModelAttribute 注解在控制器方法上。SpringMVC 将自动填充对象属性,例如:

public class User {
    private String username;
    private String password;
    // Getter and Setter methods
}

public String login(@ModelAttribute User user) {
    // 业务逻辑代码
}

乱码处理

对于中文等非 ASCII 字符,必须设置字符编码以避免乱码。使用 request.setCharacterEncoding("UTF-8") 设置字符编码。

数据共享

ServletAPI

要将数据共享到多个请求,可以使用 ServletAPI 的 request.setAttribute() 方法。它将数据存储在请求域中,例如:

request.setAttribute("username", username);
request.setAttribute("password", password);

ModelAndView

ModelAndView 是一个封装对象,用于存储数据和视图名称。它提供了一种一站式的数据共享方式,例如:

ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("username", username);
modelAndView.addObject("password", password);
modelAndView.setViewName("loginSuccess");

Model

Model 是一个轻量级的数据共享对象,可以传递给视图,例如:

Model model = new Model();
model.addAttribute("username", username);
model.addAttribute("password", password);

Map

Map 提供了一种灵活的数据共享方式,例如:

Map<String, Object> model = new HashMap<>();
model.put("username", username);
model.put("password", password);

ModelMap

ModelMap 是 Map 的增强版,提供了更便捷的链式操作,例如:

ModelMap modelMap = new ModelMap();
modelMap.addAttribute("username", username);
modelMap.addAttribute("password", password);

结论

SpringMVC 提供了一系列强大且灵活的技术来获取请求参数和共享数据。通过熟练掌握这些技术,开发人员可以构建出高效、健壮且易于维护的 Web 应用程序。

常见问题解答

  1. 如何处理多个相同名称的参数?

    • 使用 request.getParameterValues() 获取所有同名参数的值。
  2. 如何防止 XSS 攻击?

    • 使用 StringEscapeUtils.escapeHtml() 对输出进行转义。
  3. 如何将数据共享到重定向请求?

    • 使用 FlashMap 或会话来存储数据。
  4. 如何访问模型中的数据?

    • 在视图中使用 EL 表达式或 JSTL 标签访问模型数据。
  5. 如何从请求正文获取 JSON 数据?

    • 使用 @RequestBody 注解在控制器方法上,SpringMVC 会将 JSON 数据反序列化到指定的对象。