学习Spring-MVC的第二天

这篇讲的是RequestMapping的映射和HiddenHttpMethodFilter过滤器

@Controller
@RequestMapping("indexClassController")
public class indexController {
	
	@RequestMapping("indexController")
	public String GOTO() {
		return "index";
	}
}

一般controller中的映射有类的映射和方法的映射,如果像我这段代码一样是如何映射的呢?

<a href="indexClassController/indexController">hello world</a>

没错,先类的映射再类里方法的映射

接下来谈谈RequestMapping里面的属性
首先我们前面给出来的代码其实等价于

@Controller
@RequestMapping(value="indexClassController")
public class indexController {
	
	@RequestMapping(value="indexController")
	public String GOTO() {
		return "index";
	}
}

除了value,还有很多属性

  • 比如method
    举个例子: @RequestMapping(value=“indexController” method=RequestMethod.POST)
    这段代码中的method=RequestMethod.POST表示拦截"indexController"的POST请求然后进入这个方法
  • 比如params
    @RequestMapping(value="indexController" method=RequestMethod.POST,params={"name"})

表示必须有一个"name"的参数

@RequestMapping(value="indexController" method=RequestMethod.POST,params={"name=cpy"})

表示必须有一个"name"参数的同时还要参数值为cpy才行

@RequestMapping(value="indexController" method=RequestMethod.POST,params={"name=cpy","age!=0"})

表示要不就没这个age的参数,要不就不能为0;

@RequestMapping(value="indexController" method=RequestMethod.POST,params={"name=cpy","age!=0","!weight"})

表示不能有如果有weight参数就不拦截

  • 接下来我们谈谈ant风格的请求路径

‘?’ 任意一个单字符
‘*’ 任意字符(0个或多个)
‘**’ 任意目录

    @RequestMapping(value="indexController/*/hello")

以下会被拦截

<a href="indexController/aaaa/hello">helloworld</a>
<a href="indexController/bbbb/hello">helloworld</a>

但是

<a href="indexController/aaaa/bbbbb/hello">helloworld</a>

这样就不会拦截了,会报404NotFound的错误,但是换成这样的就可以

    @RequestMapping(value="indexController/**/hello")

因为**表示任意目录

  • @PathVariable动态获取参数

如果

<a href="indexController/cpy" >hello</a>

就把cpy这个值传给了控制器中的name变量

@RequestMapping(value="indexController/{name}")
public String indexController(@PathVariable("name") String name){
	System.out.println(name)
	return "index";
}

这里控制台就打印 cpy

  • Spring-MVC四种请求

get :查
post :增
delete :删
put :改
一般有一些浏览器不支持delete和put所以我们一般使用过滤器来实现
这个过滤器的名字叫做"HiddenHttpMethodFilter"
这个过滤器有一些约定:
第零:请求方式必须为post
第一:这个请求必须是隐藏域
第二:这个请求的name属性值必须是"_method"
第三:这个请求的value属性值必须是"delete"或者"put"

<input type="hidden" name="_method" value="delete"/>
<input type="hidden" name="_method" value="put"/>

接下来我们在web.xml里面加一段配置

  <!-- 增加HiddenHttpMethodFilter过滤器;目的是给普通浏览器增加put和delete请求方式 -->
  <filter>
  	<filter-name>HiddenHttpMethodFilter</filter-name>
  	<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
  </filter>
  	
  <filter-mapping>
  	<filter-name>HiddenHttpMethodFilter</filter-name>
  	<url-pattern>/*</url-pattern>
  </filter-mapping>

这个和servlet的那个很像
唯一不一样的是filter-mapping种的url-pattern中拦截所有的请求是 /* ;
然后我们在jsp页面中写上

	<form action="indexControllerDelete" method="post">
		<input type="hidden" name="_method" value="DELETE"/> 
		<input type="submit" value="delete"/>
	</form>
	<br>
	<form action="indexControllerPut" method="post">
		<input type="hidden" name="_method" value="PUT"/> 
		<input type="submit" value="put"/>
	</form>

这里的value值必须为大写,因为是枚举类型
那么Controller里面怎么写呢?

@RequestMapping(value="indexControllerDelete",method=RequestMethod.DELETE)
public String DeleteTest(){}

@RequestMapping(value="indexControllerPut",method=RequestMethod.PUT)
public String PutTest(){}

这样就可以通过put和delete请求了

这篇文章来自于我观看网易云课堂的"SpringMVC视频教程"后记录下来的笔记,不得不说这个老师讲得很好,推荐大家去看看,另外有什么问题还请联系博主

最后祝大家学习愉快

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值