采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
翔仔老师你好,对于这个章节我有些疑问,在最后的视频中,我们通过if判断用户的请求路径及方法,并获取到的路径和方法分别调用不同的controller,但是这些路径都是我们自己建立的,所以我们代码中可以这样写,如果是提供给别人使用的话,是如何知道使用者到底需要调用的是哪个controller呢?
同学好,就和Spring一样,我们只是提供框架的基础服务,让用户遵循我们的规范来进行配置,因为只有用户才能知道他们业务上需要调用什么样的服务,所以他们得配置好。然后框架就会自动按照他们的配置进行路由。比如spring里面,可以看看我第一门课程有如下代码。
package com.imooc.o2o.web.frontend; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @Controller @RequestMapping("/frontend") public class FrontendController { /** * 首页路由 * * @return */ @RequestMapping(value = "/index", method = RequestMethod.GET) private String index() { return "frontend/index"; } /** * 商品列表页路由 * * @return */ @RequestMapping(value = "/shoplist", method = RequestMethod.GET) private String showShopList() { return "frontend/shoplist"; } /** * 店铺详情页路由 * * @return */ @RequestMapping(value = "/shopdetail", method = RequestMethod.GET) private String showShopDetail() { return "frontend/shopdetail"; } /** * 商品详情页路由 * * @return */ @RequestMapping(value = "/productdetail", method = RequestMethod.GET) private String showProductDetail() { return "frontend/productdetail"; } }
这段代码就是用户引入spring框架后,通过注解设置上,针对不同请求路径,转发到特定的controller进行处理。所以我们管不了他们的业务,但是我们能协助他们完成业务:)
老师,我还是有点不明白,假设,我们现在自己研发出了一条框架并提供给别人使用,在框架的机制里面,所有的请求都被统一的拦截,然后根据他们的路径转发到不同的controller中,但是,在课程示例中,servletPath只能获取到包名及方法名,但同一个包下可能有多个controller,框架的提供者是如何知道具体转发到哪个controller中呢?
同学好,不是呢,并非只能获取到包名,咱们的requestPath 也就是url是类似 /shopadmin/adduser这种,则我们可以规定是调用了shopadmin类下面的adduser方法,通过反射去获取即可呢,后续,咱们在讲解自研框架mvc实现的时候,会专门去讲解的,到时候同学会更明白了。
比如说我们可以定义一个类,类里面有三个成员变量,一个是class 一个是class需要调用的方法 另外一个是请求路径 这样就能建立起三者的映射了呢,之后,只要是这个路径的,按照一定规则,就能解析出是某个类里面的某个方法:)
登录后可查看更多问答,登录/注册
快速入门Spring核心源码+从零开发自研框架
1.2k 12
1.0k 9
1.1k 8
1.3k 8
15.5k 8