1、@RequestMapping
- 作用:用于建立请求URL和处理请求方法之间的对应关系。
当该注解放在类上的时候就表示的是一级访问目录。
当该方法放在方法上的时候就表示是二级访问目录。 - 属性:
value:用于指定请求的URL。它和path属性的作用是一样的。
method:用于指定请求的方式。
@RequestMapping(path = “/hello”,method = {RequestMethod.POST}) - params:用于指定限制请求参数的条件。它支持简单的表达式。要求请求参数的key和value必须和配置的一摸一样。
@RequestMapping(path = “/hello”,method = {RequestMethod.POST},params = {“username”})
<a href=“user/hello?username=111”>asdasd</a> - headers:发送的请求中必须包含请求头
@RequestMapping(path = “hello”,headers = {“Accept”})
2、请求参数的绑定
public String sayHellow()直接在括号里加参数名称
- 请求参数的绑定说明
- 绑定机制
- 表单提交的数据都是k=v格式的,username=111&&password=222
- SpringMVC的参数绑定过程是把表单提交的请求参数,作为控制器中方法的参数进行绑定的
- 要求:提交提交表单的name和参数的名称是相同的
- 支持的数据类型
- 基本数据类型和字符串类型
- 实体类型(JavaBean)
- 集合数据类型(List,map集合等)
- 绑定机制
- 基本数据类型和字符串类型
- 提交表单的name和参数的名称是相同的
- 区分大小写
- 实体类型(JavaBean)
- 提交表单的name和javaBean中的属性名称一样。
- 如果一个JavaBean类中包含其他引用类型,那么表单的name属性需要编写成;对象.属性,例如:address.name。
- 给集合属性数据封装
对于普通的基本类型参数,只需要在方法的参数中参数名与前端提交的form表单的name名字一样就可以,传递到后端。
javaBean的例子
package com.spring.controller;
import com.spring.domain.Account;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
@RequestMapping(path = "user")
public class controller {
@RequestMapping(path = "hello",headers = {"Accept"})
public String sayHellow(Account account){
System.out.println(account);
return "success";
}
}
<form method="post" action="user/hello" >
<input type="text" name="username">
<input type="text" name="password">
<input type="text" name="user.name">
<input type="text" name="user.age">
<input type="submit" name="submit">
</form>
3、配置解决中文乱码的过滤器
在web.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>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
4、请求参数之集合类型
Account类
public class Account implements Serializable {
private String username;
private String password;
private List<User> list;
private Map<String,User> map;
controller类
@Controller
@RequestMapping(path = "user")
public class controller {
@RequestMapping(path = "hello",headers = {"Accept"})
public String sayHellow(Account account){
System.out.println(account);
return "success";
}
}
<form method="post" action="user/hello" >
<input type="text" name="username">
<input type="text" name="password">
<input type="text" name="list[0].name">
<input type="text" name="list[0].age">
<input type="text" name="map['one'].name">
<input type="text" name="map['one'].age">
<input type="submit" name="submit">
</form>
5、自定义类型转换器
对于我们在前端页面提交的数据,其实都是以字符串的形式传输到后台的,springMVC,有一个很友好的机制,它有一个类型转换器,可以帮我们转换成对应的参数。比如age这个值,在后台就会转换成Int类型。如果是Date类型的日期数据,如果我们提交的是2000/10/10,springMVC同样也可以帮我们自动转换,但是如果我们提交2000-10-10,就会报错。这个是我们不想的。所以我们要解决这个问题。
User类
public class User {
private String name;
private int age;
private Date date;
controller
@Controller
@RequestMapping(path = "user")
public class controller {
@RequestMapping(path = "hello",headers = {"Accept"})
public String sayHellow(User user){
System.out.println(user);
return "success";
}
}
index.jsp
<form method="post" action="user/hello" >
<input type="text" name="name">
<input type="text" name="age">
<input type="text" name="date">
<input type="submit" name="submit">
</form>
自定义类型转换器类
package com.spring.utils;
import javafx.scene.input.DataFormat;
import org.springframework.core.convert.converter.Converter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* 将字符串转换成日期对象
*/
public class StringToDateConverter implements Converter<String, Date> {
/**
* @param s 传入进来的字符串
* @return
*/
public Date convert(String s) {
if(s == null)
throw new RuntimeException("请您输入数据");
SimpleDateFormat df = new SimpleDateFormat("yyyy-mm-dd");
try {
return df.parse(s);
} catch (ParseException e) {
throw new RuntimeException("数据类型转换错误!!");
}
}
}
配置SpringMVC.xml
<!-- 配置自定义类型转换器-->
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<set>
<bean class="com.spring.utils.StringToDateConverter"></bean>
</set>
</property>
</bean>
<!-- 开启springMVC框架的注解的支持-->
<mvc:annotation-driven conversion-service="conversionService"/>
这样就可以转换yyyy-mm-dd类型的日期了。
6、获取原生Servlet的API
直接在方法参数上加request和response。
@Controller
@RequestMapping(path = "user")
public class controller {
@RequestMapping(path = "hello",headers = {"Accept"})
public String sayHellow(HttpServletRequest request, HttpServletResponse response){
System.out.println(request);
HttpSession session = request.getSession();
System.out.println(session);
ServletContext context = session.getServletContext();
System.out.println(context);
System.out.println(response);
return "success";
}
}