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


        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的优缺点会打下一个基础。

                                                              

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值