• springmvc学习(四)


    1.使用 @CookieValue 绑定请求中的 Cookie 值

    例子:

    java

    1 @RequestMapping(value="/testCookieValue")
    2     public String testCookieValue(@CookieValue(value="JSESSIONID")String cookie)
    3     {
    4             
    5             System.out.println("testRequestCookie"+cookie);
    6             return SUCCESS;
    7         }
    View Code

    jsp

    <a href="springmvc/testCookieValue">testCookieValue</a><br>

    2.使用 POJO 对象绑定请求参数值

    POJO:

    POJO(Plain Ordinary Java Object)简单的Java对象,实际就是普通JavaBeans,是为了避免和EJB混淆所创造的简称。
    使用POJO名称是为了避免和EJB混淆起来, 而且简称比较直接. 其中有一些属性及其getter setter方法的类,没有业务逻辑,有时可以作为VO(value -object)或dto(Data Transform Object)来使用.当然,如果你有一个简单的运算属性也是可以的,但不允许有业务方法,也不能携带有connection之类的方法。
    支持业务逻辑的协助类.
    Spring MVC 会按请求参数名和 POJO 属性名进行自动匹
    配,自动为该对象填充属性值。支持级联属性。
    例子:
    jsp
     1 <form action="springmvc/testPojo" method="post">
     2 username
     3 <input type="text" name="username"><br>
     4 password
     5 <input type="password" name="password"><br>
     6 email
     7 <input type="text" name="email"><br>
     8 age
     9 <input type="text" name="age"><br>
    10 city
    11 <input type="text" name="address.city"><br>
    12 province
    13 <input type="text" name="address.province"><br>
    14 <input type="submit" value="submit">
    15 
    16 </form>
    View Code

    java

    1 @RequestMapping(value="/testPojo")
    2     public String testPojo(User user)
    3     {
    4             
    5             System.out.println("testPojo"+user);
    6             return SUCCESS;
    7         }
    View Code

    注意两点

    1.直接system.out.print打印出对象的时候,是要调用对象pojo类的toString() 方法的,所以需要重新写这个方法。

    原因:

    System.out的println方法只能在控制台输出字符串,而Person实例是一个内存中的对象,怎么能直接转换为字符串输入呢?当使用该方法输出Person对象时,实际上输出Person对象的toString()方法的返回值,也就是这面代码效果相同

    System.out.println(p);

    System.out.println(p.toString());

    toString方法是Object类里的一个实例方法,所有Java类都是object类的子类,因此所有Java对象都具有toString方法。

    不仅如此,所有Java对象都可以和字符串进行连接运算,当Java对象和字符串进行连接运算时,系统自动调用Java对象toString()方法返回值和字符串进行连接运算下面代码效果相同

    String pStr=p+””;

    StringpStr=p.toString()+””;

     toString()方法是一个非常特殊的方法,是一个“自我描述”方法,该方法通常用于实现当程序员直接打印该对象时,系统将会输出该对象的“自我描述”信息,用以告诉外界该对象具有的状态信息。

     Object类提供的toString()方法总是返回该对象实现类的”类名+@+hashCode”值,这个返回值不能真正实现“自我描述”功能,因此我们可以重写object的toString()方法。

    下面是user类的源码

     1 package com.bai.entities;
     2 
     3 public class User {
     4     private String username;
     5     private String password;
     6     private  String email;
     7     private int age;
     8     private int id;
     9     
    10     public int getId() {
    11         return id;
    12     }
    13 
    14     public void setId(int id) {
    15         this.id = id;
    16     }
    17 
    18     private Address address;
    19 
    20     public String getUsername() {
    21         return username;
    22     }
    23 
    24     public void setUsername(String username) {
    25         this.username = username;
    26     }
    27 
    28     public String getPassword() {
    29         return password;
    30     }
    31 
    32     public void setPassword(String password) {
    33         this.password = password;
    34     }
    35 
    36     public String getEmail() {
    37         return email;
    38     }
    39 
    40     public void setEmail(String email) {
    41         this.email = email;
    42     }
    43 
    44     public int getAge() {
    45         return age;
    46     }
    47 
    48     public void setAge(int age) {
    49         this.age = age;
    50     }
    51     public Address getAddress() {
    52         return address;
    53     }
    54     public void setAddress(Address address) {
    55         this.address = address;
    56     }
    57     /*@Override
    58     public String toString() {
    59         return "User [username=" + username + ", password=" + password + ", email=" + email + ", age=" + age
    60                 + ", address=" + address + "]";
    61     }*/
    62     public User(String username, String password, String email, int age) {
    63         super();
    64         this.username = username;
    65         this.password = password;
    66         this.email = email;
    67         this.age = age;
    68     }
    69     public User(String username, String password, String email, int age, int id) {
    70         super();
    71         this.username = username;
    72         this.password = password;
    73         this.email = email;
    74         this.age = age;
    75         this.id = id;
    76     }
    77 
    78     @Override
    79     public String toString() {
    80         return "User [username=" + username + ", password=" + password + ", email=" + email + ", age=" + age + ", id="
    81                 + id + "]";
    82     }
    83 
    84     public User() {
    85         super();
    86         // TODO Auto-generated constructor stub
    87     }
    88     
    89    
    90     
    91 
    92 }
    View Code

    返回页面的时候用到了EL表达式的requestScope

    这里说一下requestScope与request的区别:

    pageContext.request是一个具体的对象,在你的http请求过程中存在。 
    requestScope是一个定义, 表明一个http请求的整个声明周期,它只是一个定义而已,不是一个对象。 EL中你可以在这个周期中放置、获取对象。(当然,其实真正的操作也是针对request对象的)。 比如${requestScope.a.b},其实就是要表明我告诉jsp要到requestScope这个声明周期中获取对象a.b.而背后的实现就是从request.getAttribute("a",然后根据表达式得到相应的a.b对象。

    3.使用 Servlet API 作为入参

    MVC 的 Handler 方法可以接受哪些 ServletAPI 类型的参数
    HttpServletRequest •
    HttpServletResponse •
    HttpSession •
    java.security.Principal •
    Locale •
    InputStream •
    OutputStream •
    Reader •
    Writer •

    例子:

    jsp

    1 <a href="springmvc/testServlet">testServlet</a><br>
    View Code

    java

    1     @RequestMapping(value="/testServlet")
    2     public void testServlet(HttpServletRequest req,HttpServletResponse res,Writer out) throws IOException
    3     {
    4             
    5             System.out.println("testServlet"+req+res);
    6             out.write("hello springmvc");
    7             //return SUCCESS;
    8         }
    View Code
  • 相关阅读:
    vue2.0对于数组变化不及时刷新视图的问题
    [Node]报错:gyp verb check python checking for Python executable "python2" in the PATH
    spring的@ControllerAdvice注解
    antdVue--Upload使用
    antd Vue--this.$confirm弹窗使用
    播放视频判断是否暂停_Javascript判断Video视频播放、暂停、结束完成及获取长度事件监听处理...
    P5400 [CTS2019]随机立方体
    P7502 「HMOI R1」不知道是啥的垃圾题
    vue3插槽使用
    cocos creator破解
  • 原文地址:https://www.cnblogs.com/baipeng/p/5816161.html
Copyright © 2020-2023  润新知