1首先在Maven中引入相关依赖:
Spring相关依赖:spring-context .spring-web spring-webmvc servlet-api jsp-api
引入servlet和jsp依赖时需要添加scope属性 属性值为provided 运行时不生效 运行时采用Tomcat的方式运行
2.在MVC模型中Controller指的是应用程序中处理用户交互的部分 SpringMVC中可以让一个简单的JAVA类成为控制器(在Java类上方添加@Controller注解)
3.在配置文件中配置<mvc:annotation-driven/>开启SpringMVC注解事务支持 在此之前需要先扫描包<context:component-scan base-package="包名"/> 扫描Spring注解
4.@RequestMapping("url") 给定访问路径
5.SpringMVC参数获取:
获取简单数据类型(基本数据类型和字符串)时:请求行中参数名和方法参数名相同时即可完成自动封装
在请求行中访问路径应该为:localhost:8888/c/param1?username=itbz&password=12345
@RequestMapping("c/param1")
public void param(String username,int password){
System.out.println(username);
System.out.println(password);
}
获取对象类型:请求行中参数和对象的属性名相同时即可完成自动封装
在请求行中访问路径为:localhost:8888/c/param2?id=1&name=itbz&sex=man 即可完成自动封装
//封装单个对象
@RequestMapping("/c/param2")
public void objStudent(Student student){
System.out.println(student);
}
//实体类
package com.itbaizhan.domain;
import java.util.List;
import java.util.Map;
public class Student {
private int id;
private String name;
private String sex;
// private Address address;
// private List<Address> address;
private Map<String,Address> map;
public Map<String, Address> getMap() {
return map;
}
public void setMap(Map<String, Address> map) {
this.map = map;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", sex='" + sex + '\'' +
", map=" + map +
'}';
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Student() {
}
public Student(int id, String name, String sex) {
this.id = id;
this.name = name;
this.sex = sex;
}
}
封装为关联对象: 关联对象指的是在实体类中关联着另一个实体类
请求行localhost:8888/c/param3? id=1&name=itbz&sex=man&address.info=1&address.postcode=01000即可完成自动封装
//封装为关联对象
@RequestMapping("/c/param3")
public void objForm(Student student){
System.out.println(student);
}
封装为简单数据类型的集合:注:需要在方法参数前加@RequestParam注解
请求行:localhost:8888/c/param4?list=itbz&list=bjsxt
//封装为简单数据类型的集合
@RequestMapping("/c/param4")
public void objList(@RequestParam List<String> list){
System.out.println(list);
}
封装为String类型的数组:方法和封装为简单数据类型的集合相同
拓展知识点:List下的Arrays.asList(String[]) 方法可以将String类型的数组转换为list类型 list会调用自己的toString方法
//封装为String类型的数组
@RequestMapping("/c/param5")
public void objString(@RequestParam String[] strings){
List<String> list = new ArrayList();
list= Arrays.asList(strings);
System.out.println(list);
}
SpringMVC不可以封装对象类型的List,但可以封装有List属性的对象
请求行:localhost:8888/c/param6?id=1&name=itbz&sex=man&address.info=1&address.postcode=01000&address.info=2&address.postcode=011000
//封装有List属性的对象
@RequestMapping("/c/param6")
public void objList2(Student student){
System.out.println(student);
}
封装到有map属性的对象中:
请求行:localhost:8888/c/param7?id=1&name=itbz&sex=man&map['one'].info=1&map['one'].postcode=01000
//封装到有map属性的对象中
@RequestMapping("/c/param7")
public void mapConfig(Student student){
System.out.println(student);
}
使用Servlet原生对象:SpringMVC封装对象更方便
封装原生对象了解就好
//使用servlet原生对象
@RequestMapping("/c/param8")
public void servletConfig(HttpServletRequest request, HttpServletResponse response, HttpSession session){
System.out.println(request.getParameter("name"));
System.out.println(response.getCharacterEncoding());
System.out.println(session.getId());
}
自定义参数类型:SpringMVC请求行中封装的参数都为String类型 如果你想封装Date类型的参数那么需要创建一个参数类型转换的类并实现Converter接口并重写converter方法
Converter<String,Date>:由String类型转换为Date类型
在配置类中需要配置转换器工厂:在SpringMVC注解支持的标签中需要添加conversion-service="转换工厂id"
<!-- 配置转换器工厂 -->
<bean id="converterFactory" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<set>
<bean class="com.itbaizhan.converter.DateConverter"></bean>
</set>
</property>
</bean>
在web.xml配置文件中配置编码过滤器:在Tomcat8之后针对get请求不会出现乱码的情况 但是post请求会出现乱码情况 这时需要在配置文件中配置编码过滤器 指定要转换的编码以及过滤的路径
<!-- 编码过滤器 -->
<filter>
<filter-name>encoder</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>encoder</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>