Xử lý phản hồi và điều hướng trang trong Spring MVC

Trang JSP: success.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
    <title>Thành công</title>
</head>
<body>
<div>
    <h1>Thông tin người dùng</h1>
    <div>Họ tên: ${user.name}</div>
    <div>Tuổi: ${requestScope.user.age}</div>
</div>
</body>
</html>

1. Trả về kiểu String để điều hướng

@RequestMapping("/stringTest")
public String handleWithString(Model model) {
    UserInfo userInfo = new UserInfo();
    userInfo.setName("Nguyễn Văn A");
    userInfo.setAge(25);
    model.addAttribute("user", userInfo);
    return "success"; // Tên view (JSP)
}

2. Phương thức trả về void

Khi không trả về giá trị, Spring MVC sẽ không tự động xử lý view. Cần chủ động điều hướng bằng HttpServletRequest hoặc HttpServletResponse.

@RequestMapping("/voidTest")
public void handleWithVoid(HttpServletRequest req, HttpServletResponse res, 
                          @RequestParam String action) throws ServletException, IOException {
    UserInfo user = new UserInfo();
    user.setName("Lê Thị B");
    user.setAge(30);
    req.setAttribute("user", user);

    if ("forward".equals(action)) {
        req.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(req, res);
    } else if ("redirect".equals(action)) {
        res.sendRedirect(req.getContextPath() + "/stringTest");
    } else if ("direct".equals(action)) {
        res.setContentType("text/html; charset=UTF-8");
        PrintWriter out = res.getWriter();
        out.println("<html><head><title>Kết quả trực tiếp</title></head><body>" +
                    "<h1>Thông tin người dùng</h1>" +
                    "<p>Họ tên: " + user.getName() + "</p>" +
                    "<p>Tuổi: " + user.getAge() + "</p>" +
                    "</body></html>");
    }
}

3. Trả dữ liệu JSON qua @ResponseBody

3.1 Cấu hình hỗ trợ JSON

Bước 1: Thêm thư viện Jackson vào pom.xml:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.0</version>
</dependency>

Bước 2: Cấu hình tài nguyên tĩnh trong springmvc.xml để tránh chặn file JS/CSS:

<mvc:resources location="/js/" mapping="/js/**"/>
<mvc:resources location="/css/" mapping="/css/**"/>

3.2 Triển khai AJAX với jQuery

Trong JSP:

<input type="button" id="btnJson" value="Gửi yêu cầu JSON"/>
<script src="/js/jquery.min.js"></script>
<script>
$(function() {
    $("#btnJson").click(function() {
        $.ajax({
            type: "POST",
            url: "${pageContext.request.contextPath}/responseJsonTest",
            contentType: "application/json; charset=utf-8",
            data: JSON.stringify({ name: "Trần Văn C", age: 28 }),
            dataType: "json",
            success: function(resp) {
                alert(`Tên: ${resp.name}, Tuổi: ${resp.age}`);
            }
        });
    });
});
</script>

Controller:

@RequestMapping("/responseJsonTest")
@ResponseBody
public UserInfo handleJsonRequest(@RequestBody UserInfo inputUser) {
    System.out.println("Nhận từ client: " + inputUser);
    inputUser.setName("Phạm Thị D");
    inputUser.setAge(35);
    return inputUser; // Tự động chuyển sang JSON
}

Thẻ: SpringMVC Java Web JSP JSON ajax

Đăng vào ngày 17 tháng 7 lúc 01:40