返回值分类
字符串 controller 方法返回字符串可以指定逻辑视图名,通过视图解析器解析为物理视图地址 例: jsp
代码语言:javascript复制 <a href="user/testString" >testString</a>
控制层
代码语言:javascript复制 /**
* 返回值类型是字符串
* @param model
* @return
*/
//指定逻辑视图名,经过视图解析器解析为 jsp 物理路径:/WEB-INF/pages/success.jsp
@RequestMapping("/testString")
public String testString(Model model){
System.out.println("testString方法执行了");
//模拟从数据库中查寻出user对象
User user=new User();
user.setUsername("喜洋洋");
user.setPassword("123456");
user.setAge(23);
//model对象存入数据
model.addAttribute("user",user);
return "success";
}
void Servlet 原始 API 可以作为控制器中方法的参数 jsp
代码语言:javascript复制 <a href="user/testVoid" >testVoid</a>
控制层
代码语言:javascript复制 /**
* 返回值类型是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);
//不让后面的代码继续执行 返回一个return
//编写重定向 response请求不能直接访问WEB-INF下的文件 request可以
//request.getContextPath()获取当前项目名
//response.sendRedirect(request.getContextPath() "/index.jsp");
//设置中文乱码
response.setCharacterEncoding("UTF-8");
//设置浏览器打开解析的编码
response.setContentType("text/html;charset=UTF-8");
//直接进行响应(第二种) 通过输出流 response.getWriter()获取输出流
response.getWriter().print("张三");
return;
}
ModelAndView ModelAndView 是 SpringMVC 为我们提供的一个对象,该对象也可以用作控制器方法的返回值 jsp
代码语言:javascript复制 <a href="user/testModelAndView" >testModelAndView</a>
控制层
代码语言:javascript复制 /**
* 返回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("123456");
user.setAge(23);
//把user对象存储到mv中 也会把user对象存入到request对象中
mv.addObject("user",user);
//设置跳转到哪个页面 用视图解析器
mv.setViewName("success");
return mv;
}
success.jsp
代码语言:javascript复制 ${ user.username}
${ user.password}
${ user.age}
<%--取出数据--%>
转发和重定向 controller 方法在提供了 String 类型的返回值之后,默认就是请求转发 jsp
代码语言:javascript复制 a href="user/testForwardOrRedirect" >testForwardOrRedirect</a>
控制层
代码语言:javascript复制 /**
* 使用关键字方式进行转发和重定向 手动转发不能用视图解析器 所以要写全路径
* @return
*/
@RequestMapping("/testForwardOrRedirect")
public String testForwardOrRedirect(){
System.out.println("testForwardOrRedirect方法执行了");
//请求转发 forward: 页面 固定写法
// return "forward:/WEB-INF/pages/success.jsp";
//重定向 redirect: 页面 固定写法 /WEB-INF/pages/重定向请求不到
//不用加项目名称 关键字默认为我们加好了
return "redirect:/index.jsp";
}
需要注意的是,如果用了 formward:则路径必须写成实际视图 url,不能写逻辑视图。 它相当于“request.getRequestDispatcher(“url”).forward(request,response)”。使用请求 转发,既可以转发到 jsp,也可以转发到其他的控制器方法。 ResponseBody 响应 json 数据 作用: 该注解用于将 Controller 的方法返回的对象,通过 HttpMessageConverter 接口转换为指定格式的 数据如:json,xml 等,通过 Response 响应给客户端 注对 json 数据进行转换,需要加入jackson jar包 坐标
代码语言:javascript复制 <dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.0</version>
</dependency>
配置不拦截静态资源 springmvc.xml
代码语言:javascript复制 <!--配置前端控制器 哪些静态资源 图片 js文件等不拦截 location=目录下的文件 mapping请求带js的都不拦截-->
<!-- 设置静态资源不过滤 -->
<mvc:resources location="/css/" mapping="/css/**"/> <!-- csss样式 -->
<mvc:resources location="/images/" mapping="/images/**"/> <!-- 图片 -->
<mvc:resources location="/js/" mapping="/js/**"/>
jsp代码 发送ajax异步请求
代码语言:javascript复制<head>
<title>Title</title>
<script src="js/jquery.min.js"></script>
<script>
// 页面加载,绑定单击事件
$(function(){
$("#btn").click(function(){
//发送ajax请求
$.ajax({
//编写json格式 设置属性和值 url:"user/testAjax",后台的方法
url:"user/testAjax",
// contentType:"application/json;charset=UTF-8",发送至服务器时内容编码类型
contentType:"application/json;charset=UTF-8",
//data 发送到服务器的数据 json数据
data:'{"username":"hehe","password":"123456","age":"30"}',
//dataType 预期服务器返回的类型
dataType:"json",
//type请求方式 默认是get
type:"post",
//success 请求成功后的回调函数
success:function (data) {
//data指服务器端返回的json数据,进行解析
alert(data);
alert(data.username);
alert(data.password);
alert(data.age);
}
});
});
});
</script>
</head>
<button id="btn">发送ajax的请求</button>
控制层
代码语言:javascript复制/**
* 模拟异步请求 响应
* RequestBody取到请求体接收json数据
* @ResponseBody 响应 把对象数据转成json
*/
@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;
}