springMVC一些常见注解和使用

前言

刚学完springMVC,将常用注解献上,希望提升自己对springMVC的理解与运用,也希望能帮助到大家!
首先我们的知道服务器端的三层架构:表现层,业务层,持久层,而springMVC就是表现层的框架。
MVC工作流程:
首先是客户端(通常是浏览器)发出一个请求。第一个接受这个请求的组件一般是一个前端控制器。它将不同的请求交给不同的后端控制器来处理,而在后端控制器里面又可以调用相应的模型对象来处理具体的业务逻辑,最后再返回一个特定的视图响应给客户端。
下图为springMVC框架的操作细节:
springMVC的工作流程:
第一个接受这个请求的前端控制器叫DispatcherServlet,后端控制器叫Controller。负责处理请求URL和后端控制器映射的叫HandMapping,它有多种类型,比较灵活,也是在一个xml文件上进行配置。负责业务逻辑处理的模型对象一般也是我们平常写的DAO/DTO组件。只是它最后的返回更灵活,Controller返回一个ModelAndView对象给DispatcherServlet,ModelAndView可以携带一个视图对象,也可以携带一个视图对象的逻辑名。如果携带的是一个视图对象的逻辑名,那DispatcherServlet需要一个ViewResolver来查找用于渲染回应的视图对象。最后,DispatcherServlet将请求分派给ModelAndView对象指定的视图对象。视图对象负责渲染返回给客户的回应。
(摘自搜狗百科)
在这里插入图片描述

@Controller:

作用在类上,表明当前类为控制器类,加上该注解后spring框架会扫描使用了该注解的类的方法,并且会去检测该方法是否使用了@RequestMapping 注解。

@RequestMapping:

作用:用于建立请求URL和处理请求方法之间的对应关系
作用范围:作用范围在方法上或者类上 如果类上使用了该注解 那么jsp访问该页面的时候就需要在href访问方法的路径之前加上类的path
属性:
path:路径
value:path的别名
method:决定请求方式 值为枚举类型
params:“username” 一会请求这个方法 你必须给我传一个这个username属性 如果注解上username有值 那么你传的也必须username的值也必须为这个值
headers:发送请求当中必须包含的请求头

@Controller
public class HelloController {

    @RequestMapping(path = "/Hello",params={"username=heihei"},headers={"Accept"})
    public String sayHellio() {
        System.out.println("Hello SpringMVC");
        return "success";
    }
    }

@RequestParam:

场景: 上传的参数如果和访问的方法的参数对不上 那么就拿不到这个参数了 那么怎么办呢?

    @RequestMapping("/testRequestParam")
    public String testRequestParam(@RequestParam(name = "name") String username) {
        System.out.println("执行了");
        System.out.println(username);
        return "success";
    }

@RequestBody:

用于获取请求头内容,直接得到的是key=value&key=value形式
get请求方式不可用

    //获取请求体
    @RequestMapping("/testRequestBody")
    public String testRequestBody(@RequestBody String body) {
        System.out.println(body);
        return "success";
    }

@RequestHeader:

获取指定的请求头

    //    获取请求头的值  需要哪个填哪个 (据说可以防爬虫 可以试下)
    @RequestMapping("/testRequestHeader")
    public String testRequestHeader(@RequestHeader(value = "Accept") String header) {
        System.out.println(header);
        return "success";
    }

@CookieValue:

   //获取cookie的值
    @RequestMapping("/testCookieValue")
    public String testCookieValue(@CookieValue(value = "JSESSIONID") String cookieValue) {
        System.out.println(cookieValue);
        return "success";
    }

@ModelAttribute:

在方法上注解

这种情况下,方法会在每个控制器方法调用之前被调用。

   //获取cookie的值
    @RequestMapping("/testCookieValue")
    public String testCookieValue(@CookieValue(value = "JSESSIONID") String cookieValue) {
        System.out.println(cookieValue);
        return "success";
    }

@SessionAttributes

用于多次执行控制器之间的方法参数共享
该注解只能作用在类上

//@SessionAttributes(value = {"msg"}) //把msg存入到session域中

    //获取SessionAttributes的值
    @RequestMapping("/testSessionAttributes")
    public String testSessionAttributes(Model model) {
        System.out.println("testSessionAttributes执行了");
        //底层会存储到request域当中
        model.addAttribute("msg", "haha");
        return "success";
    }

    @RequestMapping("/getSessionAttributes")
    public String getSessionAttributes(ModelMap model) {
        System.out.println("testSessionAttributes执行了");
        //从session中获取值
        String msg = (String) model.get("msg");
        System.out.println(msg);
        return "success";
    }

@RequestBody 自动将请求体的和bean对应封装

@ResponseBodyt 自动将bean转换成了json数据

依赖:

<dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.0</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.9.0</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.9.0</version>
        </dependency>

ps:当使用jquery的ajax上传,解决静态资源拦截的问题
springmvc.xml

    <!--前端控制器,哪些静态资源不拦截 两参数:请求路径带js任何文件也都不拦截 以后js下的任何文件都不拦截 -->
    <mvc:resources location="/js/" mapping="/js/**"></mvc:resources>

 //模拟异步请求和响应
    @RequestMapping("/testAjax")
    public @ResponseBody User1 testAjax(@RequestBody User1 user1) { //拿到请求体的内容
        System.out.println("异步");
        //客户端发送的是ajax请求 传的是json字符串,后端把json字符串封装到user1对象中
        System.out.println(user1);

        //做响应,模拟查询
        user1.setUsername("查完了");
        user1.setAge(40);
        user1.setPassword("ahha");

        System.out.println(user1);
        //做响应
        return user1;
    }

以上是一些常见的注解,稍后会详细上传拦截器,文件上传下载,异常处理等文章!

猜你喜欢

转载自blog.csdn.net/Pzzzz_wwy/article/details/105458806