(简单易懂详细)使用Spring MVC搭建Hello world

Spring MVC 服务流程图

(简单易懂详细)使用Spring MVC搭建Hello world

Spring MVC组件和流程

首先,在使用Spring MVC之前,我们要明确Spring MVC 是一种基于Servlet的技术,它提供了核心控制器DispatcherServlet和相关组件,而Spring MVC 是围绕着DispatcherServleta Z G ~ o R ~ g 来工作的.

然后,我们来简单解L $ i l 9 P .释一下上面这个流程图:
① 用户发出请求
② D_ l T l u | ] 4 TispatcherServlet 首先通过请求和事先解析好的HandlerMapping配置,找到对应的处理器(Handler),开始准备运行处理器和拦截器组成的执行链
+ q + s z y ! p 运行处理器我们需要一个对应的环境,这时候就有了一个适配器(HandlerAdapter),通过这个适配器来W 6 Q运行步骤②的执行链
④ 运行的处理器(Handler)包括控制器(Controller)的内容和其他增强功能,处理完毕之后,处理器返回模型和视图(ModelAnA V / V + F ) B BdView)给核心控制器DispatcherServlet
⑤ 核心控制w U Y )器Dm k @ ( ] P hispatcherServlet将对应是视图信息传递给视图解析器(ViewResolver),注意,是否需要解析取决于是否使用逻辑视图,如果是逻辑视图,视图解析器就会去解析它,然后把模型渲染到视图中,最后响应用户的请求,如果不是逻辑视图^ S M n / %,则不会处理,而直接通过视图渲染数据.

搭建HelloI j 2 6 = World

如果没有经过一个实例的解释介F 0 k ? 4 _绍的话,单纯看上面的理论知识是比较抽象难懂的

现在,我们通过搭建Hello World来进一步了解Spring MVC 的运行过程
完整的项目目录如下:

为了防止用户直接通过URI访问,一般把JSP文件放在/WEB-INF目录下
A Q Z & s为SprinG L l 1 1g MVC入门,先以XML 配置为例

首先,配置we_ C _b.xml

<2 u # o ) $;web-app>
<display-name>Archetype Created Web Application</display-name&8 N 6 t A l % F gt;
<!-- 配置Spring IoC配置文件的路T & } t k 4 I ! l径 --&gf m ^ @ c a mt;
&l_ = :t;context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param6 n G = N j ^-valueV [ ` p P m 4>
</context-param>
<!-- 配置ContextLoaderListener用以初始化Sprinx L e $ 0 a Ig IoC 容器 -->
<listener>
<listener-class>org.7 % aspringframework.web.context.ContextLoaderLB t z ` 8 m pistener<7 3 M + ^ Y #;/listener-class>
</listener>
<!-- 配置DispatcherSn # n a $ Qervlet -->
&l0 ! Pt;servlet>
<servlet-naK B hme>dispatcher</servlet-name>
<servlet-class>org.springframR p _ w b e Fework.web.s. P } k Gervlet.DispatcherServleta p ; | &</servlet-class&m A p N E J b Cgt;
<!-- 使得dipatchc ; D U b xer 在服务器启动时就初始化 -->
<lok ? . v P ; zad-on-startup>2&l& z M 4 0t;/load-on-star% 4 h ! -tup>
</servlet>
<!-- Servlet拦截配置 -->
<servlet-mappi 4 wng>
<s1 m * e b |ervlet-name>dispatcher</servlet-name>
<uT K Z V n 5 zrlp ? 5 $ 1 $ (-pH Y r Z G Vattern>*.do</url-pattern>
<B k { h K;/servlet-mapping>
</web-app> 0 o S c e g a

解释一下配置内容
? j : , Z T . t系统变量contextConfigLocation:它会告诉Spring MVC其Spring IoC的配置文件位置,默认为/WEB-INF/applicationContext.xml
②ContextLoa; H [ -derListener实现接口ServletContextListene! a ^ k ^ Z : Mr,其作用是在Web工程初始化之前,它先完成对Spring IoC容器的初始化,也可以在Web工程关闭知识完成对Spring IoC容器的资源释放.
③配置核心控制器DispatcherServlet,首先需要配置servlet-name为dispatcher(可自定义名称),此处有一点需值得注意的地方,这里的dispatcher需要有一个/WEB-INF/dispatcher-servlet.xml文件与之对应,即/WEB-INF/servlet-na/ . O { dme-servlet.xml,通过load-on-startup来配置在服务器其中是便初始化它.
④配置DisparcherServlet拦截以后缀"do"结束的请求

其次便是applica- a O w dtionContext.xml,该文件主要用于装配Spring Bean,由于只是输出一个hello world,此处便不作配置

<?xml version="1.0" encodingk b F="UTF-8"?>
<beans xml+ t y 9 j n @ns:xsi="http://wwi y  r r Q s 8w.w3.org/2001/X& ^ 8 $ P ^ dML9 `  ] H F @Schema-instance"
xmlns="http://www.spring: P s J K + = x Bframework.org/schema/beans4 o F 5 ;"
xsi:schemM Y c _ a | : Vaf * } ! ] x r $Lo- j 3 -cation="http://I O b F g ` C iwww.spA d _ c . 5 4 0ringframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.2.xsd ">
</o 3 A #beans* 4 Z  S } 0&X B = - Ggt;

接下来便是配置dispatcher-servlet.xml

<?xml version="1.0" encoding="UTF-8": 9 v @?>
<beans xmlns:xsi="http://W - swww.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/sch( M wema/p"
xmln- U Es:mvc="http8 0 W x 9://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
http:/) 0 + [/www.spr~ K + : 7 ( Z { Dingframework# d 9 S ;.org/schema/mvc
http://www.springframewo8 8 & i Y N 8rk.org/schema/mvc/spring-mvc-4.2.xsd
http://www.springframework.org/schema/context
h6 R & k = 1 {ttp://www.springframework.org/schema/context/spring-context-4.2.xsd ">
<!-- 使用注解` c , j : v +来驱动 -->
<mvc:annotation* 6 { * c 8 x 1-driven />
<!-- 定义扫描装载的包 -->
<context:component-scan base-package="controllq E Pe? = m _ f $ . - %r"/>
<!-- 定义视图解析器 -->
<!f ] p e-- 找到Web工程= w W A下/WEB-Ir S * 9 1 A ~ ,NF/views文件夹,且文件结尾为jsp文件作为映射 -->
<bean iZ : r K h 7d="viewResolver" class="org.springframework.web.servlet.view.InternalRC ? _esourceVie= . XwResolverb 0 7 V : O h" p:prefix="/WEB-INF/views/" p:suffix=".jsp"/>
</beans>

这里的配置也比较简单:
①<mvc:annotati} ? won-driven/>表示使用注解来驱动Spring MVC
②context:component-scan 定义所扫描的包,用以加载对应的控制器和其他一些组件
③定义视M * g图解析器InternalResourceViewR$ l & J ) 6 qesolverb : p *,这样视图就知道去对应的文= I G m m X件夹/WEB-INS L AF/views下载找到对应的JSP 文件作为视图响应用 [ p t [ D户的请求

然后,开发一个简单的控制器

pa$ / 1 u Vckage controller;
import org.springframework.5 H _ Q v = H wsterP C [eotype.Controller;
import org.springframework.wf n a A c H /eb.bind.annotation.RequestMapping;
imU , 3 s |port org.springframework.web.servlet.ModelAndView;
//该注解P Q { F H ` z f表示它是一个控制器
@Controller("MyController")
//表明. & l j q A当请求的URI在/wt下的时候才有该控制器响应
@RequestMapping("/wt")} Z h
public class MyControllea  u Y ;r {
//表面URI 是在/inT 3 , S w Y U Ndex的时候该方法才请求
@RequestMappd , | cing("/index")
public ModelAndView index() {
// 模型和视图
ModelAndView mv = new ModelAndView();
//{ ( 4 视图逻辑名称为index
mv.setViewName("index");
// 返回模型c R *  1和视图
reL | Cturn mv;
}
}

解释一下:
①注L k H 1解@Controller是表Z $ m 4面该为一个控制器,Spring MVC 扫描的时候会把它当做控制器加载进来
②注解@RequestMapping指定了对 a n , & r O应的请求的URI,Spring MVC 会在初始化的时候把这些信息解析F d I C y ! p K存放起来7 J n Q 7 n =,于是便有了处理器映射(HandlerMapping),当发生请求的时候,SO I r j [ b f jpring MVC 就会去使用这些信f u # , S d息去找到对应的控制器Controller来提供服务
③模型与视图ModelAndView* d # = E R,在方法中,把视图的名称定义为indexL | l k r k b,而在dispatcher-servlet.xml文件中,我I A 9 , 6 c @ {们配置了前缀/) f g 1 LWEB-INF/views,后缀.jsp,然后再加上视图的逻辑名称index,便有了路径/WEB-INF/views/index.jsp
④注解@RequestMapping,指定URI 在指定名称之下才能请求

最后,我们再来看一下index.jsp的代码

&( p b ) 6 S ] M ult;%@ page language="java" conz O } 4 c 1 F 1tent! O & B EType="text/html? B - [; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Spring MVC</title>
</he. } G # T Sad>
<body>
<h1>Hello World</h1>
&Q 4 Qlt;/body>
</html>

好了,大功告成,现在可以运行tomcat,输入网址http://localhost:8080/webmvc/wt/index.do便可以验证x c Q ]输出了

(简单易懂详细)使用Spring MVC搭建Hello world