博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringMVC-2-(Controller)
阅读量:5253 次
发布时间:2019-06-14

本文共 5771 字,大约阅读时间需要 19 分钟。

一)参数类型

@RequestMapping("hello4")    @ResponseBody    public ModelAndView Hello4(//                                Servlet的三个参数                               HttpServletRequest request,                               HttpServletResponse response,                               HttpSession session,//                               传入接本数据类型和引用数据类型,注意要和前端同名                               String name,                               People people,//                               和前端不同命的解决办法                               @RequestParam("address1")String address,//                               前段没有传值,设置默认值                               @RequestParam(defaultValue = "27") int age,//                               设置这个值一定要有,没有就报错                               @RequestParam(required = true) String email,//                               接前端传过来的复选框的值                               @RequestParam("likes")List
list,// 前端写法//
//
// 另外再写一个实体类,属性就是前端传值的名// public class Test {// private People people; Test test,// 前端写法//
//
// 另外要写一个实体类,属性就是前端传值的list集合// public class Test {// private People people;// private List
peoples; Test test1,// 其实model和ModelAndView还有session都产不多用法,只是返回一个数据参见下边的代码 Model model ) throws ServletException, IOException { ModelAndView hello = new ModelAndView("main"); Model model1 = model.addAttribute("name", "xupeilei"); return hello; }

   restful风格:

@RequestMapping("hello1/{name}/{age}")    public ModelAndView Hello1(@PathVariable String name,@PathVariable String age) {        System.out.println(name+"   "+age);        System.out.println("hello springMVC控制器");        ModelAndView hello = new ModelAndView("main");        return hello;    }

  参数绑定到实体类:

    有时间在写

  自定义参数绑定

    有事件在写

二)返回值类型及重定向和转发(默认方式都是请求转发)

  理解重定向和转发:

    重定向:

      相当于是浏览器发出请求,返回一个url浏览器再去请求这个url,这时浏览器是知道他请求到哪里去了,所以地址栏可以看到url的改变

    转发:

      服务器的行为,浏览器发出请求之后,服务器可能又去请求了其他的资源最终只返回一个数据或者模型,这时浏览器并不知道服务器到底做了什么,他只能显示他请求的url;

 

  @RequestMapping:会去找视图解析器

    String

@RequestMapping("hello2")    public String hello2(){//        转发//        return "forward:/html/err.html";//        return "forward:/hello1";//        重定向//        return "redirect:/html/err.html";        return "redirect:/hello1";//        通过视图解析器//        return "main";    }

    ModelAndView:

@Controllerpublic class HelloController {    @RequestMapping("hello1")    public ModelAndView hello1(){        //        自定义视图解析器找到main.jsp//        ModelAndView modelAndView = new ModelAndView("main");        //        服务器转发,//          跳转到err.html//        ModelAndView modelAndView = new ModelAndView("forward:/html/err.html");//          跳转到其他controller(hello2)//        ModelAndView modelAndView = new ModelAndView("forward:/hello2");        //        浏览器重定向,//          重定向到err.html//        ModelAndView modelAndView = new ModelAndView("redirect:/html/err.html");//          重定向到其他controller(hello2)          ModelAndView modelAndView = new ModelAndView("redirect:/hello2");          //        会使用自定义视图解析器,结果找不到报错404//        ModelAndView modelAndView = new ModelAndView("hello2");                return modelAndView;    }

    void(没有返回值,只能重定向和转发)

@RequestMapping("hello3")    public void hello3(HttpServletRequest request, HttpServletResponse response) throws IOException {//        重定向        request.getRequestDispatcher("/html/err.html");//        request.getRequestDispatcher("/hello1");//        转发//        response.sendRedirect("/html/err.html");//        response.sendRedirect("/hello1");    }

  @RequestMapping:

  @ResponseBody:

    String

    void

    ModelAndView

  对象:(坑!大坑!!巨坑!!!超级坑!!!)(使用jackSon的时候要用高版本不然报错406,无法转换json格式)

@RequestMapping("/hello4")    @ResponseBody    public People hello4(HttpServletResponse response){        People p=new People();        p.setName("sss");        p.setAddress("www");        p.setAge(1);        p.setEmail("ee");        return p;    }
     
com.fasterxml.jackson.core
jackson-annotations
2.9.6
com.fasterxml.jackson.core
jackson-core
2.9.6
com.fasterxml.jackson.core
jackson-databind
2.9.6

 

三)自定义视图解析器

  表示在返回值的前边加上/路径和后边加上.jsp,表示所要找的jsp所在德位置,就不需要在controller中手写了,作用就是偷懒;

  但是注意:自定义视图解析器controller中的返回值不能加前缀,加的话就走默认的视图解析器,

  存在的意义:当我们需要转发的时候

    看图:

        图一:                            图二:

            

    看图一:因为前边没有加任何东西,并且我又自定义视图解析器,那他走的就是自定义视图解析器,回去找一个demo11.jsp的东西,但是会发现找不到报错404

    看图二:因为前边加了forward:这时候自定义的视图解析器就失效了,走默认视图解析器,解析出来要转发到dome11,就不去找demo11.jsp了

  

四)请求方法限定

@RequestMapping(value = {"/hello123","/456",method = RequestMethod.POST)}  

五)@ResponseBody注解

  做了两件事情:

    一:将返回值变成json字符串;

    二:同时设置响应头为application/json

    加上这个之后就不跳转了,以流的形式输出出去,也就不走视图解析器了,并且是直接填充到body中去了

 

String:

ModelAndView:

考虑一下返回值为ModelAndView 却得到一个json字符串的方式

Void:

对象:

 

 六:拦截器

 

 

  

转载于:https://www.cnblogs.com/a103007/p/9781568.html

你可能感兴趣的文章
Not enough free disk space on disk '/boot'(转载)
查看>>
android 签名
查看>>
vue项目中使用百度统计
查看>>
android:scaleType属性
查看>>
SuperEPC
查看>>
mysql-5.7 innodb 的并行任务调度详解
查看>>
shell脚本
查看>>
Upload Image to .NET Core 2.1 API
查看>>
Js时间处理
查看>>
Java项目xml相关配置
查看>>
三维变换概述
查看>>
第三次作业
查看>>
vue route 跳转
查看>>
【雷电】源代码分析(二)-- 进入游戏攻击
查看>>
Entityframework:“System.Data.Entity.Internal.AppConfig”的类型初始值设定项引发异常。...
查看>>
Linux中防火墙centos
查看>>
mysql新建用户,用户授权,删除用户,修改密码
查看>>
FancyCoverFlow
查看>>
JS博客
查看>>
如何设置映射网络驱动器的具体步骤和方法
查看>>