1.将请求数据传入后台处理
1.1 使用默认内置视图解析器·ViewResolver
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/"/>
<property name="suffix" value=".jsp"/>
</bean>
1.2 使用视图控制器·ViewController
直接跳转页面而不经过后台的逻辑处理
<mvc:view-controller path="/" view-name="index" />
注意!必须在web>WEB-INF
文件夹下有同名对应的文件,否则会报错
2.传输数据到视图
2.1 使用Model、Map、ModelMap传输数据到页面
- Model方式
@RequestMapping("/testmodel")public String testModel(Model model){ model.setAttribute("key01","value"); return "index";}
- Map方式
@RequestMapping("/testmap")public String testMap(Map map){ map.setAttribute("key01","value"); return "index";}
- ModelMap方式
@RequestMapping("/testmodelmap")public String testModelMap(ModelMap modelmap){ modelmap.put("key01","value"); return "index";}
这三种方式底层都是传输的他们共有的实现类BindingAwareModelMap
.
2.2 使用ModelAndView对象传输数据到页面
ModelAndView可以同时封装数据和视图
@RequestMapping("/testmodelandview")
public String testModelAndValue() {
ModelAndView modelandvalue = new ModelAndView("main");
modelandvalue.setAttribute("key01","value");
return modelandvalue;
}
2.3 使用session传输数据到页面
2.3.1 通过servlet api的方式去读写session
- 通过参数绑定的方式去获取servlet api
@RequestMapping("/testsession01")
public String testSession01(HttpSession session){
session.setAttribute("key01","value");
return "index";
}
- 通过自动注入的方式去获取servlet api
@Autowried
private HttpSession session;
@RequestMapping("/testsession02")
public String testSession02(){
session.setAttribute("key02","value");
return "index";
}
2.3.2 通过springmvc提供的注解方式去读写session
- @SessionAttributes
- 用在类上,负责写入session,对当前类下所有方法生效
- 依赖model,底层是从model中找同名的属性,找到了就在session设置一份一样的
- @SessionAttribute
- 用在参数上,负责读 取session
- model和session可以相互获取写入数据,在参数前设置@SessionAttribute(value=”mytest”)相当于隐式的向model里写入这个参数
- @SessionAttribute(value=”mytest”, required=false) 可以用来做设置该属性非必须存在(否则未传入时会报400错误)
@RequestMapping("/testsessionattribute")
public String testSessionAttribute(@SessionAttribute("mytest") String mytest){
System.out.println(mytest);
return "index";
}
4.使用@ModelAttribute来获取请求中的数据
常用场景
方法上:
// @ModelAttribute修饰的方法会在当前处理器中所有方法之前调用
@Autowried
private HttpSession session;
@ModelAttribute
public void testModelAttribute(HttpSession s){
this.session=s;
}
@ModelAttribute修饰的方法会在当前处理器中所有方法之前调用
- 可以全局变量赋值
@Autowried
private HttpSession session;
@ModelAttribute
public void testModelAttribute(HttpSession s){
this.session=s;
}
- 执行更新数据库操作时,用户提供的修改字段只有部分几个时,就会造成部分字段更新丢失
- SpringMVC在进行参数绑定以前,会将model中的跟参数名符合的属性拿出来进行合并,新提交的字段会被覆盖,缺失的会保留(用于一些无法定制SQL语句的框架,比如Hibernate)
参数上:可省略
5.页面转发【forward】与重定向【redirect】
forward转发的特点:
- 地址栏的请求不会发生变化,显示的还是第一次请求的地址
- 请求的次数:1次
- 请求域的数据不会丢失
- 根目录localhost:8080/项目地址/,包含了项目的访问地址
redirect重定向的特点:
- 地址栏的地址发生变化,显示最新请求的地址
- 请求次数:2次
- 请求域中的数据会丢失,因为是不同的请求
- 根目录:localhost:8080/不包含项目的名称(springmvc中无论转发还是重定向都会包含目名称)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/135473.html