示例 @RequestAttribute注解和@SessionAttribute注解的使用
新建一个项目AttributeTest
,加入所需的jar
文件,示例代码如下:
index.jsp
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>@RequestAttribute和@SessionAttribute测试</title> </head> <body> <h2>@RequestAttribute和@SessionAttribute测试</h2> <a href="attrbuteTest">测试@RequestAttribute和@SessionAttribute</a> <br> </body> </html>
|
AttributeController.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| package org.fkit.controller;
import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.SessionAttribute; import org.springframework.web.servlet.ModelAndView;
@Controller public class AttributeController { @GetMapping(value = "/attrbuteTest") public ModelAndView attrbuteTest(ModelAndView mv) { System.out.println("attributeTest方法被调用..."); mv.setViewName("redirect:main"); return mv; }
@RequestMapping("/main") public String main(@RequestAttribute("name") String name, @SessionAttribute("sex") String sex) { System.out.println("main方法被调用..."); System.out.println("name: " + name); System.out.println("sex: " + sex); return "welcome"; } }
|
attributeTest
方法处理请求后重定向到main
请求,main
请求会被自定义过滤器拦截,在过滤器中会分别设置两个属性到request
作用域和session
作用域。在main
方法中使用@RequestAttribute
和@SessionAttribute
进行赋值。
TestAttributeFilter.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| package org.fkit.filter;
import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest;
@WebFilter(value = "/main") public class TestAttributeFilter implements Filter { @Override public void destroy() { } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println("进入AuthFilter过滤器的doFilter方法"); HttpServletRequest httpRequest = (HttpServletRequest) request; httpRequest.setAttribute("name", "小明"); httpRequest.getSession().setAttribute("sex", "男"); chain.doFilter(httpRequest, response); } @Override public void init(FilterConfig arg0) throws ServletException { } }
|
TestAttributeFilter
过滤器拦截"main"
请求,在dofilter
方法中分别设置两个属性到request
作用域和session
作用域。
部署AttributeTest
这个Web
应用,在浏览器中输入如下URL
来测试应用:
1
| http://localhost:8080/AttributeTest/
|
单击测试@RequestAttribute和@SessionAttribute"
超链接发送请求,将调用attrbuteTest
方法,然后经过过滤器,重定向到main
方法,控制台输出结果如下:
1 2 3 4 5
| attributeTest方法被调用... 进入AuthFilter过滤器的doFilter方法 main方法被调用... name: 小明 sex: 男
|
浏览器显示内容:
可以看到, request
作用域中的name
的值被传递到请求处理方法main
的name
变量, session
作用域中的sex
的值被传递到请求处理方法main
的sex
变量,并输出打印在控制台。
原文链接: 示例 @RequestAttribute注解和@SessionAttribute注解的使用