@PostMapping("handle_login.do") public String handleLogin( String username, @RequestParam("pwd") String password) { System.out.println("username=" + username); System.out.println("password=" + password); return null; }
当使用了`@RequestParam`注解后,默认情况下,参数是必须提交的,如果客户端提交的请求中并不包含该名称的参数,则会报告400错误:
HTTP Status 400 - Required String parameter 'pwd' is not present
如果并不强制要求客户端提交某参数,可以:
@RequestParam(value="pwd", required=false)
通过该注解,还可以通过`defaultValue`属性来配置**默认值**,即客户端没有提交参数值时,服务器端视为提交了默认的某个值:
@RequestParam(value="pwd", required=false, defaultValue="111111")
注意:当使用`defaultValue`时,必须显式的将`required`属性设置为`false`,否则,如果没有设置,默认是必须提交参数值的,那么,默认值就没有意义了!
**小结**
关于`@RequestParam`注解的应用场景,可以是:
- 客户端提交的参数名与服务器端使用的方法的参数名不一致时;
- 要求客户端必须提交某些参数时;
- 为某些参数设置默认值时。
转发与重定向的核心区别在于客户端请求了几次!在转发的处理过程中,客户端其实只发出了1次请求,而在重定向中,客户端发出了2次请求!
转发是发生在服务器内部的!所以,转发时的URL并不会发生变化!并且,JSP文件可以存放在WEB-INF目录下(该目录是不允许通过http协议访问的)。由于转发是在服务器内部完成的,所以,组件之间(控制器与JSP)可以直接传递数据。
重定向的本质是第1次请求时,服务器端可能无法完全全部的处理,所以,服务器向客户端响应了重定向(通常响应码是302),客户端得到这第1次的响应结果时,由于响应码表示的是重定向,所以,会再次发生第2次请求,以尝试得到最终的响应结果。由于客户端发出了第2次请求,所以,在重定向时,URL是会发生变化的!并且,两次请求之间的数据默认是无法共享或传递的!
如果希望URL发生变化,必须使用重定向!
如果有大量的数据需要传递,可以考虑使用转发!
控制器处理好的数据,不便于在JAVA中编写如何显示,则应该转发给JSP页面!
枚举
gender; // 性别 String gender = "男"; // "女","帅哥"/"美女","先生"/"女士" int gender = 1; public enum Gender { MALE, FEMALE } if (gender == Gender.MALE) { System.out.println("先生,您好!"); } else { System.out.println("女士,您好!"); }
Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx