Spring MVC
导入jar
<!--JSON依赖-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.4.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.4.3</version>
</dependency>
Spring MVC常用注解
使用注解前应扫包并开启注解
<!--自动扫描的包名,只扫描@Controller -->
<context:component-scan base-package="com.hz.controller" >
<!--开启注解-->
<mvc:annotation-driven/>
@Controller
标注一个普通的JavaBean成为可以处理请求的控制器
@RequestMapping
通过请求URL进行映射
//标识在类上
@RequestMapping("/index")
public class IndexController{
//在方法上
@RequestMapping(value="/ts",method = RequestMethod.GET)
public ModelAndView index(){
.....
}
method:
RequestMethod.GET 必须以GET方式进入 @GetMapping
RequestMethod.POST 必须以POST方式进入 @PostMapping
params:
{ "param1=value1" , "param2" , "!param3" }
请求参数的映射条件,指定请求的URL地址需要带那些参数
@RequestParam
参数传递
public ModelAndView index(@RequestParam(value = "name1",required = false) String user_name)
{
.......
}
value:属性名,如:xxxx?name1=...
required:是否必须 false为否
defaultValue:默认值
通过实体类接收参数
传入参数名必须与实体类对应,一般用于添加,修改类中多个属性时
@RequestMapping(value="/ts1")
public String index1(User user)
{
System.out.println(user.getUser_name());
return "user";
}
参数传递
ModelAndView
包含视图信息和模型数据信息
public ModelAndView index1(){
//返回页面 转发
ModelAndView mav = new ModelAndView("视图名");
或
ModelAndView mav = new ModelAndView();
mav.setViewName("视图名");
//存入值 Request作用域
mav.addObject("键","值");
return mav;
}
Model
以Map方式进行存储,用于向作用域中存值
public String index1(Model model)
{
model.addAttribute("user_name","张三");
return "user"; //返回user.jsp页面
}
注意:在Model中增加模型数据,若不指定key,则默认使用对象的类型作为key
Map
以Map方式进行存储,用于向作用域中存值
public String index1(Map<String ,Object> map)
{
map.put("user_name","123");
return "user";
}
@ModelAttribute
@RequestMapping(value="/ts1")
public String index1(@ModelAttribute("user") User user)
{
user.setUser_name("张三");
System.out.println(user.getUser_name());
return "user";
}
@SessionAttributes
只能定义在类上,作用是将指定的Model中的键值对添加至session中
//类中定义user_name存入session作用域
@SessionAttributes(value = {"user_name"})
public class IndexController {
@RequestMapping("/ts")
public ModelAndView index(){
ModelAndView mav = new ModelAndView("user");
//存入Request作用域和Session作用域
mav.addObject("user_name",user_name);
....
}
}
@SessionAttributes(types=User.class)会将model中所有类型为 User的属性添加到会话中。
@SessionAttributes(value={“user1”, “user2”}) 会将model中属性名为user1和user2的属性添加到会话中。
@SessionAttributes(types={User.class, Dept.class}) 会将model中所有类型为 User和Dept的属性添加到会话中。
@SessionAttributes(value={“user1”,“user2”},types={Dept.class})会将model中属性名为user1和user2以及类型为Dept的属性添加到会话中。
servlet方式
引入servlet-api.jar
<!--servlet-api-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
public String cs(HttpServletRequest request, HttpServletResponse response, HttpSession session){
session.setAttribute("username","123");
return "user";
}
重定向与转发
public String index1(User user)
{
.....
return "redirect:/user.jsp";//重定向
return "forward:页面";//转发
}
@ResponseBody
返回JSON数据 一般用于方法上
引入JSON依赖包
<!--JSON依赖-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.4.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.4.3</version>
</dependency>
@ResponseBody
@RequestMapping("/testjson")
public User jsons(@RequestParam long user_id){
User user = this.userService.getUserById(user_id);
return user;//直接返回对象
}
对象中添加:
@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
表示属性为null不返回
@RestController
标注该类中所有的方法都返回JSON 用于类中。无须在写@Controller
@DateTimeFormat
用户对象属性,控制入参时日期类型转换
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date user_login_endtime;
@RequestHeader
获取请求头中的参数
@ResponseBody
@RequestMapping(value = "/index",method = RequestMethod.POST)
public User index(@RequestHeader(value = "token",defaultValue = "1",required = false) int tokenid){
......
}
@JsonFormat
返回JSON数据时日期类型处理
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date user_login_endtime;
REST风格
@RequestMapping(value="/ts1/{user_id}.html")
public String index1(@PathVariable("user_id") Long user_id)
{
System.out.println("id======"+user_id);
return "user";
}
请求路径为:.../ts1/参数.html
如:..../ts1/1.html或..../ts1/10.html
Spring MVC框架特点
清晰地角色划分
灵活的配置功能
提供了大量的控制器接口和实现类
真正做到与View层的实现无关(JSP、Velocity、Xslt等)
国际化支持
面向接口编程
Spring提供了Web应用开发的一整套流程,不仅仅是MVC,他们之间可以很方便的结合一起