SpringMVC学习笔记3(细节知识点)

作者: 页川叶川 | 来源:发表于2019-04-23 22:07 被阅读2次

    第三部分 细节知识点

    1.REST

    什么是REST:
    资源状态转化,读者可自行百度了解,这里不再详述:

    REST.png
    配置org.springframework.web.filter.HiddenHttpMethodFilter
    <!-- 配置org.springframework.web.filter.HiddenHttpMethodFilter: 可以把POST请求转为DELETE或POST请求 -->
        <filter>
            <filter-name>HiddenHttpMethodFilter</filter-name>
            <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
        </filter>
    
        <filter-mapping>
            <filter-name>HiddenHttpMethodFilter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
    
    用例:
    index.jsp 添加以下代码
    <a href="springmvc/testRest/1">Test Rest GET</a><br>
    
      <form action="springmvc/testRest" method="post">
          <input type="submit" value="TestRest POST">
      </form>
      <br>
    
      <form action="springmvc/testRest/1" method="post">
          <input type="hidden" name="_method" value="DELETE">
          <input type="submit" value="TestRest DELETE">
      </form>
      <br>
    
      <form action="springmvc/testRest/1" method="post">
          <input type="hidden" name="_method" value="PUT">
          <input type="submit" value="TestRest PUT">
      </form>
      <br>
    
    SpringMVCTest.java 添加以下代码
    
    /*
        * Rest风格的URL
        * 以CRUD为例:
        * 新增:/order POST
        * 修改:/order/1 PUT
        * 获取:/order/1 GET
        * 删除:/order/1 DELETE
        *
        * 如何发送PUT请求与DELETE请求呢?
        * 1.需要配置HiddenHttpMethodFilter
        * 2.需要发送POST请求
        * 3.需要在发送POST请求时携带一个name="_method"的隐藏域,值为PUT或DELETE
        *
        * 在SpringMVC的目标方法中如何得到id呢?
        * 使用@PathVariable注解
        * */
    
    @RequestMapping(value = "/testRest/{id}",method = RequestMethod.GET)
        public String testRest(@PathVariable Integer id) {
            System.out.println("testRest GET: " + id);
            return SUCCESS;
        }
    
        @RequestMapping(value = "/testRest",method = RequestMethod.POST)
        public String testRest() {
            System.out.println("testRest POST");
            return SUCCESS;
        }
    
        @RequestMapping(value = "/testRest/{id}",method = RequestMethod.DELETE)
        public String testRestDelete(@PathVariable Integer id) {
            System.out.println("testRest DELETE: " + id);
            return SUCCESS;
        }
    
        @RequestMapping(value = "/testRest/{id}",method = RequestMethod.PUT)
        public String testRestPut(@PathVariable Integer id) {
            System.out.println("testRest PUT: " + id);
            return SUCCESS;
        }
    

    2.POJO对象绑定请求参数

    • SpringMVC会按请求参数名和POJO属性名进行自动匹配,自动为该对象填充属性值。支持级联属性。如dept.deptId、dept.address.tel等
    测试:
    • User.java(省略setter与getter、toString方法)
    public class User {
    
        private String username;
        private String password;
        private String email;
        private int age;
    
        private Address address;
    
    }
    
    • Address.java(省略setter与getter、toString方法)
    public class Address {
    
        private String province;
        private String city;
    
    }
    
    • index.jsp添加
    <form action="springmvc/testPojo" method="post">
          username: <input type="text" name="username"/>
          <br>
          password: <input type="password" name="password"/>
          <br>
          email: <input type="text" name="email"/>
          <br>
          age: <input type="text" name="age"/>
          <br>
          province: <input type="text" name="address.province"/>
          <br>
          city: <input type="text" name="address.city"/>
          <br>
          <input type="submit" value="Submit"/>
      </form>
    
    • SpringMVCTest.java添加
    /*
        * SpringMVC 会按请求参数名和POJO属性名进行自动匹配
        * 自动为该对象填充属性值。支持联机属性
        * 如dept.deptId、dept.address.tel等
        * */
        @RequestMapping(value = "/testPojo",method = RequestMethod.POST)
        public String testPojo(User user) {
            System.out.println("testPojo: " + user);
            return SUCCESS;
        }
    

    3.使用Servlet API作为参数

    • 可以使用Servlet原生的API作为目标方法的参数 具体支持一下类型
      用例:
    /*
        * 可以使用Servlet原生的API作为目标方法的参数  具体支持一下类型
        * HttpServletRequest
        * HttpServletResponse
        * HttpSession
        * java.security.Principal
        * Local InputStream
        * OutputStream
        * Reader
        * Writer
        * */
        @RequestMapping("/testServletAPI")
        public void testServletAPI(HttpServletRequest request,
                                     HttpServletResponse response,
                                     Writer out) throws IOException {
            System.out.println("testServletAPI, " + request + ", " + response);
            out.write("Hello Spring MVC");
    //      return SUCCESS;
        }
    

    4.处理模型数据

    Spring MVC提供以下几种途径输出模型数据:


    处理模型数据.png
    - ModelAndView
    ModelAndView.png
    • 示例:
    SpringMVCTest.java添加:
    /*
        * 目标方法的返回值可以是 ModelAndView 类型。
        * 其中可以包含视图和模型信息
        * Spring MVC 会把 ModelAndView 的 model 中数据放入到 request 域对象中
        * */
        @RequestMapping("/testModelAndView")
        public ModelAndView testModelAndView() {
            String viewName = SUCCESS;
            ModelAndView modelAndView = new ModelAndView(viewName);
    
            // 添加模型数据到 ModelAndView 中.
            modelAndView.addObject("time",new Date());
    
            return modelAndView;
        }
    
    index.jsp添加:
    <a href="springmvc/testModelAndView">Test ModelAndView</a><br>
    
    sussess.jsp添加:
    time:${requestScope.time }
    
    • 注意:这里有一种错误可能使页面无法跳转(导包问题):
    正确: :import org.springframework.web.servlet.ModelAndView;
    错误: :import org.springframework.web.portlet.ModelAndView;
    
    - Map及Model
    Map及Model.png
    • 示例:
    SpringMVCTest.java添加:
    /*
        * 目标方法可以添加 Map 类型(实际上也可以是 Model 类型或ModelMap类型)
        * */
        @RequestMapping("/testMap")
        public String testMap(Map<String,Object> map) {
            map.put("names", Arrays.asList("Tom","Jerry","Mike"));
            return SUCCESS;
        }
    
    index.jsp添加:
    <a href="springmvc/testMap">Test Map</a><br>
    
    success.jsp添加:
    names:${requestScope.names }
    

    相关文章

      网友评论

        本文标题:SpringMVC学习笔记3(细节知识点)

        本文链接:https://www.haomeiwen.com/subject/rjgbgqtx.html