SpringMVC常用请求方法,注解

  1. @RequestMapping 是一个用来处理请求地址映射的注解 在项目中比较常用的有三个属性:value、method 和 produces
 @RequestMapping("/save1")
 public String save1(User user){
     System.out.println(user.toString());
     return "suc";
 }


<!-- @RequestMapping("/helloword/?/aa")Ant 路径,匹配符:
    ?:匹配文件名的一个字符
    *:匹配文件名的所有字符
    **:匹配多层路径
-->

前端参数绑定到某个属性里面

<!--请求参数绑定(封装到实体类) list[].属性名-->
<form action="/SpringMVC/user/save2" method="get">
        <input type="text" name="username"/><br/>
        <input type="text" name="age"/><br/>
        <input type="text" name="account.money"/><br/>
        <input type="text" name="accounts[0].money"/><br/>
        <input type="text" name="accounts[1].money"/><br/>
        <input type="submit"/>
</form>
  1. @RequestParam 把请求中的指定名称的参数传递给控制器中的形参赋值
@RequestMapping("/dept")
public class DeptController {
    @RequestMapping("/save")
    public String save(@RequestParam(value = "username",required = true) String name){
        //name的参数必须提供,否则访问save方法就会报错
        System.out.println(name);
        return "suc";
    }
}
  1. @PathVariable 注解主要用来获取 URL 参数, 如果不一致的话,其实也可以解决,用@PathVariable 中的 value 属性来指定对应关系,常用参数 required 属性:true 表示该参数必须要传,否则就会报 404 错误,false 表示可有可无。defaultValue 属性:默认值,表示请求中没有同名参数时的默认值。
@RequestMapping("/dept/{id}")
public class DeptController {
    @RequestMapping("/save")
    public String save(@PathVariable Integerid){
        //name的参数必须提供,否则访问save方法就会报错
        System.out.println(name);
        return "suc";
    }
}
  1. @RequestBody 注解用于接收前端传来的实体,接收参数也是对应的实体,比如前端通过 JSON 提交传来两个参数 username 和 password
@PostMapping("/dept/{id}")
public class DeptController {
    @RequestMapping("/save")
    public String save(@RequestBody User user){
        //name的参数必须提供,否则访问save方法就会报错
        System.out.println(user);
        return "suc";
    }
}
  1. @CookieValue用来获取Cookie中的值;参数: value:参数名称 required:是否必须 defaultValue:默认值
		/**
     * 获取 Session
     * SESSION=xxxxxx
     */
    @RequestMapping("/testCookieValue")
    public String testCookieValue(@CookieValue("SESSION") String sessionId) {
        System.out.println("JSESSIONID = " + sessionId);
        return "success";
    }
  1. @SessionAttributes即将值放到session作用域中,写在class上面。  
      @SessionAttributes 除了可以通过属性名指定需要放到会话中的属性外(value 属性值),
    还可以通过模型属性的对象类型指定哪些模型属性需要放到会话中(types 属性值)
@SessionAttributes(value = {"user"}, types = {String.class})
@RequestMapping("/springmvc")
@Controller
public class SessionAttributesTest {
    
    /**
     * @SessionAttributes
     *         除了可以通过属性名指定需要放到会话中的属性外(value 属性值),
     *         还可以通过模型属性的对象类型指定哪些模型属性需要放到会话中(types 属性值)。
     * 注意: 该注解只能放在类的上面,不能放在方法上面
     *
     * @return
     */
    @RequestMapping("/testSessionAttributes")
    public String testSessionAttributes(Map<String, Object> map) {
        User user = new User(1, "刘邦", "qwe", "123", "辽宁");
        map.put("user", user);
        map.put("school", "重庆");
        return "success";
    }
}
  1. @ResponseBody 该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。

补充: 在SpringMVC中获取request对象的几种方式

  1. 最简单的方式(注解法)
@Autowired
private   HttpServletRequest request; 
  1. 最麻烦的方法 在web.xml中配置一个监听
 <listener>  
        <listener-class>  
            org.springframework.web.context.request.RequestContextListener  
        </listener-class>  
</listener>

之后再程序里可以用代码来获得

HttpServletRequest request =((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest()
  1. 最直接的方法
public  String hello(HttpServletRequest request,HttpServletResponse response)
  1. 利用Spring web提供的@ModelAttribute注解
public class BaseAction{
   protected HttpServletRequest request;
   protected HttpServletResponse response;
   protected HttpSession session;
  
   @ModelAttribute
   public void setReqAndRes(HttpServletRequest request, HttpServletResponse response){
       this.request = request;
       this.response = response;
       this.session = request.getSession();
   }
   /** 其他业务代码 */
}
2、通过spring提供的RequestContextHolder在非contrller层获取request和response对象
    HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();
    HttpServletResponse response = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getResponse();
    HttpServletResponse response = ((ServletWebRequest)RequestContextHolder.getRequestAttributes()).getResponse();
    ServletContext context = ContextLoader.getCurrentWebApplicationContext().getServletContext();

request的基本方法

getScheme()    :获取当前访问的协议,比如http
getServerName()   :获取当前服务器的名字
getServerPort()    :获取当前服务器的端口号
getAttribute(String name):返回由name指定的属性值
getAttributeNames():返回request对象所有属性的名字集合,结果是一个枚举的实例
getCookies():返回客户端的所有Cookie对象,结果是一个Cookie数组
getCharacterEncoding():返回请求中的字符编码方式
getContentLength():返回请求的Body的长度实例
getInputStream():返回请求的输入流,用于获得请求中的数据
getMethod():获得客户端向服务器端传送数据的方法
getParameter(String name):获得客户端传送给服务器端的有name指定的参数值
getParameterNames():获得客户端传送给服务器端的所有参数的名字,结果是一个枚举的实例
getParameterValues(String name):获得有name指定的参数的所有值
getProtocol():获取客户端向服务器端传送数据所依据的协议名称
getQueryString():获得查询字符串
getRequestURI():获取发出请求字符串的客户端地址
getRemoteAddr():获取客户端的IP地址
getRemoteHost():获取客户端的名字
getSession([Boolean create]):返回和请求相关Session
getServerName():获取服务器的名字
getServletPath():获取客户端所请求的脚本文件的路径

你可能感兴趣的:(springboot,java,java,前端,servlet)