相应方式:
回写数据
页面跳转
1.1 通过字符串返回直接跳转(视图解析器含有方法可省略前后缀,需在spring-mvc.xml文件配置bean)
代码实现
<bean id="resolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/jsp/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
实现类代码
@RequestMapping("/quick1")
public String save1(){
System.out.println("running");
return "success";
}
1.2使用ModelAndView返回对象,并且存储数据
@RequestMapping("/quick2")
public ModelAndView save2(ModelAndView modelAndView){
System.out.println("running");
//向request存储数据
modelAndView.addObject("username","itheima");
modelAndView.setViewName("success");
return modelAndView;
}
1.3通过request存储对象,并跳转页面
@RequestMapping("/quick0")
public String save0(HttpServletRequest request){
request.setAttribute("suername","zhangsan");
return "success";
}
1.4 通过response方法回写数据
public void save3(HttpServletResponse response) throws IOException {
response.getWriter().write("success");
}
1.5返回字符串
在异步项目中,客户端与服务器端往往要进行json格式字符串交互,所以配置json转换工具jackson,导入坐标。
代码实现
@RequestMapping("/quick6")
@ResponseBody
public String save6() throws IOException{
User user = new User();
user.setUsername("zhangsan");
user.setAge(22);
//返回json数据
ObjectMapper objectMapper = new ObjectMapper();
String json = objectMapper.writeValueAsString(user);
return json;
}
<!--导入jackson-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.13.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.13.0</version>
</dependency>
1.7返回对象或集合
因为需要通过SpringMVC帮助我们对对象或集合进行json字符串的转换并回写,因此需要在spring-mvc.xml中进行如下两种配置:
在 SpringMVC 的各个组件中,处理器映射器、处理器适配器、视图解析器称为 SpringMVC 的三大组件。使用mvc:annotation-driven自动加载 RequestMappingHandlerMapping(处理映射器)和
RequestMappingHandlerAdapter( 处 理 适 配 器 ),可用在Spring-xml.xml配置文件中使用
mvc:annotation-driven替代注解处理器和适配器的配置。同时使用mvc:annotation-driven默认底层就会集成jackson进行对象或集合的json格式字符串的转换。
下一种代码配置
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="messageConverters">
<list>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"></bean>
</list>
</property>
</bean>
返回对象或集合(集合返回有两种方式)
@RequestMapping("/quick7")
@ResponseBody
public User save7()throws IOException{
User user = new User();
user.setUsername("zhangsan");
user.setAge(22);
return user;
}
2.1获得请求参数
客户端请求参数的格式是:name=value&name=value… …
服务器端要获得请求的参数,有时还需要进行数据的封装,SpringMVC可以接收如下类型的参数:
和POJO类型public void quickMethod9(String username,int age)
在方法内直接声明参数名(必须一致),POJO也是如此获得集合参数时,要将集合参数包装到一个POJO中才可以。
package com.itheima.Vo;
import com.itheima.poji.User;
import java.util.List;
public class vo {
private List<User> userList;
public List<User> getUserList() {
return userList;
}
public void setUserList(List<User> userList) {
this.userList = userList;
}
@Override
public String toString() {
return "vo{" +
"userList=" + userList +
'}';
}
}
代码实现
@RequestMapping("/quick10")
@ResponseBody//Controller中的业务方法的POJO参数的属性名与请求参数对象内属性name一致,参数值会自动映射匹配
public void save10(vo vo){
System.out.println(vo);
}
当使用ajax提交时,可以指定contentType为json形式,那么在方法参数位置使用@RequestBody可以直接接收集合数据而无需使用POJO进行包装。
@RequestMapping("/quick13")
@ResponseBody
public void quickMethod13(@RequestBody List<User> userList) throws IOException {
System.out.println(userList);
}
注意,因为我们配置spring前端控制器DispatcherServlet的url-pattern配置的是/,代表对所有的资源都进行过滤操作,所以js文件扫描会出现问题
当post请求时,输入汉字数据会出现乱码,需要在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>