Spring MVC示例及常用注解(二)
来源:互联网 发布:js监听事件开始和结束 编辑:程序博客网 时间:2024/05/22 03:03
纸上得来终觉浅
1.Spring MVC方法的参数
1)可以使用POJO对象绑定请求参数值
2)使用Servlet API作为入参,可以使用如下类型的参数:
2.处理模型数据
1)ModelAndView,设置方法的返回值类型为ModelAndView,示例如下:
HelloWorld.java:
public class HelloWorld {@RequestMapping("/helloMVC")public ModelAndView helloWorld(){System.out.println("HelloWorld.helloWorld()");ModelAndView mv = new ModelAndView();User user = new User();user.setAge("10");user.setName("zhang");mv.setViewName("view");mv.addObject("nihao",user);return mv;}}
view.jsp:
${requestScope.nihao}注:放入mv中的对象的作用域是request;
2)方法的入参为Map:
HelloWorld.java:
package roadArchitectWeb.Test;import java.util.HashMap;import java.util.Map;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.CookieValue;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.servlet.ModelAndView;@Controllerpublic class HelloWorld {@RequestMapping("/helloMVC")public String helloWorld(Map<String,Object> map){User user = new User();user.setAge("10");user.setName("li");map.put("nihao", user);return "view";}}view.jsp文件不变
注:放入map中的作用域也是request;
3)@SessionAttributes
HelloWorld.java:
package roadArchitectWeb.Test;import java.util.Map;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.SessionAttributes;//使用SessionAttribute注解后,session域中保存了相关的对象@SessionAttributes(value={"nihao"},types={Student.class})@Controllerpublic class HelloWorld {@RequestMapping("/helloMVC")public String helloWorld(Map<String,Object> map){User user = new User();user.setAge("10");user.setName("li");/*user既在request中,也在session中保存*/map.put("nihao", user);Student student = new Student();student.setHigh(100);student.setName("zhou");/*这个对象只在session域中保存*/map.put("nihao2",student);return "view";}}view.jsp:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Insert title here</title></head><body>${requestScope.nihao}<br><br>${sessionScope.nihao}<br><br>${sessionScope.nihao2}<br><br></body></html>4)@ModelAttribute注解
HelloWorld.java:
package roadArchitectWeb.Test;import java.util.Map;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.ModelAttribute;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.SessionAttributes;//使用SessionAttribute注解后,session域中保存了相关的对象@SessionAttributes(value={"nihao"})@Controllerpublic class HelloWorld {@ModelAttributepublic void Attr(@RequestParam(value="id",required=false) Integer id,Map<String, Object> map){User user = new User();user.setAge("12");user.setName("zhao");map.put("key",user);}@RequestMapping("/helloMVC")public void helloWorld(@ModelAttribute("key") User user){System.out.println("HelloWorld.helloWorld():"+user);}@RequestMapping("/hello")public String index(){return "view";}}view.jsp:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Insert title here</title></head><body><form action="/roadArchitectWeb/helloMVC">age:<input type="text" name="age"></input><input type="submit" value="submit"></input></form></body></html>Student.java:
package roadArchitectWeb.Test;public class Student {private String name;private Integer high;public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getHigh() {return high;}public void setHigh(Integer high) {this.high = high;}@Overridepublic String toString() {return "Student [name=" + name + ", high=" + high + "]";}}注:@ModelAttribute解决了这样一个问题,一般来说,当需要对数据库中的一天记录进行修改时,有两种不是很好的方法:
A)把数据取出来,放入jsp页面中,包括密码等,然后修改后再从jsp返回,这样的做法不安全;
B)把需要修改的数据放入jsp中,从jsp返回到后台时,根据ID重新查找这条记录,然后将修改的数据覆盖原来的数据;这样每次都要查询,代码重用率较低,可以把重新查找写成一个方法,这就是@ModelAttribute的作用;
3.@SessionAttributes引发的异常
紧跟这上面的代码,如果我们把He
@RequestMapping("/helloMVC")public void helloWorld(@ModelAttribute("nihao") User user){System.out.println("HelloWorld.helloWorld():"+user);}@ModelAttribute的值由“key”改为”nihao“,会引发这样一个异常:
org.springframework.web.HttpSessionRequiredException: Session attribute 'nihao' required - not found in session这就引出了一个问题,给参数进行@ModelAttribute注解时,查找“key”的顺序:
1)首先会查找@ModelAttribute修饰的方法,找到方法中的map(map是方法的参数)中存放的key;没有查找下一条
2)查找@SessionAttributes的value,如果有这样一个value,则会按照1)进行查找,这个时候一定是查找不到的,所以会报异常; 没有查找下一条
3)这时会用发射的方法新建一个对象;
0 0
- Spring MVC示例及常用注解(二)
- Spring MVC示例及常用注解(一)
- spring mvc常用注解含义的解释及示例
- Spring MVC学习(二)常用注解
- springboot常用注解(包含spring及MVC)
- Spring MVC(九)常用注解及例子
- spring mvc 常用注解
- Spring Mvc常用注解
- Spring mvc常用注解
- spring mvc常用注解
- Spring MVC常用注解
- Spring MVC & 常用注解
- Spring MVC 常用注解
- Spring MVC常用注解
- spring mvc常用注解
- Spring MVC 常用注解
- Spring MVC常用注解
- spring MVC 常用注解
- 用devstack快速部署 openstack
- 第10章 C# 数据库编程技术
- Struts2 Unexpected Exception提交表单控制台报Exception
- 昂贵的聘礼 最短路 dijkstra
- Python程序-打印斐波拉契数列
- Spring MVC示例及常用注解(二)
- Scala正则使用
- HBase简介(很好的梳理资料)
- Tomcat 的运行机制
- WebView实现html文件选择(input type=file),兼容安卓6.0
- poj 1120题目难懂啊
- Struts2国际化
- 如何快速又正确地在C++里实现锁
- OSG问题记录