mvc ajax 返回值类型,4. SpringMVC返回值类型及响应数据类型

准备

新建工程

362c98c6fcff

image.png

362c98c6fcff

image.png

362c98c6fcff

image.png

pom.xml

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

4.0.0

com.neuedu

springMVC_demo02_response

1.0-SNAPSHOT

war

springMVC_demo02_response Maven Webapp

http://www.example.com

UTF-8

1.8

1.8

5.0.2.RELEASE

org.springframework

spring-context

${spring.version}

org.springframework

spring-web

${spring.version}

org.springframework

spring-webmvc

${spring.version}

javax.servlet

servlet-api

2.5

provided

javax.servlet.jsp

jsp-api

2.0

provided

springMVC_demo02_response

maven-clean-plugin

3.1.0

maven-resources-plugin

3.0.2

maven-compiler-plugin

3.8.0

maven-surefire-plugin

2.22.1

maven-war-plugin

3.2.2

maven-install-plugin

2.5.2

maven-deploy-plugin

2.8.2

web.xml

/p>

"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"

"http://java.sun.com/dtd/web-app_2_3.dtd" >

Archetype Created Web Application

dispatcherServlet

org.springframework.web.servlet.DispatcherServlet

contextConfigLocation

classpath:springMVC.xml

1

dispatcherServlet

/

characterEncodingFilter

org.springframework.web.filter.CharacterEncodingFilter

encoding

UTF-8

characterEncodingFilter

/*

springMVC.xml

xmlns:mvc="http://www.springframework.org/schema/mvc"

xmlns:context="http://www.springframework.org/schema/context"

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/mvc

http://www.springframework.org/schema/mvc/spring-mvc.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context.xsd">

1. 返回值分类

1.1字符串

362c98c6fcff

image.png

testString

362c98c6fcff

image.png

实体类User

362c98c6fcff

image.png

package com.neuedu.domain;

import java.io.Serializable;

public class User implements Serializable {

private String username;

private String password;

private Integer age;

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;

}

public Integer getAge() {

return age;

}

public void setAge(Integer age) {

this.age = age;

}

}

UserController类

362c98c6fcff

image.png

package com.neuedu.controller;

import com.neuedu.domain.User;

import org.springframework.stereotype.Controller;

import org.springframework.ui.Model;

import org.springframework.web.bind.annotation.RequestMapping;

@Controller

@RequestMapping("/user")

public class UserController {

/**

* 返回String

* @param model

* @return

*/

@RequestMapping("/testString")

public String testString(Model model){

System.out.println("testString方法执行了...");

// 模拟从数据库中查询出User对象

User user = new User();

user.setUsername("哈哈");

user.setPassword("123");

user.setAge(30);

// model对象

model.addAttribute("user",user);

return "success";

}

}

success.jsp

执行成功

${user.age}

${user.password}

362c98c6fcff

image.png

362c98c6fcff

image.png

1.2 void

testVoid

/**

* 是void

* 请求转发一次请求,不用编写项目的名称

*/

@RequestMapping("/testVoid")

public void testVoid(HttpServletRequest request, HttpServletResponse response) throws Exception {

System.out.println("testVoid方法执行了...");

// 编写请求转发的程序

// request.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(request,response);

// 重定向

// response.sendRedirect(request.getContextPath()+"/index.jsp");

// 设置中文乱码

response.setCharacterEncoding("UTF-8");

response.setContentType("text/html;charset=UTF-8");

// 直接会进行响应

response.getWriter().print("你好");

return;

}

362c98c6fcff

image.png

1.3 ModelAndView

ModelAndView 是 SpringMVC 为我们提供的一个对象,该对象也可以用作控制器方法的返回值。

该对象中有两个方法:

362c98c6fcff

image.png

362c98c6fcff

image.png

testModelAndView

/**

* 返回ModelAndView

* @return

*/

@RequestMapping("/testModelAndView")

public ModelAndView testModelAndView(){

// 创建ModelAndView对象

ModelAndView mv = new ModelAndView();

System.out.println("testModelAndView方法执行了...");

// 模拟从数据库中查询出User对象

User user = new User();

user.setUsername("哈哈");

user.setPassword("456");

user.setAge(30);

// 把user对象存储到mv对象中,也会把user对象存入到request对象

mv.addObject("user",user);

// 跳转到哪个页面

mv.setViewName("success");

return mv;

}

362c98c6fcff

image.png

2 转发和重定向

2.1 forward

/**

* 使用关键字的方式进行转发或者重定向

* @return

*/

@RequestMapping("/testForwardOrRedirect")

public String testForwardOrRedirect(){

System.out.println("testForwardOrRedirect方法执行了...");

// 请求的转发

return "forward:/pages/success.jsp";

}

需要注意的是,如果用了 formward :则路径必须写成实际视图 url,不能写逻辑视图。

它相当于“request.getRequestDispatcher("url").forward(request,response)”。使用请求转发,既可以转发到 jsp,也可以转发到其他的控制器方法。

2.2 Redirect 重定向

/**

* 使用关键字的方式进行转发或者重定向

* @return

*/

@RequestMapping("/testForwardOrRedirect")

public String testForwardOrRedirect(){

System.out.println("testForwardOrRedirect方法执行了...");

// 重定向

return "redirect:/index.jsp";

}

它相当于“response.sendRedirect(url)”。需要注意的是,如果是重定向到 jsp 页面,则 jsp 页面不能写在 WEB-INF 目录中,否则无法找到。

3. ResponseBody响应json数据

作用:

该注解用于将 Controller 的方法返回的对象,通过 HttpMessageConverter 接口转换为指定格式的数据如:json,xml 等,通过 Response 响应给客户端

需求:

使用@ResponseBody 注解实现将 controller 方法返回对象转换为 json 响应给客户端。

前置知识点:

Springmvc 默认用 MappingJacksonHttpMessageConverter 对 json 数据进行转换,需要加入jackson 的包。

362c98c6fcff

image.png

3.1 准备

过滤静态资源

导入jquery.js

362c98c6fcff

image.png

response.jsp

// 页面加载,绑定单击事件

$(function(){

$("#btn").click(function(){

alert("hello btn");

});

});

发送ajax的请求

3.1 使用说明

点击按钮并没有反应

原理:web.xml文件中的前端控制器dispatcherServlet会进行拦截

解决:告诉它,哪些静态资源不能拦截,在springMVC.xml中设置

或者可以写成:

编写原生ajax请求

// 发送ajax请求

$.ajax({

// 编写json格式,设置属性和值

url:"user/testAjax",

contentType:"application/json;charset=UTF-8",

data:'{"username":"hehe","password":"123","age":30}',

dataType:"json",

type:"post",

success:function(data){

// data服务器端响应的json的数据,进行解析

}

});

服务器UserController处理ajax请求数据

/**

* 模拟异步请求响应

*/

@RequestMapping("/testAjax")

public void testAjax(@RequestBody String body){

System.out.println("testAjax方法执行了...");

System.out.println(body);

}

362c98c6fcff

image.png

3.2 使用示例

向pom.xml导入坐标

com.fasterxml.jackson.core

jackson-databind

2.9.0

com.fasterxml.jackson.core

jackson-core

2.9.0

com.fasterxml.jackson.core

jackson-annotations

2.9.0

/**

* 模拟异步请求响应

*/

@RequestMapping("/testAjax")

public @ResponseBody User testAjax(@RequestBody User user){

System.out.println("testAjax方法执行了...");

// 客户端发送ajax的请求,传的是json字符串,后端把json字符串封装到user对象中

System.out.println(user);

// 做响应,模拟查询数据库

user.setUsername("haha");

user.setAge(40);

// 做响应

return user;

}

// 发送ajax请求

$.ajax({

// 编写json格式,设置属性和值

url:"user/testAjax",

contentType:"application/json;charset=UTF-8",

data:'{"username":"hehe","password":"123","age":30}',

dataType:"json",

type:"post",

success:function(data){

// data服务器端响应的json的数据,进行解析

alert(data);

alert(data.username);

alert(data.password);

alert(data.age);

}

});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值