springMVC基础知识

1.@Controller

标注在类定义前,表示该类为一个控制器。

该注解有一个value参数,表示该控制器的名称。

比较典型的用法是配合@RequestMapping注解一起使用。

@Controller
@RequestMapping(value="/index")
public class HelloControler {
......
}
@Controller
public class HelloControler {
......
}

 

2.@RequestMapping

可标注在类定义和方法定义前,表示处理的HTTP请求路径。

该注解有7个参数,分别是:

consumes:表示处理请求的提交内容类型(Content-Type),如:application/json、text/html等。

@Controller
@RequestMapping(value="/index",consumes="application/json")
public class HelloControler {
    
    @RequestMapping("/hello")
    public String Hello() {
        
        return "success";
    }
}

返回的success字符串是一个视图名称,需要配置视图解析器完成相应视图解析。

注:提交内容类型不一致时,则会抛出Unsupported Media Type异常(type=Unsupported Media Type, status=415)

 

 

 

 

headers:表示处理请求的header的内容需要符合指定条件,如:session、host、Accept-Encoding等

method:表示处理请求的提交方式,如:get、post、put、delete等。

name:名称

params:表示处理请求的提交参数需要包含指定参数。

path:表示处理的HTTP请求路径,是value的别名。

produces:返回结果的类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回。

 

3.@PathVariable

使用路径占位符映射到形参,获取请求路径中的值。

@Controller
@RequestMapping(value="/index")
public class HelloControler {
    
    @RequestMapping(value="/hello/{name}/{class}")
    @ResponseBody
    public String Hello(@PathVariable(name="name") String userName,@PathVariable(name="class") String userClass) {
        System.out.println(userName + "," + userClass);
        return "success";
    }
}

4.@RequestParam

将http请求参数的值映射到形参中,如果参数未传值,可设置默认值。

@Controller
@RequestMapping(value="/index")
public class HelloControler {
    
    @RequestMapping(value="/hello")
    @ResponseBody
    public String Hello(@RequestParam(name="name",defaultValue="abc") String userName,
                        @RequestParam(name="class",defaultValue="abc")  String userClass) {
        System.out.println(userName + "," + userClass);
        return "success";
    }
}

注:若请求参数的名称和形参的名称是一致时,可以不需要写@RequestParam,控制器默认通过名称进行映射。形参可以是一个对象,对象的属性名和请求参数一致时,控制器也可以进行映射而不需要写@RequestParam

@Controller
@RequestMapping(value="/index")
public class HelloControler {
    
    @RequestMapping(value="/hello")
    @ResponseBody
    public String Hello(User user) {
        System.out.println(user.getName() + "," + user.getCls());
        return "success";
    }
}

 

5.@RequestHeader

将http请求中header的数据项值映射到形参中。

@Controller
@RequestMapping(value="/index")
public class HelloControler {
    
    @RequestMapping(value="/hello")
    @ResponseBody
    public String Hello(@RequestHeader(name="host",defaultValue="127.0.0.1") String host) {
        System.out.println("host:" + host);
        return "success";
    }
}

 6.@CookieValue

将http请求中cookie的数据项值映射到形参中。

@Controller
@RequestMapping(value="/index")
public class HelloControler {
    
    @RequestMapping(value="/hello")
    @ResponseBody
    public String Hello(@CookieValue(name="SESSION") String session) {
        System.out.println("session:" + session);
        return "success";
    }
}

 7.向request域共享数据

有5种方式,分别是servletAPI、ModelAndView、Model、ModelMap、Map,其中后三种在控制器处理时,都转换为BindingAwareModelMap类对象

(1)通过servletAPI向request域共享数据。形参使用HttpServletRequest,控制器自动给形参赋值。

在success视图中可以获取到name的值。

@Controller
@RequestMapping(value="/index")
public class HelloControler {
    
    @RequestMapping(value="/hello")
    public String Hello(HttpServletRequest request) {
        request.setAttribute("name", "zhangsan");
        return "success";
    }

}

 

(2)使用ModelAndView向Request域共享数据

返回一个ModelAndView对象,控制器将结果交给相应的视图处理。

@Controller
@RequestMapping(value="/index")
public class HelloControler {
    
    @RequestMapping(value="/hello")
    public ModelAndView Hello() {
        ModelAndView mv = new ModelAndView();
        mv.setViewName("success");
        mv.addObject("name", "zhangsan");
        
        return mv ;
    }
}

(3)使用Model向Request域共享数据

@Controller
@RequestMapping(value="/index")
public class HelloControler {

    @RequestMapping(value="/hello")
    public String Hello(Model model) {
        model.addAttribute("name", "zhangsan");
        
        return "success" ;
    }
}

(4)使用Map向Request域共享数据

@Controller
@RequestMapping(value="/index")
public class HelloControler {

    @RequestMapping(value="/hello")
    public String Hello(Map<String,Object> map) {
        map.put("name", "zhangsan");
        return "success";
    }
}

(5)使用ModelMap向request域共享数据

@Controller
@RequestMapping(value="/index")
public class HelloControler {
@RequestMapping(value
="/hello") public String Hello(ModelMap modelMap) { modelMap.addAttribute("name", "zhangsan"); return "success" ; } }

 

8.向session域共享数据

@Controller
@RequestMapping(value="/index")
public class HelloControler {

    @RequestMapping(value="/hello")
    public String Hello(HttpServletRequest request) {
        HttpSession session = request.getSession();
        session.setAttribute("name", "zhangsan");
        
        return "success";
    }
}

 

9.向application域共享数据

@Controller
@RequestMapping(value="/index")
public class HelloControler {
    
    @RequestMapping(value="/hello")
    public String Hello(HttpServletRequest request) {
        ServletContext sc = request.getServletContext();
        sc.setAttribute("name", "zhangsan");
        
        return "success";
    }
}

 

10.InternalResourceView

SpringMVC中默认的转发视图是InternalResourceView,控制器方法中使用"forward:"前缀的视图,默认转发到InternalResourceView解析处理。

posted on 2021-10-09 11:27  pcant  阅读(46)  评论(0编辑  收藏  举报