程序猿阵线联盟-汇总各类技术干货

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

2019-04-23  本文已影响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对象绑定请求参数

测试:
public class User {

    private String username;
    private String password;
    private String email;
    private int age;

    private Address address;

}
public class Address {

    private String province;
    private String city;

}
<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>
/*
    * 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作为目标方法的参数  具体支持一下类型
    * 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 }
上一篇下一篇

猜你喜欢

热点阅读