SpringMVC处理器返回值常用的有4种:
1、ModelAndView 2、String 3、viod 4、自定义类型数据
一、搭建SpringMVC环境
1、jar包准备
2、SpringMVC入口配置 (web.xml)
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-servlet.xml</param-value><!-- 引用SpringMVC文件-->
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern> <!-- 映射路径自定义设置-->
</servlet-mapping>
3、配置SpringMVC文件 (springmvc-servlet.xml)
<?xml version="1.0" encoding="UTF-8"?>
<!-- 引入命名空间-->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
<!-- 命名空间路径配置-->
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!--设置注解扫描包 -->
<context:component-scan base-package="com"></context:component-scan>
<!-- 驱动-->
<mvc:annotation-driven></mvc:annotation-driven>
<!-- 静态资源配置 js,html等文件引入-->
<mvc:resources location="/js/" mapping="/js/**"></mvc:resources>
</beans>
4、实体类准备
public class Users implements Serializable{
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
5、前端页面准备
<!-- 前端页面请求路径 -->
<form action="login" method="post">
用户名:<input type="text" name="username" id="username"></br>
密 码:<input type="password" name="password"></br>
<input type="submit" id="btn" value="提交">
</form>
6、控制器准备
@Controller // 当前类是一个处理器
public class UserController {
}
二、返回值ModelAndView
有数据有视图,可将数据进行传递并将视图返回。
1、编辑控制器
@RequestMapping("/login") // 命名空间 “/” 不能省略
public ModelAndView login(Users user){ // 通过实体类传参
ModelAndView model = new ModelAndView();
model.addObject("username", user.getUsername());
model.addObject("password", user.getPassword());
// model.addObject("user", user);
model.setViewName("all.jsp");
return model;
}
// 方法解释:将user信息进行封装,并跳转至all.jsp页面。
2、返回页面获取参数方式
<!-- 若封装属性直接获取属性名称即可 -->
${username } ${password }
<!-- 若封装对象,使用对象.属性名即可获取 -->
${user.username } ${user.password }
二、返回值String
可以是视图,也可以是数据,视图和数据只能存在一种。
1、配置Springmvc视图解析器
<!-- 视图解析器 -->
<bean id="internalResourceViewResolver"class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
2、使用String返回值传递视图
a、编辑控制器
@RequestMapping("/login")
public String login(Users user,Model model){ // 通过实体类传参
model.addAttribute("user", user); // 使用Model封装参数
return "all"; // 只书写文件名称,通过视图解析器跳转
}
b、返回页面获取参数方式
${user.username } ${user.password }
3、使用String返回值传递参数
a、前端页面改造
<form action="" id="form">
用户名:<input type="text" name="username" id="username"></br>
密 码:<input type="password" name="password"></br>
<input type="button" id="btn" value="提交" >
</form>
<!-- 引入jquery -->
<script type="text/javascript" src="js/jquery-3.4.1.js"></script>
<script type="text/javascript">
$("#btn").click(function(){
$.ajax({
url:"login",
type:"post",
data:$("#form").serialize(), // 向后端传递参数
success:function(data){ // data 接收处理器返回的参数
if(data == "aaaa"){
location.href = "all.jsp";
}
}
})
})
</script>
b、编辑控制器
@Controller
public class UserController {
@RequestMapping("/login")
@ResponseBody
public String login(Users user){
return "aaaa";
}
}
三、返回值void
1、jar包准备(除SpringMVC必须jar包外,需要jackson想换jar包,便于后续使用)
2、 编辑控制器
@RequestMapping("/login")
public void login(Users user,HttpServletResponse response) throws Exception{
response.setContentType("application/json;charset=utf-8");
ObjectMapper mapper = new ObjectMapper();
String result = mapper.writeValueAsString(user); // 将java对象转化为json字符串,便于前台接收
PrintWriter writer = response.getWriter();
writer.print(result); // 打印流输出
writer.flush();
writer.close();
}
3、前端改造
<form action="" id="form">
用户名:<input type="text" name="username" id="username"></br>
密 码:<input type="password" name="password"></br>
<input type="button" id="btn" value="提交" >
</form>
<script type="text/javascript" src="js/jquery-3.4.1.js"></script>
<script type="text/javascript">
$("#btn").click(function(){
$.ajax({
url:"login",
type:"post",
data:$("#form").serialize(),
dataType:"json",
success:function(data){ // 若data为属性值,可直接获取;若为对象,可通过对象.属性名获取
console.log(data);
if(data.username == "aaaa"){
location.href = "all.jsp";
}
}
})
})
</script>
四、自定义类型对象
1、编辑控制器
@RequestMapping("/login")
@ResponseBody
public Users login(Users user) {
return user;
}
2、前端改造
<form action="" id="form">
用户名:<input type="text" name="username" id="username"></br>
密 码:<input type="password" name="password"></br>
<input type="button" id="btn" value="提交" >
</form>
<script type="text/javascript" src="js/jquery-3.4.1.js"></script>
<script type="text/javascript">
$("#btn").click(function(){
$.ajax({
url:"login",
type:"post",
data:$("#form").serialize(),
dataType:"json",
success:function(data){ // 若data为属性值,可直接获取;若为对象,可通过对象.属性名获取
console.log(data);
if(data.username == "aaaa"){
location.href = "all.jsp";
}
}
})
})
</script>
总结: 1、四种返回值类型,只有String类型的返回值关注视图解析器。
2、当返回值类型为参数时,前端页面需用ajax接收返回参数。
3、当返回值是视图并携带参数时,前端页面使用EL表达式接收返回参数。