Spring-MVC入门-第一篇-DispatcherServlet浅谈

xiaoxiao2021-02-28  90

        springMVC框架作为JavaWeb开发中的主流框架,每一个java程序员都多多少少对它耳熟。作为一个Web开发程序员,我同样也对这个框架充满着强烈的好奇心。

     于是试着学习一下这个框架, 刚学的时候尝试翻译Spring官方文档,但是发现90%的时间都花在翻译上去了,学习的效果差强人意。于是买了一些书,通过看书结合实例操作,感觉进步很快。 最近再写几篇博客,对自己所知道的使用方法和原理进行总结归纳,会更加容易看到自己的不足之处,督促自己学习更多的知识。

        之前总是听说SpringMVC是怎么怎么方便,如何如何好用。用的时候配置几个配置文件,引入几个jar包,好像感觉也确实挺方便的,但是具体方便在那里其实并不知道。

        就像有人说小汽车很快,比骑自行车快。然后你的代步工具也都是汽车,从来没骑过自行车。但汽车到底比自行车快在那里其实不清楚,因为自己从没骑过自行车。不知道自行车的速度,不知道自行车的运行原理,至于汽车相比较自行车升级了那些部件,那就更加不知道了。

对于Spring也同样如此,于是,我知道我该自己写一个Web应用了。

自定义Servlet:

打开MyEclipse.........=。=

        1.配置web.xml

<servlet> <!--Servlet名称--> <servlet-name>DispatcherServlet</servlet-name> <!--Servlet名称所映射的类--> <servlet-class>appx01.servlet.DispatcherServlet</servlet-class> </servlet> <servlet-mapping> <!--发生请求时,所调用的Servle--> <servlet-name>DispatcherServlet</servlet-name> <!-- 映射的请求后缀 --> <url-pattern>*.action</url-pattern> </servlet-mapping> 注: web.xml虽然是用在javaWeb项目中,但是实际上读取这个配置的是项目所在的Tomcat容器。

        配置详解:

               <servlet> 功能是配置一个名为DispatcherServlet的Servlet(服务器端的java小程序。用来接收、处理客户端请求,返回响应。)

               <servlet-mapping>标签,主要是告诉tomcat,在遇到以.action结尾的请求时,直接交给名为名为DispatcherServlet的Servlet去处理。(=。=有点绕)

              2.编写简单DispatcherServlet        

              DispatcherServlet 又可以翻译成前置控制器。顾名思义,就是放在前面的一个控制程序,意味着这个程序                                                                                                          会优先处理请求。如果不去细究底层原理,单单从web上来看的话,确实也是如此。因此暂且先这么理解,

会更加容易理解之后的一些概念。

概念讲完,现在接着第一步。先新建一个名为DispatcherServlet的类,并继承HttpServlet,一个自定义的

Servlet就这样写好了。当然这肯定是远远不够的,先还需对请求进行处理,此时,只要重写 doGet和doPost方法,并在方法中

处理相应的请求即可。

注:这两种方法分别对应浏览器的GET和POST请求,对于这两种请求方式区别以后可以再探讨探讨。

代码如下

package appx01.servlet; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import appx01.controller.Controller; import appx01.controller.impl.InputController; import appx01.controller.impl.SaveControllerImpl; public class DispatcherServlet extends HttpServlet{ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.process(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.process(req, resp); } private void process(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{ String url = req.getRequestURI(); //第一部分 int index = url.lastIndexOf("/"); String action = url.substring(index+1); String returnPath = new String(); Controller controller = null; //第二部分 if("product_save.action".equals(action)){ controller = new SaveControllerImpl(); }else{ controller = new InputController(); } returnPath = controller.handleRquest(req, resp); RequestDispatcher rd = req.getRequestDispatcher(returnPath); //第三部分 rd.forward(req, resp); } }

现在对这注解的三部分进行详解

第一部分:主要功能是对请求URL解析出具体的请求字符串,方便后续的处理,这里有一个方法值得注意一下

req.getRequestURI(),这个方法返回的不是全量URL地址。返回的是URL的一部分,并且POST请求和GET请求返回

的长度有区别。

       第二部分:根据解析出的请求,新建不同的对象,在handleRquest方法中对请求执行相应的处理逻辑,例如直接返回的转发页面(地址),或者在request请求中设置相应的属性再返回需要转发的目标。这一步操作是模拟简单的web请求,具体的执行在SaveController和InputController中,有兴趣的可以Q我,发源码给你参考一下。

       第三部分:请求的转发。request对象获取RequestDispatcher,中间传参returnPath是你想要转发的资源。对于RequestDispatcher的作用简单介绍就是一个路径资源的包装器。只要你给定相应的路径,这个对象就会把这个路径(或者称之为资源)给包装起来。之后你就可以选择将请求给转发到这个资源(forward方法),或者包含在response中(include方法)。

          到目前为止,一个DIY的迷你前置控制器(DispatcherServlet)就诞生了。麻雀虽小,但是该有的功能也有,通过这个mini的MVC也大概了解到MVC的工作模式,对于后续的SpringMVC的学习以及SpringMVC的优缺点会打下一个基础。

                                                              

转载请注明原文地址: https://www.6miu.com/read-72458.html

最新回复(0)