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类的映射初始化。