Spring Web MVC框架提供模型 - 视图 - 控制器(MVC)架构和现成的组件,可用于开发灵活且松散耦合的Web应用程序. MVC模式导致应用程序的不同方面(输入逻辑,业务逻辑和UI逻辑)分离,同时在这些元素之间提供松散耦合.
模型封装了应用程序数据,通常它们将包含POJO.
查看负责呈现模型数据,通常它会生成客户端浏览器可以解释的HTML输出.
Controller 负责处理用户请求并构建适当的模型并将其传递给视图进行渲染.
Spring Web模型 - 视图 - 控制器(MVC)框架是围绕处理所有HTTP请求和响应的 DispatcherServlet 设计的. Spring Web MVC DispatcherServlet 的请求处理工作流程如下图所示 :
以下是与 DispatcherServlet 的传入HTTP请求相对应的事件序列 :
收到HTTP请求后, DispatcherServlet 查询 HandlerMapping 以调用相应的控制器 .
Controller 接收请求并根据使用的GET或POST方法调用相应的服务方法.服务方法将根据定义的业务逻辑设置模型数据,并将视图名称返回到 DispatcherServlet .
DispatcherServlet 将从 ViewResolver 获取帮助以获取请求的已定义视图.
一旦视图完成, DispatcherServlet 将模型数据传递给最终在浏览器上呈现的视图.
上述所有内容组件,即HandlerMapping,Controller和ViewResolver是 WebApplicationContext w的一部分,它是普通的 ApplicationContext 的扩展,具有Web应用程序所需的一些额外功能.
您需要使用 Web中的URL映射来映射您希望 DispatcherServlet 处理的请求.xml 文件.以下是显示 HelloWeb DispatcherServlet 示例 :
<web-app id = "WebApp_ID" version = "2.4" xmlns = "http://java.sun.com/xml/ns/j2ee" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation = "http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name>Spring MVC Application</display-name> <servlet> <servlet-name>HelloWeb</servlet-name> <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>HelloWeb</servlet-name> <url-pattern>*.jsp</url-pattern> </servlet-mapping> </web-app>
web.xml 文件将保存在Web应用程序的WebContent/WEB-INF目录中.初始化 HelloWeb DispatcherServlet后,框架将尝试从位于应用程序的WebContent/WEB中的名为 [servlet-name] -servlet.xml 的文件中加载应用程序上下文. INFdirectory.在这种情况下,我们的文件将是 HelloWebservlet.xml .
接下来,< servlet-mapping> tag表示DispatcherServlet将处理哪些URL.这里以 .jsp 结尾的所有HTTP请求都将由 HelloWeb DispatcherServlet处理.
如果您不想使用默认文件名为 [servlet-name] -servlet.xml ,默认位置为 WebContent/WEB-INF ,您可以通过添加servlet侦听器来自定义此文件名和位置
<web-app...> <!-------- DispatcherServlet definition goes here-----> .... <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/HelloWeb-servlet.xml</param-value> </context-param> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> </web-app>
现在,让我们检查 HelloWeb-servlet.xml 文件所需的配置,该文件放在Web应用程序的 WebContent中/WEB-INF 目录 :
<beans xmlns = "http://www.springframework.org/schema/beans" xmlns:context = "http://www.springframework.org/schema/context" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <context:component-scan base-package = "com.it1352" /> <bean class = "org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name = "prefix" value = "/WEB-INF/jsp/" /> <property name = "suffix" value = ".jsp" /> </bean> </beans>
以下是关于 HelloWeb-servlet.xml 文件的重要观点 :
[servlet-name] -servlet.xml 文件将用于创建定义的bean,覆盖定义的任何bean的定义全球范围内的相同名称.
将使用< context:component-scan ...> 标记激活Spring MVC注释扫描功能,允许使用@Controller和@RequestMapping等注释.
InternalResourceViewResolver 将已定义规则以解析视图名称.根据上面定义的规则,名为 hello 的逻辑视图被委托给位于/WEB-INF/jsp/hello.jsp 的视图实现.
以下部分将向您展示如何创建实际组件,即Controller,Model和View.
DispatcherServlet将请求委托给控制器以执行特定于它的功能. @Controller 注释表示特定类充当控制器的角色. @RequestMapping 注释用于将URL映射到整个类或特定的处理程序方法.
@Controller @RequestMapping("/hello") public class HelloController { @RequestMapping(method = RequestMethod.GET) public String printHello(ModelMap model) { model.addAttribute("message", "Hello Spring MVC Framework!"); return "hello"; } }
@Controller 注释将类定义为Spring MVC控制器.这里, @RequestMapping 的第一次使用表明此控制器上的所有处理方法都与/hello 路径相关.下一个注释 @RequestMapping(method = RequestMethod.GET)用于将printHello()方法声明为控制器处理HTTP GET请求的默认服务方法.您可以定义另一种方法来处理同一URL上的任何POST请求.
您可以用另一种形式编写上述控制器,您可以在 @RequestMapping 如下 :
@Controller public class HelloController { @RequestMapping(value = "/hello", method = RequestMethod.GET) public String printHello(ModelMap model) { model.addAttribute("message", "Hello Spring MVC Framework!"); return "hello"; } }
值属性指示处理程序方法映射到的URL以及 method 属性定义处理HTTP GET请求的服务方法.关于上面定义的控制器,请注意以下几点:<
您将在服务中定义所需的业务逻辑方法.您可以根据需要在此方法中调用另一个方法.
根据定义的业务逻辑,您将在此方法中创建模型.您可以使用setter不同的模型属性,视图将访问这些属性以显示最终结果.此示例创建一个模型,其属性为"message".
定义的服务方法可以返回一个String,其中包含视图的名称用于渲染模型.此示例返回"hello"作为逻辑视图名称.
Spring MVC支持不同表示技术的多种类型的视图.这些包括 - JSP,HTML,PDF,Excel工作表,XML,Velocity模板,XSLT,JSON,Atom和RSS提要,JasperReports等.但最常见的是我们使用用JSTL编写的JSP模板.
<让我们在/WEB-INF/hello/hello.jsp中写一个简单的 hello 视图 :
<html> <head> <title>Hello Spring MVC</title> </head> <body> <h2>${message}</h2> </body> </html>
这里 $ {message} 是我们在Controller中设置的属性.您可以在视图中显示多个属性.
基于以上概念,让我们检查几个重要的示例将帮助您构建Spring Web Applications :
Sr.No. | 示例&说明 |
---|---|
1 | Spring MVC Hello World示例 这个例子将解释如何编写一个简单的Spring Web Hello World应用程序. |
2 | Spring MVC表单处理示例 此示例将说明如何使用HTML表单编写Spring Web应用程序以将数据提交给控制器和显示处理结果. |
3 | Spring Page重定向示例 了解如何在Spring MVC Framework中使用页面重定向功能. |
4 | Spring静态页面示例 了解如何在Spring MVC Framework中访问静态页面以及动态页面. |
5 | Spring异常处理示例 了解如何处理Spring MVC Framework中的异常. |