SpringMVC的相关配置

SpringMVC

入门程序步骤:

  1. 启动服务器,加载一些配置文件
    1. DispatcherServlet对象创建
    2. springmvc.xml被加载了
    3. HelloController被创建成对象
    4. 视图解析器被创建成对象
  2. 发送请求,后台处理请求
    1. 运行程序,点击首页的超链接
    2. 超链接根据web.xml中的DispatcherServlet这个控制中心找到相应的注解@RequestMapping下的方法,执行该方法
    3. 控制中心重新寻找对象,根据视图解析器和前一个方法的返回值,寻找到下一步跳到哪儿,将结果显示给客户端(success.jsp展示给客户端)
  3. @RequestMapping
    1. value:用于指定请求的URl和path属性的作用是一致的,value=”/haha”
    2. method:用于指定请求的方式,method={RequestMethod.POST}
    3. params:用于指定限制请求参数的条件,它支持简单的表达式,要求请求参数的key和value必须和配置的一模一样
      • params = {“accountName”},表示请求参数必须有accountName
      • params={“money!100”},表示请求参数中money不能是100
    4. headers:用于指定限制请求消息头的条件,headers={“Accept”}

请求参数的绑定

  1. 请求参数的绑定说明
    1. 绑定机制
      1. 表单提交的数据都是k=v 的格式, username=haha&&passsword=123
      2. SpringMVC的参数绑定过程是把表单提交的请求参数,作为控制器中方法的参数进行绑定的
      3. 要求:提交表单的name和参数的名称要一致
  2. @RequestParam: 定义参数名称,在请求参数的名称和函数方法名称不一样时使用
  3. @RequestBody:添加在函数参数上,将请求体的内容封装到参数中,形式为key=value&key=value的形式
  4. @PathVaribale:拥有绑定url中的占位符,例如:url中有/delete/{id},{id}就是占位符,将这个注解加到方法的参数上就可以获取url中占位符的值
  5. @RequestHeader:用于获取请求头信息,value属性:提供消息头名称,required:是否必须有此消息头
  6. @CookieValue:用于把指定Cookie名称的值传入控制器方法参数,value:指定cookie的名称,required:是否必须有此cookie,将这个注解加到方法的参数上就可以获取名称为value的cookie值
  7. @ModuleAttribute:此注解可以用于修饰方法和参数,出现在方法上,表示当前方法会在控制器的方法执行之前执行,出现在参数上,获取指定的数据给参数赋值
  8. @SessionAttribute:用于多次执行控制器方法间的参数共享,value:用于指定存入的属性名称,type:用于指定存入的输入的数据类型

响应数据和结果视图

  1. 响应之结果返回值:

    1. String
    2. Void
    3. ModelAndView
  2. 转发(forward)和重定向(redirect)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    @RequestMapping("/testForwardOrRedirect")
    public String testForwardOrRedirect() {
    System.out.println("testForwardOrRedirect执行了...");

    //请求的转发
    //return "forward:/WEB-INF/pages/success.jsp";//视图解析器根据返回的名称寻找相应的jsp页面进行跳转


    //重定向
    return "redirect:/index.jsp";
    }
  3. 发送ajax请求

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    @RequestMapping("/testAjax")
    public @ResponseBody User testAjax(@RequestBody User user) {
    System.out.println("testAjax执行了...");
    //客户端发送ajax的请求,传的是字符串,后端把json字符串封装到user对象中
    System.out.println(user);
    //做响应,模拟查询数据库
    user.setUsername("haha");
    user.setAge(40);
    //做响应
    return user;
    }

    解析json数据

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    <script>
    //页面加载,绑定单击事件
    $(function () {
    $("#btn").click(function () {
    //alert("hello,btn!")
    //发送ajax请求
    $.ajax({
    //编写json格式,设置属性和值
    url: "user/testAjax",
    contentType: "application/json;charset=UTF-8",
    data: '{"username":"hehe","password":"123","age":"30"}',
    dateType: "json",
    type: "post",
    success:function (data) {
    //data服务器端相应的json的数据,进行解析
    alert(data);
    alert(data.username)
    alert(data.password);
    alert(data.age);
    }
    })
    });
    });

    </script>

异常处理

  1. 异常处理的思路:
    • Controller调用service,service调用dao,异常都是向上抛出的,最终由DispatcherServlet找异常处理器进行异常的处理
Thanks!