zoukankan      html  css  js  c++  java
  • MVC框架的实现

    现在web开发基本都是MVC的架构了,struts、springMvc 等等。其中一个重要的功能就是将客户发起的请求,分发至我们定义的Action里面的方法之中。

    闲暇之余,我也做了一个类似于spring的方式,在Action中配置注解RequestMapping,将前端的请求分发至action的方法中。实现的过程还是比较简单的。

    1. 实现url映射的注解

    2. 在servlet容器启动时,解析配置当中所有的模块。解析模块中的所有方法。将对应的URL以及处理方法保存起来。

    3. 在servlet处理请求时,取得请求的servlet容器,然后从保存的URL映射中取处理的类和方法。如果没有则404,如果有则调用该方法处理。

    4.然后根据方法的返回值,返回响应的jsp页面。

    代码非常简陋,只是为了弄懂如何通过注解实现URL映射。源码:YMvc

    demo的效果如下:

    Action中配置:

    /**
     *
     * @author yingzi.zhu
     */
    @RequestMapping("/my")
    public class MyAction {
        
        @RequestMapping("/sayHello")
        public String add(HttpServletRequest request, HttpServletResponse response){
            request.setAttribute("param", "Hello, everyone");
            return "hello";
        }
            
    }

    web.xml中的配置如下:

        <servlet>
            <servlet-name>yservlet</servlet-name>
            <servlet-class>org.yz.mvc.action.YServlet</servlet-class>
            <init-param>
                <param-name>entrance</param-name>
                <param-value>org.yz.mvc.MainModule</param-value>
            </init-param>
        </servlet>
        <servlet-mapping>
            <servlet-name>yservlet</servlet-name>
            <url-pattern>*.test</url-pattern>
        </servlet-mapping>

    其中 org.yz.mvc.MainModule 为主入口,作用是通过@YMvc注解,标记模块。

    /**
     *
     * @author yingzi.zhu
     */
    @YMvc(MyAction.class)
    public class MainModule {
        
    }
    

    hello.jsp。测试Action中的返回,从Request中取值。在页面显示。

    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>JSP Page</title>
        </head>
        <body>
            <h1><%= request.getAttribute("param") %></h1>
        </body>
    </html>

    最后的显示结果。

    image

    image

    整个映射过程还是比较简单的。只需要在web.xml中进行servlet配置,然后在入口中配置要加载的Action。然后在Action中配置匹配的路径。

    实现的思路是:

    1. 在servlet类中,获取web.xml中配置的入口模块

    2. 在入口模块中解析注解 @YMvc 的内容。

    3. 根据解析的内容继续解析 配置了URL映射的模块,分别解析类名的注解以及方法的注解

    4. 将注解以及处理类存放在map里面。如 前面demo中的  (/my/sayHello, MyAction, add)

    5. 在servlet有请求时,解析请求的路径,从map中取匹配

    6. 配置到了,则调用Java类的反射机制,来执行配置的方法。获取方法的返回值

    7. 将使用请求转发,将请求转发至 方法的返回值。

  • 相关阅读:
    归并排序(Merge Sort)
    归并排序
    数据结构(二)之二叉树
    数据结构(一)之线性表
    图解排序算法(五)之快速排序——三数取中法
    图解排序算法(四)之归并排序
    图解排序算法(三)之堆排序
    图解排序算法(二)之希尔排序
    图解排序算法(一)之3种简单排序(选择,冒泡,直接插入)
    [ Android 五种数据存储方式之三 ] —— SQLite存储数据
  • 原文地址:https://www.cnblogs.com/atio/p/3483415.html
Copyright © 2011-2022 走看看