我们定义两个注解
@MyControllerpackage com.cloudwise.annotition;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;/*** @author Teacher 陈* @creat 2021-02-22-13:04* @describ 我的Controller注解,用于模仿spring中的@Controller* 能够作用于类上,标识该类是一个Controller*/@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)public @interface MyController {/*** 没有用,但为了模仿spring中的@Controller,我们还是把它加上* 我们的简单版采用默认的id:首字母小写的类名*/String value() default "";}@MyRequestMappingpackage com.cloudwise.annotition;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;/*** @author Teacher 陈* @creat 2021-02-22-13:11* @describ 用于模仿spring中的@RequestMapping* 能够作用于类和方法上,用于通过url指定对应的Controller和 Method*/@Target({ElementType.TYPE,ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)public @interface MyRequestMapping {/*** 简单版,域名只能有一段,只能是/controllerName/methodName*/String value() default "";}好了上面的就是一些准备性的工作,如果说把仿写springMVC看成是组成一个团队的话,上面的工作相当于给团队找工作场地,下面就是对人物的刻画了,首先有请我们的领导MyDispatcherServlet
编写前端控制器编写前端控制器(一个Servlet),并重写init和service方法
MyDispatcherServlet
总览整个过程围绕两个重写的方法而展开,其中init()是重点 。
MyDispatcherServlet要做的事,用一句话来说:看前端的访问地址,然后调用匹配的处理器(Controller)的对应方法(method)
要完成这些,我们需要通过注解,为Controller和method绑定上一定的字符串,然后通过分析前端传过来的Url中的字符串,找到两者相同的,以此完成匹配 。反射在此过程中发挥了巨大作用,不论是找到类头上的注解,还是找到注解中的值等诸多动作都需要反射 。
具体流程Init
Service 注:在此处Handler = controller + method
代码(分步)创建一个dispatcherServlet继承httpservlet 并重写两个方法
public class MyDispatcherServlet extends HttpServlet {@Overridepublic void init(ServletConfig config) throws ServletException {}@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {}}接下来就是填充两个方法了,首先是init()方法
它大概可以分为4步
加载配置文件扫描controller包初始化controller初始化Handler映射器(Handler = controller + method)那我们开始吧,写加载配置文件的代码
1.加载配置文件首先,我们在这里选用properties文件的形式进行配置,因此,需要有一个properties对象
/*** 我们将需要扫描的包放在一个.properties文件中* 需要在初始化的时候读取它*/private Properties properties = new Properties();再写一个工具性的方法/*** 加载配置文件* @param fileName*/private void loadConfigfile(String fileName) throws IOException {//以流的方式获取资源InputStream resourceAsStream = this.getClass().getClassLoader().getResourceAsStream(fileName);properties.load(resourceAsStream);resourceAsStream.close();}之后,我们在init()中调用该方法@Overridepublic void init(ServletConfig config) throws ServletException {//1. 加载配置文件//这里我们在web.xml中配置的初始化参数contextConfigLocation就起到效果了String initParameter = config.getInitParameter("contextConfigLocation");try {loadConfigfile(initParameter);} catch (IOException e) {e.printStackTrace();}}那么至此,我们的第一步加载配置文件部分的代码就写完啦
另外三步采用同样的思路
2.扫描controller包定义所需属性
以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!
「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助:- 出新的治理框架 阿富汗总统加尼弟弟宣誓效忠塔利班
- 网页前端开发 前端快速开发框架有哪些
- 详解ajax框架作用 ajax框架教程
- 简单快速构建后台管理系统 后台模板框架的模板
- struts2和springMVC的区别 struts2配置文件详解
- 十个前端UI优秀框架 前端ui框架有哪些
- 基于ssm框架的图书管理系统 网站框架模板代码
- 单点登录失败解决措施 单点登录框架有哪些
- java开发常用的框架 java框架都有哪些
- 免费google账号注册 google服务框架安装