一、学习SpringMVC最先学习的就是@RequestMapping注解
1、使用这个注解可以控制处理页面端的请求
二、相关的一些注解参数,可以标识在方法的参数前
1、@RequestHeader 获取请求的头里面的参数
2、@RequestParam 获取请求URL中携带的参数
3、@CookieValue 获取请求的cookie值
同时对于请求的URL中携带的参数也可以不使用@RequestParam来获取,可直接使用方法参数名于UR'L携带参数名相同即可。使用范例
@RequestMapping("/hello")
public String test1(@RequestHeader(value="user-Agent",required=true,defaultValue="123")String agent,
@RequestParam(value="user",required=true,defaultValue="默认值")String user,
@CookieValue(value="JSESSIONID",required=true,defaultValue="123321")String cook) {
System.out.println("浏览器的user-Agent:"+agent);
System.out.println("URL带参user:"+user);
System.out.println("请求所带Cookie值:"+cook);
return "success";
}
required是指定参数是否可以为空,默认不可为空,否则会报错
defaultValue是指定参数默认值
三、SpringMVC获取的表单数据可以自动转换为java对象
唯一的要点就是必须是请求页面端的表单中提交的属性name值必须与bean对象中的属性名一致
例如学生类:
package com.feilonkji.param;
/**
*
* @ClassName: Student
* @Description: TODO 测试学生bean类
* @author zr
* @date 2020年4月2日
* @version V1.8
*/
public class Student {
private String name;
private String no;
private String sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getNo() {
return no;
}
public void setNo(String no) {
this.no = no;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
public String toString() {
return "Student [name=" + name + ", no=" + no + ", sex=" + sex + "]";
}
}
测试方法:
@RequestMapping("/hello1")
public String test2(Student stu) {
System.out.println(stu);
return "success";
}
表单数据:
<body>
<a href="hello?user=123">测试带参</a>
<form action="hello1" method="post">
姓名:<input type="text" name="name"/><br>
学号:<input type="text" name="no"/><br>
性别:<input type="text" name="sex"/><br>
<input type="submit" value="提交"/>
</form>
<a href="hello2">测试原生API传递参数</a>
</body>
这样提交,则SpringMVC会帮我们自动转换为学生对象。
四、关于SpringMVC数据传输过程中产生的中文乱码问题的解决方案
1、关于请求乱码
GET请求:因为使用的是TomCat,所以最终解决方案是在Servers项目下的server.xml文件中的8080端口处添加URIEncoding="UTF-8"。
POST请求:在第一次获取请求参数之前设置:request.setCharacterEncoding("UTF-8");也可以使用SpringMVC提供的Filter过滤器(CharacterEncodingFilter),一般为了避免其他问题,将编码过滤Filter配置在其他filter的最前面。
2、关于响应乱码
可以直接设置response.setContentType("text/html;charset=utf-8");
3、关于CharacterEncodingFilter过滤器的编码
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<!-- encoding是用来指定解决POST请求乱码 -->
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<!-- forceEncoding顺手解决响应乱码:response.setCharacterEncoding("UTF-8") -->
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
五、在SpringMVC中可以使用Map,Model,ModelMap作为参数来传递数据,同样可以使用原生API作为请求控制处理方法的参数用来传递数据到各个域中
1、使用Map、Model、ModelMap作为参数来传递数据
三者都能够传递参数到请求域中。
Map是接口(Interface)
Model也是接口,是Map下面的子接口
ModelMap是类
最终实现的都是BindingAwareModelMap在工作
例如:
@RequestMapping("hello1")
public String test1(Map<String,Object> map) {
map.put("money","有钱吗");
return "success";
}
@RequestMapping("hello2")
public String test2(Model model) {
model.addAttribute("money","有钱吗");
return "success";
}
@RequestMapping("hello3")
public String test3(ModelMap modelMap) {
modelMap.addAttribute("money","有钱吗");
return "success";
}
2、使用ModelAndView作为处理方法的返回值来传递数据和返回页面
传递的数据也在Request请求域中
例如:
@RequestMapping("hello4")
public ModelAndView test4() {
//ModelAndView作为返回值,包含返回的页面信息,也可以传递参数数据
//传递的数据也在请求域中
ModelAndView modelAndView = new ModelAndView("success");
modelAndView.addObject("money","没有money");
return modelAndView;
}
六、还有其他很多用法,待继续学习,前进。