首先我是一个初学springmvc,抱着去强化映像的目标去整理有关springmvc4的连带声明,同时也愿意给须求相关查阅的读者带来支持。

1.@Controller
Controller控制器是透过劳务接口定义的提供访问应用程序的一种表现,它表达用户的输入,将其转换成一个模型然后将准备呈献给用户。Spring MVC 使用
@Controller
定义控制器,它还允许自动检测定义在类路径下的零部件并自行注册。如想自动检测生效,需在xml头文件下引入
spring-context:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:p="http://www.springframework.org/schema/p" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
    <context:component-scan base-package="com.chen" />
</beans>

2.@RequestMapping
RequestMapping 注明将看似
“/admin”那样的URL映射到任何类或一定的拍卖方法上。一般的话,类级其他诠释映射特定的乞求路径到表单控制器上,而艺术级其余注释只是映射
为一个特定的HTTP方法请求(”GET”,”POST”等)或HTTP请求参数。

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
@RequestMapping("admin")
public class LoginController {

    @RequestMapping(value = "login" , method = RequestMethod.GET , consumes = "text/html")
    public String toLoginPage(){
        return "/WEB-INF/jsp/login.jsp";
    }
}

上述url的造访地址应该是:localhost:8080/proj/admin/login.html
consumes-指定处理请求的交付内容类型Content-Type,例如
application/json,text/html。
produces-指定重返的情节类型,仅当request请求头中的(Accept)类型中包蕴该指定项目才回来。
value-指定请求的莫过于地址,指定的地点能够是URI Template 形式

A) 可以指定为平日的具体值;
B) 可以指定为含有某变量的一类值(URI Template Patterns with Path
Variables);
C) 能够指定为含正则表达式的一类值( URI Template Patterns with Regular
Expressions);

一般来说示例:

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
public class BlogController {

    @RequestMapping(value = "blog/{nick}/{year:20\\d{2}}/{month:1|1[0-2]}/{day:[12][0-9]|30|[1-9]}" , method = RequestMethod.GET)
    public String toBlogPage(@PathVariable String nick,
            @PathVariable Integer year,@PathVariable Integer month,@PathVariable Integer day){
        return "/WEB-INF/jsp/blog.jsp";
    }
}

 

params-指定request中必须包罗某些参数值是,才让该方法处理。
headers-指定request中务必包括某些指定的header值,才能让该方法处理请求。

正如示例:

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
public class BlogController {

    //仅处理request的header中包含了指定“Refer”请求头和对应值为“http://www.ttyouni.com/”的请求
    @RequestMapping(value = "image", headers="Referer=http://www.ttyouni.com/" )
    public String getImage(){
        return "/WEB-INF/jsp/image.jsp";
    }
}

3.@RathVariable
在Spring
MVC中,可以使用 @PathVariable
表明方法参数并将其绑定到URI模板变量的值上,之前示例中也有连带反映。
4.@RequestParam
@RequestParam将请求的参数绑定到艺术中的参数上。其实就是不布署该参数,注解也会默许使用该参数。如果想自定义指定参数的话,可以将@RequestParam的
required 属性设置为false。
5.@RequestBody
@RequestBody是指方法参数应该被绑定到HTTP请求Body上。
6.@SessionAttibutes
@SessionAttibutes可以因而ModelMap对象的put操作设置相关的session同时在attibute对象也会有该目的。

演示如下:

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.SessionAttributes;

import com.chen.proj.service.UserService;

@Controller
@RequestMapping("admin")
@SessionAttributes("user")
public class LoginController {

    @Resource
    UserService service;

    @RequestMapping(value = "doLogin", method = RequestMethod.POST)
    public String doLogin(@RequestParam String username , @RequestParam String password, HttpServletRequest request, 
            ModelMap map ){     
        try {
            User user = service.doLogin(username, password); 
            map.put("user", user);
        } catch (Exception e) {
            request.setAttribute("error", e.getMessage());
            return "/WEB-INF/jsp/login.jsp";
        }       
        return "/WEB-INF/jsp/loginsuccess.jsp";
    }

}

7.**@ResponseBody**

@ResponseBody与@RequestBody类似,它的作用是将赶回类型直接输入到HTTP
response body中。@ResponseBody在出口JSON格式的数据时会用到。

示范如下:

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.chen.proj.bean.User;

@Controller
public class JsonController {

    @ResponseBody
    @RequestMapping("/getJson")
    public User getUserInfo(){
        User user = new User();
        user.setPassword("1234");
        user.setUsername("jsontest");
        return user;
    }    
}

 

 

8.**@RestController**

 大家平日来看一些控制器落成了REST的API,只为服务于json,xml或任何自定义的项目内容。@RestController用来创建REST类型的控制器,与@Controller类型。@RestController就是这样一种类型,它防止了您重新的写@RequestMapping与@ResponseBody

 

9.**@ModelAttribute**

@ModelAttribute可以功效在章程或措施参数上,当它功用在措施上时,标明该措施的目标是添加一个或八个模型属性。
当功用在方式参数上时,申明该参数可以在点子模型中寻找到。如若该参数不在当前模型中,该参数先被实例化然后添加到模型中。一旦模型中有了该参数,该参数的字段应该填充所有请求参数匹配的称呼中。那是spring
mvc中重点的数据绑定机制,它省去了独自解析每个表单字段的光阴。

 

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import com.chen.proj.bean.User;

@Controller
public class UserController {

    @ModelAttribute
    public User addUser(@RequestParam String number) {
        return service.findUser(number);
    }

    @ModelAttribute
    public void populateModel(@RequestParam String number, Model model) {
        model.addAttribute(service.findUser(number));    
        // add more ...
    }
}

表明的面世了断了xml配置文件漫天飞的年代,它让程序有所更高的可读性,可配置性与灵活性。给人一种更简洁明了的感觉到。

相关文章

网站地图xml地图