mvc html 注解,【SpringMVC】Controller注解及请求参数详解

Controller注解

在Spring中 Controller注解用于指示Spring类的实例是一个控制器,相对于实现Controller接口变得更加简单。并且实现Controller接口只能处理一个单一的请求,而是用@Controller注解能够支持同时处理多个请求动做,更加灵活。

@Controller用于标记一个类,使用他标记的类就是一个SpringMVC Controller对象,即一个控制器类,Spring使用扫描机制查找应用程序中全部基于注解的控制器类。分发处理器会扫描使用了该注解的类的方法,并检测该方法是否使用了@RequestMapping注解的方法才是真正处理请求的处理器。

在使用Controller注解前,须要在Spring配置文件中打开注解扫描html

Controller 注解用法

在使用注解前,建立一个 SpringMVC工程:【SpringMVC】SpringMVC入门实例java

@Controller

public class LoginControl {

@RequestMapping(value = "/index/login")

public String login(){

return "login";

}

}

@Controller表示该类是一个控制器类,@RequestMapping注解用来映射一个请求,value="/index/login"表示请求由该注解下的login方法进行处理。

因此当请求’/index/login’的地址,能够转发到LoginControl的login()方法进行处理

ca7720e98d5f13a325f89c98d64b12d0.pngweb

前面的RequestMapping注解也能够加到Controller类上 ,以下所示,请求获得一样的结果app

@Controller

@RequestMapping("/index")

public class LoginControl {

@RequestMapping(value = "/login")

public String login(){

return "login";

}

}

Controller 接收请求参数

经过形参接收请求参数

首先在以前的工程(【SpringMVC】SpringMVC入门实例)上增长以下修改

ff321676a641d24679369a68a1a79c39.png

login.jsp修改以下:jsp

Title

名字:

年龄:

增长success.jspide

Title

添加成功

在LoginControl中添加 add()方法,该方法增长两个参数age和name,该参数名称须要和表单input中name的名称一致。svg

@Controller

@RequestMapping("/index")

public class LoginControl {

@RequestMapping(value = "/login")

public String login(){

return "login";

}

@RequestMapping(value = "/add")

public String add(int age,String name){

System.out.println("age:"+age+" name:"+name);

return "success";

}

}

请求结果以下:

12f061002a128b838106c54288ef635b.png

c8c00306531546a30fd223f009ddff4b.pngpost

控制台打印了请求参数信息

9ccfcb245fc036b9c9aed58ef0cd1063.pngui

经过实体Bean 接收请求参数

在前面工程基础上新建实体类Userthis

public class User {

private int age;

private String name;

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

@Override

public String toString() {

return "User{" +

"age=" + age +

", name='" + name + '\'' +

'}';

}

}

将LoginControl中 的add()方法参数修改以下:

@Controller

@RequestMapping("/index")

public class LoginControl {

@RequestMapping(value = "/login")

public String login(){

return "login";

}

@RequestMapping(value = "/add")

public String add(User user){

System.out.println("user:"+user );

return "success";

}

}

执行结果:

dced5c4f740170a4e3d718d43b44eda8.png

经过HttpServletRequst接收请求参数

将LoginControl中 的add()方法参数修改以下:

@Controller

@RequestMapping("/index")

public class LoginControl {

@RequestMapping(value = "/login")

public String login(){

return "login";

}

@RequestMapping(value = "/add")

public String add(HttpServletRequest request){

System.out.println("request age:"+ request.getParameter("age") );

System.out.println("request name:"+ request.getParameter("name") );

return "success";

}

}

打印以下:

0c75a2d01c70cb3b504cb4055b207d9d.png

经过RequestParam注解接收请求参数

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

注解属性

value:请求参数中的名称

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

将LoginControl中 的add()方法参数修改以下:

@Controller

@RequestMapping("/index")

public class LoginControl {

@RequestMapping(value = "/login")

public String login(){

return "login";

}

@RequestMapping(value = "/add")

public String add(@RequestParam(value="name",required=false)String username,@RequestParam(value="age",required=false)String age){

System.out.println("RequestParam age:"+ age);

System.out.println("RequestParam name:"+ username );

return "success";

}

}

打印以下:

e2642ae564cf37b1f6fde112c8220352.png

经过PathVariable注解接收请求参数

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

注解属性 value:指定url中的占位符名称

优势:Restful风格的URL 请求路径同样,能够根据不一样的请求方式去执行后台的不一样方法

在login.jsp中添加一个a标签

Title

名字:

年龄:

PathVariable注解请求

将LoginControl中 添加sayHello()方法:

@Controller

@RequestMapping("/index")

public class LoginControl {

@RequestMapping(value = "/login")

public String login(){

return "login";

}

@RequestMapping(value = "/add")

public String add(@RequestParam(value="name",required=false)String username,@RequestParam(value="age",required=false)String age){

System.out.println("RequestParam age:"+ age);

System.out.println("RequestParam name:"+ username );

return "success";

}

@RequestMapping(path="/hello/{id}")

public String sayHello(@PathVariable(value="id") String id) {

System.out.println("id="+id);

return "success";

}

}

43473b4363ab1b030e10cc43222b8b1e.png

经过ModelAttribute注解接收请求参数

ModelAttribute注解做用

出如今方法上:表示当前方法会在控制器方法执行前线执行。

出如今参数上:获取指定的数据给参数赋值。

修饰的方法有返回值

给User中添加一个id属性,再到UserController中添加一个parameterUser()方法,给user添加id,

在add方法中user已经被上面的parameterUser先执行了修改,已经给id赋值

@Controller

@RequestMapping("/index")

public class LoginControl {

@RequestMapping(value = "/login")

public String login(){

return "login";

}

@ModelAttribute

public User parameterUser(){

User user = new User();

user.setId(1);

return user;

}

@RequestMapping(value = "/add")

public String add(User user){

System.out.println("user :"+ user);

return "success";

}

}

a3d79dcf368fddf3874288c79d04694b.png

c1bdae7b661ca83c144ad9ee6f39baa8.png

修饰的方法没有返回值

在上面案例基础上,把parameterUser的返回值去掉,增长一个Map来存储数据,存储的key为user,在add方法中使用@ModelAttribute(“user”)User user获取在parameterUser()方法中赋值的数据。程序运行后,add方法的user参数能取到parameterUser方法赋值的数据。 执行结果同上

@Controller

@RequestMapping("/index")

public class LoginControl {

@RequestMapping(value = "/login")

public String login(){

return "login";

}

@ModelAttribute

public void parameterUser(Map userMap){

User user = new User();

user.setId(2);

userMap.put("user",user);

}

@RequestMapping(value = "/add")

public String add(@ModelAttribute("user")User user){

System.out.println("user :"+ user);

return "success";

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值