5分钟带你了解Spring Web MVC框架(赶紧上车)

Spring Web MVC框架提供了模型 - 视图 - 控制器(MVC)体系结构和可用于开发灵活和松散耦合的Web应用程序的组件。 MVC模式导致分离应用程序的不同方面(输入逻辑,业务逻辑和UI逻辑),同时提供这些元素之间的松散耦合。


·该模型封装了应用程序数据,通常它们将由POJO组成。

·View负责渲染模型数据,通常它会生成客户端浏览器可以解释的HTML输出。

·Controller负责处理用户请求并构建适当的模型并将其传递给视图进行渲染。

DispatcherServlet

Spring Web模型 - 视图 - 控制器(MVC)框架是围绕DispatcherServlet设计的,它处理所有HTTP请求和响应。 Spring Web MVC DispatcherServlet的请求处理工作流程如下图所示 :

5分钟带你了解Spring Web MVC框架(赶紧上车)

以下是与传入的DispatcherServlet HTTP请求相对应的事件序列 :

·在接收到HTTP请求后, DispatcherServlet会查询HandlerMapping以调用相应的Controller。

·Controller接受请求并根据使用的GET或POST方法调用方法。方法将根据定义的业务逻辑设置模型数据,并将视图名称返回给DispatcherServlet。

·DispatcherServlet将从ViewResolver获取帮助以获取请求的已定义视图。

·View完成后, DispatcherServlet将模型数据传递给最终在浏览器中呈现的视图。

上述所有组件,即HandlerMapping,Controller和ViewResolver都是WebApplicationContext的一部分,它是普通ApplicationContext的扩展,并带有Web应用程序所需的一些额外功能。

所需的配置

您需要映射您希望DispatcherServlet处理的请求,方法是使用web.xml文件中的URL映射。以下是显示HelloWeb DispatcherServlet示例的声明和映射的示例:

5分钟带你了解Spring Web MVC框架(赶紧上车)

web.xml文件将保存在Web应用程序的WebContent / WEB-INF目录中。 在初始化HelloWeb DispatcherServlet时,框架将尝试从位于应用程序的WebContent / WEB-INF目录中的名为[servlet-name] -servlet.xml的文件加载应用程序上下文。 在这种情况下,我们的文件将是HelloWebservlet.xml。

接下来,标签指示哪些URL将由哪个DispatcherServlet处理。 这里所有以.jsp结尾的HTTP请求都将由HelloWeb DispatcherServlet处理。

如果您不想使用缺省文件名作为[servlet-name] -servlet.xml和缺省位置为WebContent / WEB-INF,则可以通过在web.xml文件中添加servlet侦听器ContextLoaderListener来自定义此文件名和位置 如下:

5分钟带你了解Spring Web MVC框架(赶紧上车)

现在,让我们检查HelloWeb-servlet.xml文件的必需配置,该文件放置在Web应用程序的WebContent / WEB-INF目录中:

5分钟带你了解Spring Web MVC框架(赶紧上车)

以下是关于HelloWeb-servlet.xml文件的要点:

·[servlet-name] -servlet.xml文件将用于创建定义的bean,覆盖全局范围中定义的具有相同名称的任何bean的定义。

·标记将用于激活Spring MVC注释扫描功能,该功能允许使用@Controller和@RequestMapping等注释。

·InternalResourceViewResolver将定义规则来解析视图名称。 按照上面定义的规则,名为hello的逻辑视图被委托给位于/WEB-INF/jsp/hello.jsp的视图实现。

以下部分将向您展示如何创建您的实际组件,即Controller(控制器),Model(模型)和View(视图)。

定义一个Controller

DispatcherServlet将请求委托给控制器以执行特定于其的功能。 @Controller注释表示特定的类用作控制器的角色。 @RequestMapping注释用于将URL映射到整个类或特定的处理程序方法。

5分钟带你了解Spring Web MVC框架(赶紧上车)

@Controller批注将类定义为Spring MVC控制器。 在这里,@RequestMapping的第一次使用表明这个控制器上的所有处理方法都是相对于/ hello路径的。 下一个注释@RequestMapping(method = RequestMethod.GET)用于声明printHello()方法作为处理HTTP GET请求的控制器的默认服务方法。 您可以定义另一种方法来处理同一个URL上的任何POST请求

您可以使用另一种形式编写上述控制器,您可以在@RequestMapping中添加其他属性,如下所示:

5分钟带你了解Spring Web MVC框架(赶紧上车)

值属性指示处理程序方法映射到的URL,方法属性定义处理HTTP GET请求的服务方法。 关于上面定义的控制器,需要注意以下几点:

·您可以在方法中定义所需的业务逻辑。 您可以根据需要调用此方法中的另一个方法。

·根据定义的业务逻辑,您将在此方法内创建一个模型。 您可以使用setter不同的模型属性,这些属性将被视图访问以呈现最终结果。 本示例创建一个模型,其属性为“信息”。

·定义的方法可以返回一个String,其中包含要用于呈现模型的视图的名称。 本例返回“hello”作为逻辑视图名称。

创建JSP视图

Spring MVC技术支持多种类型的视图软件。 包括:JSP,HTML,PDF,Excel工作表,XML,Velocity模板,XSLT,JSON,Atom和RSS源,JasperReports等等,但最常见的是 JSTL和JSP模板。

让我们在/WEB-INF/hello/hello.jsp中编写一个简单的hello视图:

5分钟带你了解Spring Web MVC框架(赶紧上车)

这里$ {message}是我们在Controller中设置的属性。 您可以在视图中显示多个属性。


分享到:


相關文章: