控制器Controller

  1. 控制器复杂提供访问应用程序的行为,通常通过接口定义或注解定义两种方法实现。
  2. 控制器负责解析用户的请求并将其转换为一个模型。
  3. 在Spring MVC中一个控制器类可以包含多个方法在
  4. Spring MVC中,对于Controller的配置方式有很多种

实现Controller接口

Controller是一个接口,在org.springframework.web.servlet.mvc包下,接口中只有一个方法;

//实现该接口的类获得控制器功能
public interface Controller {//处理请求且返回一个模型与视图对象ModelAndView handleRequest(HttpServletRequest var1, HttpServletResponse var2) throws Exception;
}
  1. 编写一个Controller类,ControllerTest1
//定义控制器
//注意点:不要导错包,实现Controller接口,重写方法;
public class ControllerTest1 implements Controller {public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {//返回一个模型视图对象ModelAndView mv = new ModelAndView();mv.addObject("msg","Test1Controller");mv.setViewName("test");return mv;}
}
  1. 编写完毕后,去Spring配置文件中注册请求的bean;name对应请求路径,class对应处理请求的类
<bean name="/t1" class="com.kuang.controller.ControllerTest1"/>
  1. 编写前端test.jsp,注意在WEB-INF/jsp目录下编写,对应我们的视图解析器
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Kuangshen</title>
</head>
<body>${msg}
</body>
</html>
  1. 测试
  2. 说明
    实现接口Controller定义控制器是较老的办法缺点是:一个控制器中只有一个方法,如果要多个方法则需要定义多个Controller;定义的方式比较麻烦

所以要使用注解@Controller

  1. @Controller注解类型用于声明Spring类的实例是一个控制器(在讲IOC时还提到了另外3个注解);
  2. Spring可以使用扫描机制来找到应用程序中所有基于注解的控制器类,为了保证Spring能找到你的控制器,需要在配置文件中声明组件扫描。
<!-- 自动扫描指定的包,下面所有注解类交给IOC容器管理 -->
<context:component-scan base-package="com.kuang.controller"/>
  1. 增加一个ControllerTest2类,使用注解实现;
//@Controller注解的类会自动添加到Spring上下文中,该类中的所有方法,
//如果返回值是Spring,并且有具体的页面可以跳转,就会被视图解析器解析
@Controller
public class ControllerTest2{//映射访问路径@RequestMapping("/t2")public String index(Model model){//Spring MVC会自动实例化一个Model对象用于向视图中传值model.addAttribute("msg", "ControllerTest2");//返回视图位置return "test";}}
  1. 测试
  2. 说明:可以发现,我们的两个请求都可以指向一个视图,但是页面结果的结果是不一样的,从这里可以看出视图是被复用的,而控制器与视图之间是弱偶合关系。

RequestMapping

  1. @RequestMapping注解用于映射url到控制器类或一个特定的处理程序方法。可用于类或方法上。
  2. 用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
  3. 只注解在方法上面
//访问路径:http://localhost:8080/h1
@Controller
public class TestController {@RequestMapping("/h1")public String test(){return "test";}
}
  1. 同时注解类与方法
//访问路径:http://localhost:8080/admin/h1,需要先指定类的路径再指定方法的路径;
@Controller
@RequestMapping("/admin")
public class TestController {@RequestMapping("/h1")public String test(){return "test";}
}

RestFul 风格

Restful就是一个资源定位及资源操作的风格。不是标准也不是协议,只是一种风格。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

功能

  1. 资源:互联网所有的事物都可以被抽象
  2. 为资源资源操作:使用POST、DELETE、PUT、GET,使用不同方法对资源进行操作。
  3. 分别对应 添加、 删除、修改、查询。

学习测试

  1. 在新建一个类 RestFulController
@Controller
public class RestFulController {}
  1. 在Spring MVC中可以使用 @PathVariable 注解,让方法参数的值对应绑定到一个URI模板变量上。
@Controller
public class RestFulController {//映射访问路径@RequestMapping("/commit/{p1}/{p2}")public String index(@PathVariable int p1, @PathVariable int p2, Model model){int result = p1+p2;//Spring MVC会自动实例化一个Model对象用于向视图中传值model.addAttribute("msg", "结果:"+result);//返回视图位置return "test";}}

我们来测试请求查看下

思考:使用路径变量的好处?

  1. 使路径变得更加简洁;
  2. 获得参数更加方便,框架会自动进行类型转换。
  3. 通过路径变量的类型可以约束访问参数,如果类型不一样,则访问不到对应的请求方法,如这里访问是的路径是/commit/1/a,则路径与方法不匹配,而不会是参数转换失败。
  4. 我们来修改下对应的参数类型,再次测试
//映射访问路径
@RequestMapping("/commit/{p1}/{p2}")
public String index(@PathVariable int p1, @PathVariable String p2, Model model){String result = p1+p2;//Spring MVC会自动实例化一个Model对象用于向视图中传值model.addAttribute("msg", "结果:"+result);//返回视图位置return "test";
}

使用method属性指定请求类型

​用于约束请求的类型,可以收窄请求范围。指定请求谓词的类型如GET, POST, HEAD, OPTIONS, PUT, PATCH, DELETE, TRACE等

  1. 增加一个方法
//映射访问路径,必须是POST请求
@RequestMapping(value = "/hello",method = {RequestMethod.POST})
public String index2(Model model){model.addAttribute("msg", "hello!");return "test";
}
  1. 我们使用浏览器地址栏进行访问默认是Get请求,会报错405:
  2. 如果将POST修改为GET则正常了;
//映射访问路径,必须是Get请求
@RequestMapping(value = "/hello",method = {RequestMethod.GET})
public String index2(Model model){model.addAttribute("msg", "hello!");return "test";
}

小结

Spring MVC 的 @RequestMapping 注解能够处理 HTTP 请求的方法, 比如 GET, PUT, POST, DELETE 以及 PATCH。所有的地址栏请求默认都会是 HTTP GET 类型的。

@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping

@GetMapping 是一个组合注解它所扮演的是 @RequestMapping(method =RequestMethod.GET) 的一个快捷方式。 平时使用的会比较多!

SpringMVC自学日志04(Controller 及 RestFul风格 )相关推荐

  1. 【SpringMVC 笔记】控制器 Controller 与 RestFul 风格

    SpringMVC 笔记 控制器 Controller 实现 Controller 接口 创建控制器 @Controller 注解创建控制器 @RequestMapping 使用 method 属性指 ...

  2. SpringMVC自学日志02(初识SpringMVC)

    什么是SpringMVC? Spring MVC是Spring Framework的一部分,是基于Java实现MVC的轻量级Web(其中servlet是最主要的)框架. 官方文档地址:https:// ...

  3. SpringMVC的请求-获得请求参数-Restful风格的参数的获取

    Restful是一种软件架构风格.设计风格,而不是标准,只是提供了一组设计原则和约束条件.主要用于客户端和服务器交互类的软件,基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存机制等. Res ...

  4. Controller与RestFul风格

    1.Controller 在Controller类中使用注解后 视图解析器会自动将该类中返回值为String类型的方法进行解析 将返回的字符串进行url的拼接 在这里面需要注意的是 返回的字符串是需要 ...

  5. SpringMVC自学日志07(整合Mybatic)

    整合步骤 导入相关jar包 <!--junit--> <dependency><groupId>junit</groupId><artifactI ...

  6. SpringMVC自学日志06(JSON)

    什么是JSON? JSON(JavaScript Object Notation, JS 对象标记)是一种轻量级的数据交换格式,目前使用特别广泛. 采用完全独立于编程语言的文本格式来存储和表示数据. ...

  7. SpringMVC自学日志05(结果跳转方式,数据处理 ,乱码问题)

    结果跳转方式 通过SpringMVC来实现转发和重定向 - 无需视图解析器:== @Controller public class ResultSpringMVC {@RequestMapping(& ...

  8. SpringMVC自学日志03(SpringMVC注解)

    第一步:新建一个Moudle , 添加web支持!建立包结构 com.kuang.controller 第二步:由于Maven可能存在资源过滤的问题,我们将配置完善 <build>< ...

  9. Mybatis自学日志04(日志工厂)

    日志工厂 如果一个数据库操作出现异常,日志就只最好的助手. LOG4J 标准日志 <settings><setting name="logImpl" value= ...

最新文章

  1. Linux启动重启停止DNS,ubuntu怎么开机停止启动smbd
  2. CSS三大特性:层叠性、继承性、优先级
  3. WHYZOJ-#60 工资(二分)
  4. celery异步邮件发送系统出现django.core.exceptions.ImproperlyConfigured: Requested setting EMAIL_FROM
  5. 【渝粤教育】国家开放大学2018年春季 0105-22T酒店营销实务 参考试题
  6. 浙江省工程师职称英语和计算机考试报名,浙江省工程师职称英语免考条件
  7. JSP的9个内置对象-response
  8. pytorch: 自定义数据集加载
  9. 华为全球分析师大会:HMS Core全球开发者应用集成的数量加速增长,打造全场景智慧体验...
  10. Ant之build.xml详解
  11. Python中显示图片
  12. 2022年的1024
  13. 笔记本html外接显示器,笔记本怎么外接显示器?XP笔记本外接显示器的方法
  14. Json Schema 是什么?
  15. React中文文档 9. 表单
  16. lambda分组集合中list和set区别
  17. 电脑自带播放器怎么倍速播放视频
  18. MEMS智能传感器技术的新进展
  19. VisualSFM的配置与使用 MeshLab的网格生成与纹理添加
  20. 【无人机】基于混合粒子群算法求解无人机航迹规划问题附Matlab代码

热门文章

  1. Java内功修炼系列一工厂模式
  2. Python爬虫学习第一天--uillib库和request库
  3. 记那些年在asp.net mvc上挖过的坑
  4. File was loaded in the wrong encoding: 'UTF-8'
  5. os.path.join()函数用法
  6. 7-8 树的遍历 (10 分)
  7. git fork clone 区别_我的Git笔记
  8. centos 使用mysql_Centos下MySQL使用总结
  9. slqite3库查询数据处理方式_绝活!十一个优质React Hook库, 收藏备用
  10. java 数字运算异常_Java基础之:异常及异常处理