Springmvc中,接收页面提交的数据是通过方法形参来接收:
处理器适配器调用springmvc使用反射将前端提交的参数传递给controller方法的形参
springmvc接收的参数都是String类型,所以spirngmvc提供了很多converter(转换器)在特殊情况下需要自定义converter,如对日期数据
编写controller
@RequestMapping("/controller3")
public String controller3(String name,Model model){
model.addAttribute("msg",name);
return "success";
}
在index.jsp里面定义超链接
接收参数—基本数据类型
结果:
编写pojo
package com.by.pojo;
import java.io.Serializable;
import java.util.Date;
public class Account implements Serializable {
private Integer id;
private String name;
private Float money;
private Address address;
private Date date;
@Override
public String toString() {
return "Account{" +
"id=" + id +
", name='" + name + '\'' +
", money=" + money +
", address=" + address +
", date=" + date +
'}';
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Float getMoney() {
return money;
}
public void setMoney(Float money) {
this.money = money;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
}
package com.by.pojo;
import java.io.Serializable;
public class Address implements Serializable {
private String provinceName;
private String cityName;
//省略get set toString方法
@Override
public String toString() {
return "Address{" +
"provinceName='" + provinceName + '\'' +
", cityName='" + cityName + '\'' +
'}';
}
public String getProvinceName() {
return provinceName;
}
public void setProvinceName(String provinceName) {
this.provinceName = provinceName;
}
public String getCityName() {
return cityName;
}
public void setCityName(String cityName) {
this.cityName = cityName;
}
}
编写controller
@RequestMapping("/controller9")
public String controller9(Account account, Model model){
model.addAttribute("msg",account);
return "success";
}
在index.jsp里面添加表单
结果:
restful概述:
(Representational State Transfer,表现层状态转移):URL定位资源时,用HTTP动词(GET,POST,DELETE,PUT)描述操作
在Restful之前的操作:
http://127.0.0.1/user/query?id=1 根据用户id查询用户数据
http://127.0.0.1/user/save 新增用户
http://127.0.0.1/user/update?id=1
修改用户信息 http://127.0.0.1/user/delete?id=1 删除用户信息
RESTful用法: http://127.0.0.1/user/1 GET 根据用户id查询用户数据 http://127.0.0.1/user POST 新增用户 http://127.0.0.1/user PUT 修改用户信息 http://127.0.0.1/user/1 DELETE 删除用户信息
RESTful总结:
Restful风格就是请求url统一,根据不同的请求方式,请求不同的后台方法。如果需要携带参数,在url上使用/{}占位符。
作用
用于绑定url中的占位符。例如:/account/{id},这个{id}就是url占位符
url支持占位符是spring3.0之后加入的,是springmvc支持rest风格url的重要标志。
描述需要使用指定的请求方式来请求该方法
@RequestMapping("/controller10/{id}")
public String controller10(@PathVariable("id") Integer id,Model model){
model.addAttribute("msg",id);
return "success";
}
测试:在index.jsp里面定义超链接
restful
结果:
在web.xml里面设置编码过滤器
CharacterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
UTF-8
CharacterEncodingFilter
/*
测试
tomcat对GET和POST请求处理方式是不同的,GET请求的编码问题,要改tomcat的 配置信息,如下:
org.apache.tomcat.maven
tomcat7-maven-plugin
2.2
8080
/
UTF-8
在index.jsp里面添加日期类型
在pojo里面添加日期类型
public class Account implements Serializable {
private Integer id;
private String name;
private Float money;
private Address address;
//添加日期类型
private Date date;
//省略get set toString方法
}
测试
原因
我们前台传递的是字符串类型的参数,但是后台使用的是Date类型接收的。我们期望springmvc可以帮我们做数据类型的自动转换,显然没有做,所以我们需要自己自定义类型转换器。
Converter接口说明:
定义一个类,实现Converter接口
package com.by.converter;
import org.springframework.core.convert.converter.Converter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateConverter implements Converter {
@Override
public Date convert(String str) {
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date = sdf.parse(str);
return date;
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
}
在 springmvc.xml配置文件中配置类型转换器
结果:
编写controller
@RequestMapping("/controller12")
public String controller12(HttpServletRequest request){
String name = request.getParameter("name");
Float money = Float.valueOf(request.getParameter("money"));
request.setAttribute("msg",name+"===="+money);
return "success";
}
在index.jsp里面定义超链接
servlet接收参数
结果:
编写controller
@RequestMapping("/controller13")
//也可以不创建ModelAndView,直接在参数中指定
public ModelAndView controller13(ModelAndView mv){
mv.addObject("msg","李寒衣");
mv.setViewName("success");
return mv;
}
在index.jsp里面定义超链接
ModelAndView参数传递
结果:
编写controller
@RequestMapping("/controller14")
public String controller10(Model model){
model.addAttribute("msg","天女蕊");
return "success";
}
在index.jsp里面定义超链接
Model参数传递
结果:
编写controller
@RequestMapping("/controller15")
public String controller15(HttpServletRequest request){
request.setAttribute("msg","唐莲");
return "success";
}
在index.jsp里面定义超链接
Servlet API 参数传递
结果
8.总结:
public String findAccount7(String name, Model model){
}
2、pojo(多个)
public String findAccount8(Account account, Model model){
}
3、restful
@RequestMapping("/findAccount10/{id}")
public String findAccount10(@PathVariable Integer id){
}
4、日期类型转换器
public class DateConverter implements Converter
}
3、中文乱码
1)post方式
2)get方式
new String(name.getBytes(),"UTF-8");