@RequestMapping("")注解的详细介绍
通过查询源代码:
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
public @interface RequestMapping {
String name() default "";
String[] value() default {};
}
2.3.1 @RequestMapping 应用在类上
表示窄化我们访问路径,利于模块化开发。
案例:
@Controller //交给spring管理:
@RequestMapping("/user")
public class HelloController {
@RequestMapping(value="/sayHello")
public ModelAndView sayHello() {
System.out.println("hello ...");
//准备一个对象;
ModelAndView mav =new ModelAndView(); //封装数据跳转的路径:
mav.setViewName("/WEB-INF/success.jsp");
return mav;
}
此时: 客户端浏览器发出请求的时候:
http://localhost:8080/springmvc-02/user/sayHello
2.3.2 @RequestMapping注解的属性详解
Name属性
@RequestMapping(name=”sayHello”)
Name属性是给当前的注解命名、 没有实质的作用。
http://localhost:8080/springmvc-02/user#sayHello
Value属性
@RequestMapping(value={“/sayHello”,”sayHelllo1”})
一个方法有多个映射路径:
@RequestMapping(value={“/sayHello”})
Value的属性值只有一个值的时候, {}可以省略 ,当只有一个value属性的时候, value可以省略的。
@RequestMapping(“/sayHello”)
Method属性:
@RequestMapping(value="/sayHello",method= {RequestMethod.POST,RequestMethod.GET})
Method属性指明了当前方法的请求方式。 可以是get,post,put。
Params属性(不常用)
@RequestMapping(value="/sayHello",params=“username”)
请求路径当中必须要携带key为username的参数。如果不携带, 请求不到该路径、404
@RequestMapping(value="/sayHello",params=“username=李四”)
请求路径当中必须要携带key为username的参数,切key对应的值必须是李四,此时能够请求到该路径。否则404
Headers属性
@RequestMapping(value="/sayHello"headers=“accept”)
Headers表明,请求头信息当中必须包含一个头是accept的头。 否则不行。
3 springmvc当中的参数绑定
3.1传统的方式获得方式
Get username=lisi&password=123
Post username=lisi&password=123
传统的方式获得参数:
Request.getParameter(“username”);
Request.getParameter(“password”);
3.2 springmvc可以通过参数的绑定获得参数
参数的绑定
username=lisi&password=123
Public ModelAndView getParameter(String username, String password ){
SYstem.out.println(username+”:”+password);
}
3.2.1 参数的绑定是简单数据类型(基本数据类型+String)
前端:
<a href="user/saveUser?username=wangwu&password=123" >测试参数</a><br/>
后端:
//方法的参数,绑定了基本数据类型: String ,int ,double ,float
@RequestMapping(value="/saveUser")
public ModelAndView saveUser(String username,int password) {
System.out.println("saveUser执行了"+username+":"+password);
ModelAndView mav =new ModelAndView(); //封装数据跳转的路径:
mav.setViewName("/WEB-INF/success.jsp");
return mav;
}
3.2.2 参数绑定的类型是pojo类型
前端:
<a href="user/updateUser?username=wangwu&password=123&age=21" >测试参数pojo类型</a><br/>
后端:
//方法的参数: 绑定的是一个pojo类型:
@RequestMapping(value="/updateUser")
public ModelAndView updateUser(User user) {
System.out.println("saveUser执行了"+user);
ModelAndView mav =new ModelAndView(); //封装数据跳转的路径:
mav.setViewName("/WEB-INF/success.jsp");
return mav;
}
3.2.3 参数绑定的类型是pojo类型的包装类型。
前端:
<a href="user/updateUser?username=wangwu&password=123&age=21&address.province=sd&address.city=qingdao" >测试参数pojo类型的包装类</a><br/>
后端:
@
RequestMapping(value="/saveUser2")
public ModelAndView saveUser2(User user) {//user对象当中封装了一个address对象: user pojo类型的包装类
System.out.println("saveUser执行了"+user);
ModelAndView mav =new ModelAndView(); //封装数据跳转的路径:
mav.setViewName("/WEB-INF/success.jsp");
return mav;
}
3.2.4 参数的绑定List集合类型
List集合当中的参数的类型: 简单类型
javaBean:
public class User implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
private String username;
private String password;
private Integer age;
//private List<String> hobbies;
private List<String> hobbies;
前端:
<form action="user/saveUser3">
username: <input type="text" name="username"/><br/>
password: <input type="text" name="password"/><br/>
age: <input type="text" name="age"/><br/>
hobby:<input type="text" name="hobbies[0]"/><br/>
hobby:<input type="text" name="hobbies[1]"/><br/>
<input type="submit" value="submit"/>
</form>
后端:
// 方法的参数: 绑定的是一个集合类型: List
@RequestMapping(value="/saveUser3")
public ModelAndView saveUser3(User user) {//user对象当中封装了一个List<String>
System.out.println("saveUser执行了"+user);
//[username=yezhipeng,123321, password=null, age=25, hobbies=[chiji, laomei]]
ModelAndView mav =new ModelAndView(); //封装数据跳转的路径:
mav.setViewName("/WEB-INF/success.jsp");
return mav;
}
List集合当中的参数的类型:对象的类型
Pojo:
public class User implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
private String username;
private String password;
private Integer age;
// private List<String> hobbies; //List集合
private List<Address> list;
前端:
<form action="user/saveUser3">
username: <input type="text" name="username"/><br/>
password: <input type="text" name="password"/><br/>
age: <input type="text" name="age"/><br/>
province1:<input type="text" name="list[0].province"/><br/>
city1 : <input type="text" name="list[0].city"/><br/>
province2:<input type="text" name="list[1].province"/><br/>
city2 :<input type="text" name="list[1].city"/><br/>
<input type="submit" value="submit"/>
</form>
后端:
// 方法的参数: 绑定的是一个集合类型: List
@RequestMapping(value="/saveUser3")
public ModelAndView saveUser3(User user) {//user对象当中封装了一个List<String>
System.out.println("saveUser执行了"+user);
ModelAndView mav =new ModelAndView(); //封装数据跳转的路径:
mav.setViewName("/WEB-INF/success.jsp");
return mav;
}
3.2.5 参数绑定Map集合类型
Pojo:
public class User implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
private String username;
private String password;
private Integer age;
// private List<String> hobbies; //List集合
// private List<Address> list;
Map<String,Address> map;
前端:
<form action="user/saveUser4">
username: <input type="text" name="username"/><br/>
password: <input type="text" name="password"/><br/>
age: <input type="text" name="age"/><br/>
province1:<input type="text" name="map['one'].province"/><br/>
city1 : <input type="text" name="map['one'].city"/><br/>
province2:<input type="text" name="map['two'].province"/><br/>
city2 :<input type="text" name="map['two'].city"/><br/>
<input type="submit" value="submit"/>
</form>
后端:
//方法的参数: 绑定的是一个集合类型map
@RequestMapping(value="/saveUser4")
public ModelAndView saveUser4(User user) {
System.out.println("saveUser执行了"+user);
ModelAndView mav =new ModelAndView(); //封装数据跳转的路径:
mav.setViewName("/WEB-INF/success.jsp");
return mav;
}
4乱码问题
Tomcat7.0 以及以下版本: 出现乱码问题; 默认的字符集是iso-8859-1 出现乱码。
Tomcat8 以及8版本以上:不会出现乱码问题: 默认的字符集是utf-8 ,不会乱码。
Springmvc当中, 提供了一个过滤器,解决乱码问题:
把这个粘在 springmvc.xml就可以了
<!-- 配置过滤器,解决中文乱码问题: -->
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<!-- 配置一个初始化参数: -->
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>