jboss 不理解GetMapping()

izj3ouym  于 2023-10-20  发布在  其他
关注(0)|答案(1)|浏览(181)

我正在JBoss服务器上使用Sping Boot 应用程序。我是Java、Spring和JBoss的新手。
我正在学习https://www.javainuse.com/spring/springboot_session中的会话管理示例
我运行了这个代码:

package private.prototype1;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
public class SpringSessionController {

    @GetMapping("/")
    public String process(Model model, HttpSession session) {
        @SuppressWarnings("unchecked")
        List<String> messages = (List<String>) session.getAttribute("MY_SESSION_MESSAGES");

        if (messages == null) {
            messages = new ArrayList<>();
        }
        model.addAttribute("sessionMessages", messages);

        return "index";
    }

    @PostMapping("/persistMessage")
    public String persistMessage(@RequestParam("msg") String msg, HttpServletRequest request) {
        @SuppressWarnings("unchecked")
        List<String> messages = (List<String>) request.getSession().getAttribute("MY_SESSION_MESSAGES");
        if (messages == null) {
            messages = new ArrayList<>();
            request.getSession().setAttribute("MY_SESSION_MESSAGES", messages);
        }
        messages.add(msg);
        request.getSession().setAttribute("MY_SESSION_MESSAGES", messages);
        return "redirect:/";
    }

    @PostMapping("/destroy")
    public String destroySession(HttpServletRequest request) {
        request.getSession().invalidate();
        return "redirect:/";
    }
}

当我运行它并转到myurl/prototype 1/时,我得到了一个空白页。所以我把GetMapping改为/test...没有什么好的解释,只是看起来像是一种尝试

package private.prototype1;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
public class SpringSessionController {

    @GetMapping("/test")
    public String process(Model model, HttpSession session) {
        @SuppressWarnings("unchecked")
        List<String> messages = (List<String>) session.getAttribute("MY_SESSION_MESSAGES");

        if (messages == null) {
            messages = new ArrayList<>();
        }
        model.addAttribute("sessionMessages", messages);

        return "index";
    }

    @PostMapping("/persistMessage")
    public String persistMessage(@RequestParam("msg") String msg, HttpServletRequest request) {
        @SuppressWarnings("unchecked")
        List<String> messages = (List<String>) request.getSession().getAttribute("MY_SESSION_MESSAGES");
        if (messages == null) {
            messages = new ArrayList<>();
            request.getSession().setAttribute("MY_SESSION_MESSAGES", messages);
        }
        messages.add(msg);
        request.getSession().setAttribute("MY_SESSION_MESSAGES", messages);
        return "redirect:/";
    }

    @PostMapping("/destroy")
    public String destroySession(HttpServletRequest request) {
        request.getSession().invalidate();
        return "redirect:/";
    }
}

我把它部署到JBoss服务器上。
我回到myurl/prototype 1/并刷新,看看我是否得到了一个Not Found错误,而不是白色页面。令人惊讶的是,我得到了页面...我希望它已经被移动到myurl/prototype 1/test,但它在muyrl/prototype 1。
另外,myurl/prototype 1/test显示一个空白页。
我想确保我实际上运行的是我刚刚更改的代码,所以我在index.html的头文件后面添加了一个“2”,并再次部署它

“2”出现了。
我还查看了来自JBoss的源代码,它正确部署了:

它显示了/testMap...
我只能假设我只是不明白@GetMapping()是如何工作的。有谁能帮我理清头绪吗?
编辑:我也试着把它改为@GetMapping(“/asdf”),但页面仍然显示在/和/asdf是空白的。这是否与使用index.html模板的方法有关?这似乎没有意义..

i1icjdpr

i1icjdpr1#

@GetMapping()处理对任何URI路径的请求,因此如果您有GetMapping(“/test”),则此函数或类将处理对example.org/test的GET请求。您还可以使用@RequestMapping(“/something”)来注解类以前置路径,因此组合将是'example.org/something/test',并将由GetMapping注解函数处理

相关问题