springmvc从入门到源码分析专题1_前期准备
前言
写这个专题的原因一是为自己巩固一下springmvc的基础知识,同时也为哪些刚刚入门springmvc,但对springmvc的原理不清楚的朋友提供一份简单易懂的教程
注: 如果你觉得写得不好,请直接批评指出
相关软件版本
这里介绍一下我本地的相关软件的版本
- jdk: jdk1.8.0_221
- eclipse: Photon Release (4.8.0)
- springmvc: 3.2.12.RELEASE
- 这里说一下,为什么要选择springmvc的版本为
3.2.12.RELEASE
, 原因如下- 虽然现在spring已经发布到
5.*
版本了,但是springmvc最核心的代码是没有太大变化的,只在这上面增加了许多其他的功能,而我们日常使用的绝大多数功能3.2.12.RELEASE
版本的springmvc都已经包含 - 在本专题中,我们将要深入到springmvc的源码分析,为了分析起来更简单易懂,避免非核心代码干扰到大 家阅读源码,所以我选择
3.2.12.RELEASE
版本的springmvc
- 虽然现在spring已经发布到
- 这里说一下,为什么要选择springmvc的版本为
- maven: 3.5.3
- tomcat: tomcat-8.5.43
相关软件的下载地址
- jdk: https://www.oracle.com/cn/java/technologies/javase-downloads.html
- eclipse: https://www.eclipse.org/downloads/
- maven: https://maven.apache.org/download.cgi
- tomcat: https://tomcat.apache.org/download-80.cgi
基础项目环境搭建
接下来我们从零开始搭建一个springmvc的web项目,实现一个简单的helloword,相关源码我已经上传到我的github上
-
pom.xml文件Maven依赖如下
<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>3.2.12.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>3.2.12.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>3.2.12.RELEASE</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.1</version> </dependency> <dependency> <groupId>javax.portlet</groupId> <artifactId>portlet-api</artifactId> <version>2.0</version> </dependency> <dependency> <groupId>javax.el</groupId> <artifactId>el-api</artifactId> <version>1.0</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.0.1</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> </dependencies>
-
web.xml配置文件的核心配置内容如下
<!-- 使用ContextLoaderListener配置时,需要告诉它Spring配置文件的位置 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <!-- 配置上下文载入器,上下文载入器载入除DispatherServlet载入的配置文件之外的其他上下文配置文件 最常用的上下文载入器是一个Servlet监听器,器名称为ContextLoaderListener --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- SpringMVC的前端控制器,当DispatcherServlet载入后,它将从一个XML文件中 载入Spring的应用上下文,该XML文件的名字取决于这里DispathcerServlet将试图从一个 叫做Springmvc-servlet.xml的文件中载入应用上下文,其默认位于WEB-INF目录下 --> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-servlet.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping>
注: 配置文件中的配置项我已经为每个配置项进行了详细注解,这里就不在强调
在web.xml中我们分别为ContextLoaderListener
和DispatcherServlet
指定了加载的配置文件applicationContext.xml
和spring-servlet.xml
,在本helloword中,我们在applicationContext.xml
中并没有配置任何内容,因为根据三层架构原则,我们应该把它留给service和dao层的bean配置,接下来我们来看看spring-servlet.xml
配置文件
-
spring-servlet.xml
配置文件的内容<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/"></property> <property name="suffix" value=".jsp"></property> </bean> <bean id="simpleUrlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <props> <prop key="/hello.do">helloController</prop> </props> </property> </bean> <!-- 这里的id="helloController" 对应的是<bean id="simpleUrlMapping">中的<prop>里面的value --> <bean id="helloController" class="org.linge.springmvc.study.controller.HelloController"></bean>
-
由于篇幅的原因,
HelloController
和hello.jsp
的代码我就不贴出来来了,源码请到文末的github地址去下载 -
最后我们使用eclipse将我们的项目使用tomcat爬起来,然后在浏览器中访问一下
http://localhost:8181/springmvc-study/hello.do // 注: tomcat的端口请换成自己本地tomcat的实际端口
地址,可以看到如下页面,就表示我们的环境搭建成功
好了,到这里我们的第一个基于springmvc的helloword的环境搭建就完成了,后面的文章我们将分析web.xml中关于springmvc的配置和它是如何被启动的