SpringMVC 源码分析(一)

SpringMVC是java Web开发中必不可少的框架,相信大家都很清楚。

本系列主要介绍

1、从服务启动时对WEB服务中的Controller类的映射处理,启动过程其他的逻辑暂时不讨论。

2、用户在页面发起请求匹配到对应的Contraller这个过程中SpringMVC的处理方式,中间的web服务处理(tomcat)暂不讨论。

本文先从原始的Servlet开发说起。

Servlet是JavaEE专门为请求-响应模式的HTTP协议而制定的规范,运行在Servlet容器(如:Tomcat)中,我们先写一个简单的小程序,看下没有SpringMVC的时候是怎么开发WEB程序的。

准备工作:下载安装tomcat

第一步:在IDEA中新建一个Web Application项目

 

 第二步:新建HelloServlet类并实现java的Servlet

 第三步:在web.xml中加入以下servlet-mapping映射

   <servlet>
        <servlet-name>HelloServlet</servlet-name>
        <servlet-class>servlets.HelloServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>HelloServlet</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>GoodServlet</servlet-name>
        <servlet-class>servlets.GoodServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>GoodServlet</servlet-name>
        <url-pattern>/good</url-pattern>
    </servlet-mapping>

第四步:配置tomcat

第五步:配置运行war包

 最后点击运行,服务就运行起来了。

当我们请求localhost:8080/good时,服务器会调用我们Servlet的三个方法,分别是无参构造器,init(),service().

 1、无参构造器是Servlet规范约定的,供Servlet容器创建Servlet实例需要,如果把无参构造器修饰符改成private,在访问的时候就会直接报错。所以最好不要修改无参构造器。

2、init方法是由Servlet容器调用的,用于初始化当前Servlet的一些功能属性设置,没有的话可以不处理

3、service方法是由Servlet容器根据url映射找到当前Servlet时调用的,我们的请求/响应模式中的业务处理主要是在该方法中进行。

Servlet容器根据web.xml配置的url与Servlet映射去找对应的Servlet,比如我们再去请求localhost:8080/hello,这个时候则会分别调用HelloServlet的无参构造器、init、service方法。

以上是原始Servlet开发时的步骤,那么为什么我们使用了Spring MVC的时候不需要配置这么多url与Servlet的映射在web.xml里了呢,其实是Spring MVC的分发器DispatcherServlet处理的。

我们看下Spring MVC的web.xml配置:


	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath*:spring/*.xml</param-value>
	</context-param>
 
	<servlet>
		<servlet-name>springMVC</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath*:springMVC.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
 
	<servlet-mapping>
		<servlet-name>springmvc</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>

其中url-pattern的配置为/,也就是说所有的非静态资源请求都由DispatcherServlet来处理,类似于一个过滤器,拦截所有请求,内部再进行Controller匹配处理。

Servlet3.0以后就淡化了web.xml配置,使用注解来处理,springboot项目就不需要配置web.xml。

下一篇我们再讲下Spring MVC中Controller类的映射初始化。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值