SpringMVC(二)——核心类和注解

MicroBoy 2020-06-17

1.DispatcherServlet

全名是org.springframework.web.servlet.DispatcherServlet,在web配置一下就好了

2.Controller

控制器类上需要 实现Controller接口或者 使用@Controller注解

注解是org.springframework.stereotype.Controller(配置文件加上context命名空间、开启扫描包)

接口是org.springframework.web.servlet.mvc.Controller

3.ViewResolver

视图解析器,在springmvc-config.xml里配置,一般通过设置前后缀来显示请求访问路径,功能实现RequestMapping搭配,默认当前路径为WebContent,配置例如

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
         <!-- 设置前缀 -->
         <property name="prefix" value="/WEB-INF/jsp/" />
         <!-- 设置后缀 -->
         <property name="suffix" value=".jsp" />
    </bean>

还有一个order属性,用正整数表示优先级,越小优先级越大,多个视图解析器可以判断优先级,第一个找不到会找第二个,以此类推。

<property name="order" value="1"/>

注解

请求映射,为控制器指定可以处理哪些URL请求

在上面的视图解析器的基础上,测试效果。

(1)标注在方法上,例如

package com.mvc.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class FirstController {

    @RequestMapping("/firstController")
    public String test() {
        System.out.println("facai1");
        return "index";
    }
}

效果是:访问http://localhost:8080/MVC_02/firstController会调用test()方法,在控制台输出facai1,并且跳转到/MVC_02/WEB-INF/jsp/index.jsp。这里的[index]是test()方法返回的,与视图解析器的前缀[/WEB-INF/jsp/]后缀[.jsp]拼接而成请求路径。

(2)标注在类上,例如

package com.mvc.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@RequestMapping("/hello")
@Controller
public class FirstController {
    @RequestMapping("/firstController")
    public String test() {
        System.out.println("facai1");
        return "index";
    }
}

效果是:访问http://localhost:8080/MVC_02/hello/firstController会调用test()方法,在控制台输出facai1,并且跳转到/MVC_02/WEB-INF/jsp/index.jsp。就是在方法的注解前多加一个路径,请求是通过方法处理,而不是类,所以方法上的注解必须要有,类上注解可以有。

(3)注解的属性

value:请求路径。

method:设置请求方法,只有客户端发送请求方式和method一样,才能处理,请求方式有GET,POST,PUT,DELETE,写法例如method=RequestMethod.GET。

params:用来设置客户端传到服务器的数据,支持表达式,可以是数组。写法例如params={"username","!phone","age=12","sex!=2"},表示传递的数据中,需要有username属性,不能有phone属性,age属性必须为12,sex必须不为2,否则无法处理这个请求。

headers:设置请求头信息,所发送的请求的请求头信息一定要和header属性中设置的一样。

(4)组合注解

@GetMapping @PostMapping @PutMapping @DeleteMapping @PatchMapping

化简了原来的注解的method属性,例如

@RequestMapping(value="/test",method=RequestMethod.POST)等同

@PostMapping(value="/test")

(5)支持Ant风格风格

三种匹配符号,[*]表示0-多个任意字符,[?]表示任意单个字符,[**]表示任意多层目录,写法例如

@RequestMapping(value="/*/ant??/**/test")

(6)支持Restful风格(占位符方式的路径)

以前:localhost:8080/MCV_02/Rest?id=1001&name=admin

现在:localhost:8080/MCV_02/Rest/1001/admin

@RequestMapping("/Rest/{id}/{name}")
    public String testRest(@PathVariable("id") Integer id,@PathVariable("name")String name) {
        System.out.println("test_Restful");
        return "success";
    }

 

 

相关推荐