form提交后台注解拿不到数据_SSM框架(二十):SpringMVC(2)SpringMVC常用注解

RequestMapping注解

RequestMapping注解的作用是建立请求URL和处理方法之间的对应关系

RequestMapping注解可以作用在方法和类上

1. 作用在类上:第一级的访问目录

2. 作用在方法上:第二级的访问目录

3. 细节:路径可以不编写 / 表示应用的根目录开始

RequestMapping的属性

1. path 指定请求路径的url

2. value value属性和path属性是一样的

3. mthod 指定该方法的请求方式

4. params 指定限制请求参数的条件

5. headers 发送的请求中必须包含的请求头

@RequestMapping(path = "/testRequestMapping", method = {RequestMethod.POST,RequestMethod.GET},params = {"username=tom"},headers = {"accept"})

RequestParam注解

作用:把请求中的指定名称的参数传递给控制器中的形参赋值

属性

1. value:请求参数中的名称

2. required:请求参数中是否必须提供此参数,默认值是true,必须提供

<a href="anno/testRequestParam?name=haha">RequestParam</a>
@RequestMapping("/testRequestParam")
public String testRequestParam(@RequestParam(name="name") String username){
	System.out.println("执行了...");
	System.out.println(username);
	return "success";
}

RequestBody注解

作用:用于获取请求体的内容(注意:get方法不可以)

属性:

required:是否必须有请求体,默认值是true

<form action="anno/testRequestBody" method="post">
	用户名: <input type="text" name="uname"><br>
	年龄: <input type="text" name="age"><br>
	<input type="submit" value="提交">
</form>
@RequestMapping("/testRequestBody")
public String testRequestBody(@RequestBody String body){
	System.out.println("执行了...");
	System.out.println(body);
	return "success";
}

8c446256a0d764cce61acd0b0570fed1.png

150287f5723736db8b5f558ddc4d4b71.png

PathVariable注解

作用:拥有绑定url中的占位符的。例如:url中有/delete/{id},{id}就是占位符

属性

1. value:指定url中的占位符名称

Restful风格的URL

请求路径一样,可以根据不同的请求方式去执行后台的不同方法

restful风格的URL优点

1. 结构清晰

2. 符合标准

3. 易于理解

4. 扩展方便

<a href="anno/testPathVariable/10">testPathVariable</a>
@RequestMapping(value="/testPathVariable/{sid}")
public String testPathVariable(@PathVariable(name="sid") String id){
	System.out.println("执行了...");
	System.out.println(id);
	return "success";
}

86f97849737f224f3ad069a17ed0c37a.png

4f9c900494ed5ed0e3859376531bda0b.png

REST(英文: Representational State Transfer,简称 REST)描述了一个架构样式的网络系统,比如 web 应用程序。

HTTP 协议,是一个无状态协议,即所有的状态都保存在服务器端。因此,如果客户端想要操作服务器,

必须通过某种手段, 让服务器端发生“状态转化” (State Transfer)。而这种转化是建立在表现层之上的,所以

就是 “表现层状态转化” 。具体说,就是 HTTP 协议里面,四个表示操作方式的动词: GET 、 POST 、 PUT、

DELETE。它们分别对应四种基本操作: GET 用来获取资源, POST 用来新建资源, PUT 用来更新资源, DELETE 用来删除资源。

restful 的示例:

/account/1 HTTP GET : 得到 id = 1 的 account

/account/1 HTTP DELETE: 删除 id = 1 的 account

/account/1 HTTP PUT: 更新 id = 1 的 account

/account HTTP POST: 新增 account

HiddentHttpMethodFilter

由于浏览器 form 表单只支持 GET 与 POST 请求,而 DELETE、 PUT 等 method 并不支持, Spring3.0 添加了一个过滤器,

HiddentHttpMethodFilter可以将浏览器请求改为指定的请求方式,发送给我们的控制器方法,使得支持 GET、 POST、 PUT与 DELETE 请求。

RequestHeader注解

作用:获取指定请求头的值

属性:

value:请求头的名称

/**
     * 获取请求头的值
     * @param header
     * @return
     */
    @RequestMapping(value="/testRequestHeader")
    public String testRequestHeader(@RequestHeader(value="Accept") String header, HttpServletRequest request,HttpServletResponse response) throws IOException {
        System.out.println("执行了...");
        System.out.println(header);
         return "success";
    }

CookieValue注解

作用:用于获取指定cookie的名称的值

属性:

value:cookie的名称

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

ModelAttribute注解

作用:

该注解是 SpringMVC4.3 版本以后新加入的。它可以用于修饰方法和参数。

出现在方法上,表示当前方法会在控制器的方法执行之前,先执行。它可以修饰没有返回值的方法,也可

以修饰有具体返回值的方法。

出现在参数上,获取指定的数据给参数赋值。

属性:

value:用于获取数据的 key。 key 可以是 POJO 的属性名称,也可以是 map 结构的 key。

应用场景:

当表单提交数据不是完整的实体类数据时,保证没有提交数据的字段使用数据库对象原来的数据。

例如:

我们在编辑一个用户时,用户有一个创建信息字段,该字段的值是不允许被修改的。在提交表单数

据是肯定没有此字段的内容,一旦更新会把该字段内容置为 null,此时就可以使用此注解解决问题。

   <form action="anno/testModelAttribute" method="post">
        用户姓名:<input type="text" name="uname" /><br/>
        用户年龄:<input type="text" name="age" /><br/>
        <input type="submit" value="提交" />
    </form>

@ModelAttribute 修饰的方法会先执行

/**
 * ModelAttribute注解
 * @return
 */
@RequestMapping(value="/testModelAttribute")
public String testModelAttribute(@ModelAttribute("abc") User user){
	System.out.println("testModelAttribute执行了...");
	System.out.println(user);
	return "success";
}	
/**
 * 没有返回值的情况
 * @param uname
 * @param map
 */
@ModelAttribute
public void showUser(String uname, Map<String,User> map){
	System.out.println("showUser执行了...");
	// 通过用户查询数据库(模拟)
        // 前端传来的数据不完整时,其他属性默认用数据库中的属性值
	User user = new User();
	user.setUname(uname);
	user.setAge(50);
	user.setDate(new Date());
	// 没有返回值,存到 map中,控制器通过在参数前加@ModelAttribute("abc")注解拿到map
	map.put("abc",user);
}

5b73cc784c8ebe732985e3087677f368.png

1d94f427a138261105e3afbf1504b0a6.png

SessionAttributes注解

作用:用于多次执行控制器方法间的参数共享

属性:

value:指定存入属性的名称

/**

在jsp页面上,可以通过 ${ msg } 获取(其实应该是 ${requestScope.msg})

4104e27922a7cfe8574ba8b9607de0f2.png
// SessionAttributes注解作用在类上,把msg=美美存入到session域对中
@SessionAttributes(value={"msg"})

在jsp页面上,可以通过 ${sessionScope} 获取

e50bb87be425035c5ab758d133a0335a.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值