springMVC知识点总结(二)

常用注解

RequestParam:用于指定前端传参
RequestBody:用于获取整个请求体内容(key=value形式)get 请求方式不适用。
PathVaribale:用于获取占位符上的值
RequestHeader:用于获取请求头
CookieValue:用于获取cookie
ModelAttribute:该注解出现在方法上时,会在控制器的方法执行之前执行。出现在参数上可以获取指定的数据给参数赋值
SessionAttribute:用于指定session域中的内容,指定过后的参数可以通过model的addAttribute方法去赋值,没指定的赋值也取不出来。ModelMap用于取出session域中的值,SessionStatus用于去除session域中的值

REST 风格 URL

传统方式我们控制器中的方法映射过后通过不同的url地址来访问,使用rest编程风格之后,我们可以通过同样的地址进行访问,使用浏览器的不同请求方式来辨别不同的方法,如get和post,put等。如果同样得请求方式,还可以通过占位符来辨别不同得方法,

controller 方法返回值

常用为三种

字符串

controller 方法返回字符串可以指定逻辑视图名,通过视图解析器解析为物理视图地址。
//指定逻辑视图名,经过视图解析器解析为 jsp 物理路径:/WEB-INF/pages/success.jsp

void

如果返回值为void则需要我们手动获取request和response对象,然后手动去重定向或者转发,否则会自动去找方法名对应的jsp文件。

@RequestMapping("/testReturnVoid")
public void testReturnVoid(HttpServletRequest request,HttpServletResponse response) 
throws Exception {
}在 controller 方法形参上可以定义 request 和 response,使用 request 或 response 指定响应结果:
1、使用 request 转向页面,如下:
request.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(request, 
response);
2、也可以通过 response 页面重定向:
response.sendRedirect("testRetrunString") 3、也可以通过 response 指定响应结果,例如响应 json 数据:
response.setCharacterEncoding("utf-8");
response.setContentType("application/json;charset=utf-8");
response.getWriter().write("json 串");

ModelAndView

ModelAndView 是 SpringMVC 为我们提供的一个对象,该对象也可以用作控制器方法的返回值。
该对象中有两个方法:addObject和setViewName
控制器代码:addObject可以往request域中存值setViewName可以设定跳转的页面

/**
* 返回 ModeAndView
* @return
*/
@RequestMapping("/testReturnModelAndView")
public ModelAndView testReturnModelAndView() {
ModelAndView mv = new ModelAndView();
mv.addObject("username", "张三");
mv.setViewName("success");
return mv; }

响应的jsp代码

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>执行成功</title>
</head> <body>
执行成功!
${requestScope.username}
</body>
</html>

结果:
在这里插入图片描述
注意这里的页面跳转是转发

ResponseBody 响应 json 数据

解决DispatcherServlet过滤静态文件问题

DispatcherServlet会拦截到所有的资源,导致一个问题就是静态资源(img、css、js)也会被拦截到,从而
不能被使用。解决问题就是需要配置静态资源不进行拦截,在springmvc.xml配置文件添加如下配置

mvc:resources标签配置不过滤

location元素表示webapp目录下的包下的所有文件
mapping元素表示以/static开头的所有请求路径,如/static/a 或者/static/a/b
<!-- 设置静态资源不过滤 --> <mvc:resources location="/css/" mapping="/css/**"/> <!-- 样式 --> <mvc:resources location="/images/" mapping="/images/**"/> <!-- 图片 --> <mvc:resources location="/js/" mapping="/js/**"/> <!-- javascript -->
配置如下的目录结构,以后js文件就放js目录下,images放图片,css放格式
在这里插入图片描述

前端代码

需要注意的是我们如果使用的jsp文件就不可以写这种引用静态文件的地址
在这里插入图片描述
这样系统会报错
出现这种问题建议可以直接使用cdn的方式,使用网络上的jquery文件
在这里插入图片描述

<%--
  Created by IntelliJ IDEA.
  User: cc
  Date: 2021/5/28
  Time: 16:50
  To change this template use File | Settings | File Templates.
--%>
  <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
<html>
<head>
    <script src="js/jquery.min.js"> </script>
    <script>
     $(function () {
         $("#btn").onclick(function () {
             $.ajax({
                 url: "testJson",
                 contentType: "application/json;charset=UTF-8",
                 data: '{"username":"陈超","password":158212,address:上海}',
                 dataType: "json", type: "post",
                 success: function (data) {
                     alert(data);
                     alert(data.username);
                 }
             })
         })
     })
    </script>
    <title>测试json异步请求</title>
</head>
<body>
<button id="btn">点击按钮发送异步请求</button>

</body>
</html>

还有一点需要注意
我当时user对象是这么写的,json是可以解析出来这些数据的,传过去就有值,没传过去就是默认值null
在这里插入图片描述

控制器代码

  @RequestMapping("testJson")
    public @ResponseBody User  TestJson(@RequestBody User user){
        System.out.println(user);
        user.setBirthday(new Date());
        user.setAddress("金华");
        return user;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值