我正在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模板的方法有关?这似乎没有意义..
1条答案
按热度按时间i1icjdpr1#
@GetMapping()处理对任何URI路径的请求,因此如果您有GetMapping(“/test”),则此函数或类将处理对example.org/test的GET请求。您还可以使用@RequestMapping(“/something”)来注解类以前置路径,因此组合将是'example.org/something/test',并将由GetMapping注解函数处理