@RequestMapping详解
RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。这句话,太熟悉了。
一. RequestMapping路径详解
(1)首先springmvc.xml配置
<!-- 定义跳转的文件的前后缀 ,视图模式配置--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 这里的配置我的理解是自动给后面action的方法return的字符串加上前缀和后缀,变成一个 可用的url地址 --> <property name="prefix" value="/WEB-INF/jsp/" /> <property name="suffix" value=".jsp" /> </bean>
(2)Controller 类
import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; @Controller @RequestMapping("/jsp") public class RequestController { public static final String SUCCESS="success"; @RequestMapping("/login1") public void hello(){ System.out.println("hello world"); } /*第一点 *1:@RequestMapping定义在类上,那就相当于根目录 *2:@RequestMapping定义在方法上,那就相当于相对于类定义处的URL。 * 上面代码在类定义处指定映射为"/jsp",在hello()方法处指定为"/login1"。 * 那么hello()方法的URL映射地址为:http://localhost:8080/ssm/jsp/login1 * ssm指的是你项目的名称 */ /*第二点 * 1.@RequestMapping在类上定义不是必须的,如上如果我只在方法上定义@RequestMapping("/jsp/login1") * 那么它同样能访问上面的URL映射地址。 * 2.@RequestMapping的默认属性为value,所以@RequestMapping(value="/login1")和@RequestMapping("/login1")是等价的。 */ @RequestMapping("/login2") public String getModel(){ System.out.println("hello world"); return SUCCESS; } /*第三点:需要返回界面 *1.这个return success;加上springMVC配置的路径 * 那么它返回的路径是: * http://localhost:8080/ssm/WEB-INF/jsp/success.jsp */ @RequestMapping(value="/jsp/login3") public ModelAndView paramBind(){ ModelAndView modelAndView = new ModelAndView(); //传到界面的数据 modelAndView.addObject("date", "nihao"); modelAndView.setViewName(SUCCESS); return modelAndView; } /*第四点:返回界面同时带上数据 * 1.好多时候,我们要的不是跳转界面,而是能够把后台的数据传到前端去 * modelAndView.addObject放的就是你要传的数据 * modelAndView.setViewName返回路径名称 * 所以它的返回路径和上面一样 */ /*第五点:void类型无返回值跳转 * 1.根据上面无返回值那么它最终会跳转到 * http://localhost:8080/ssm/WEB-INF/jsp/jsp/login1.jsp * 原则: * prefix+类路径(类级别的mapping注解)+方法路径(方法级别的mapping注解)+prefix */ }
二.RequestMapping参数详解
请求参数的作用是使得请求的映射更加精细。
RequestMapping注解有六个属性,下面我们把她分成三类进行说明
value:定义处理方法的请求的 URL 地址。(重点)
method:定义处理方法的 http method 类型,如 GET、POST 等。(重点)
params: 定义请求的 URL 中必须包含的参数。或者不包含某些参数。(了解)
headers: 定义请求中 Request Headers 必须包含的参数。或者不包含某些参数。(了解)
下面也用个Controller 类来说明
1. Controller
@Controller @RequestMapping("/hello") public class TestController { public static final String SUCCESSS="successs"; /** * post动作请求的测试 */ @RequestMapping(method=RequestMethod.POST,value="/login1") public String testMethodPost(){ return SUCCESSS; } /** * 测试url中带参数(未测试请求头信息) */ //url http://localhost:8080/ssm/hello/login2?username=zhangsan&password=123&sex=2 @RequestMapping(value="/login2", params={"username","sex!=1","password=123"}, method=RequestMethod.GET) public String testHeadersAndParams(){ return SUCCESSS; } /** * PathVariable 映射 URL 绑定占位 ( 映射URL路径里面的变量) * * 用Integer会比int严谨 */ //http://localhost:8080/ssm/hello/login3/5 @RequestMapping(value="/login3/{id}",method=RequestMethod.GET) public String testPathVariable(@PathVariable("id") Integer id){ System.out.println("id:"+id); return SUCCESSS; } // http://localhost:8080/ssm/hello/login4/str @RequestMapping(value="/login4/{name}",method=RequestMethod.GET) public String testPathVariable2(@PathVariable("name") String name){ System.out.println("name :"+name); return SUCCESSS; } /** * 如果在方发上@RequestMapping()没有任何参数,那它就代表类上的value请求地址 * */ // http://localhost:8080/ssm/hello.jsp @RequestMapping() public String test(){ return SUCCESSS; } }
有关RequestMapping就先讲这么多。
想的太多,做的太少,中间的落差就是烦恼,要么去做,要么别想 少尉【9】