• Spring MVC笔记(一) Spring MVC概述


    Spring MVC框架是一个开源的Java平台,为开发强大的基于Java的Web应用程序提供全面的基础架构支持非常容易和非常快速。

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

    • 模型(Model)封装了应用程序数据,通常它们将由POJO类组成。
    • 视图(View)负责渲染模型数据,一般来说它生成客户端浏览器可以解释HTML输出。
    • 控制器(Controller)负责处理用户请求并构建适当的模型,并将其传递给视图进行渲染。

    DispatcherServlet组件类

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

     

    以下是对应于到DispatcherServlet的传入HTTP请求的事件顺序:

    • 在接收到HTTP请求后,DispatcherServlet会查询HandlerMapping以调用相应的Controller
    • Controller接受请求并根据使用的GETPOST方法调用相应的服务方法。 服务方法将基于定义的业务逻辑设置模型数据,并将视图名称返回给DispatcherServlet
    • DispatcherServlet将从ViewResolver获取请求的定义视图。
    • 当视图完成,DispatcherServlet将模型数据传递到最终的视图,并在浏览器上呈现。

    所有上述组件,即: HandlerMappingControllerViewResolverWebApplicationContext的一部分,它是普通ApplicationContext的扩展,带有Web应用程序所需的一些额外功能。

    必需的配置

    需要通过使用web.xml文件中的URL映射来映射希望DispatcherServlet处理的请求。 下面是一个示例来显示HelloWeb DispatcherServlet示例的声明和映射:

     1 <web-app id="WebApp_ID" version="2.4"
     2     xmlns="http://java.sun.com/xml/ns/j2ee" 
     3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
     5     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
     6 
     7     <display-name>Spring MVC Application</display-name>
     8 
     9    <servlet>
    10       <servlet-name>HelloWeb</servlet-name>
    11       <servlet-class>
    12          org.springframework.web.servlet.DispatcherServlet
    13       </servlet-class>
    14       <load-on-startup>1</load-on-startup>
    15    </servlet>
    16 
    17    <servlet-mapping>
    18       <servlet-name>HelloWeb</servlet-name>
    19       <url-pattern>*.jsp</url-pattern>
    20    </servlet-mapping>
    21 
    22 </web-app>

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

    接下来,<servlet-mapping>标记指示哪些URL将由DispatcherServlet处理。 这里所有以.jsp结尾的HTTP请求都将由HelloWeb DispatcherServlet处理。

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

     1 <web-app...>
     2 
     3 <!-------- DispatcherServlet definition goes here----->
     4 ....
     5 <context-param>
     6    <param-name>contextConfigLocation</param-name>
     7    <param-value>/WEB-INF/HelloWeb-servlet.xml</param-value>
     8 </context-param>
     9 
    10 <listener>
    11    <listener-class>
    12       org.springframework.web.context.ContextLoaderListener
    13    </listener-class>
    14 </listener>
    15 </web-app>

    现在来看看HelloWeb-servlet.xml文件的必需配置,放在Web应用程序的WebContent/WEB-INF目录中:

     1 <beans xmlns="http://www.springframework.org/schema/beans"
     2    xmlns:context="http://www.springframework.org/schema/context"
     3    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4    xsi:schemaLocation="
     5    http://www.springframework.org/schema/beans     
     6    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
     7    http://www.springframework.org/schema/context 
     8    http://www.springframework.org/schema/context/spring-context-3.0.xsd">
     9 
    10    <context:component-scan base-package="com.yiibai" />
    11 
    12    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    13       <property name="prefix" value="/WEB-INF/jsp/" />
    14       <property name="suffix" value=".jsp" />
    15    </bean>
    16 
    17 </beans>

    以下是有关HelloWeb-servlet.xml文件的重点说明:

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

    • <context:component-scan ...>标签将用于激活Spring MVC注释扫描功能,允许使用@Controller@RequestMapping等注释。

    • InternalResourceViewResolver将定义用于解析视图名称的规则。根据上面定义的规则,hello的逻辑视图将委托给位于/WEB-INF/jsp/hello.jsp这个视图来实现。

    下一节将演示如何创建实际组件。即:控制器,模型和视图。

    定义控制器

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

     1 @Controller
     2 @RequestMapping("/hello")
     3 public class HelloController{
     4 
     5    @RequestMapping(method = RequestMethod.GET)
     6    public String printHello(ModelMap model) {
     7       model.addAttribute("message", "Hello Spring MVC Framework!");
     8       return "hello";
     9    }
    10 
    11 }

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

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

     1 @Controller
     2 public class HelloController{
     3 
     4    @RequestMapping(value = "/hello", method = RequestMethod.GET)
     5    public String printHello(ModelMap model) {
     6       model.addAttribute("message", "Hello Spring MVC Framework!");
     7       return "hello";
     8    }
     9 
    10 }

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

    • 在服务方法中定义所需的业务逻辑。可以根据需要在此方法内调用其他方法。
    • 基于定义的业务逻辑,将在此方法中创建一个模型。可以设置不同的模型属性,这些属性将被视图访问以呈现最终结果。此示例创建且有属性“message”的模型。
    • 定义的服务方法可以返回一个String,它包含要用于渲染模型的视图的名称。此示例将“hello”返回为逻辑视图名称。

    创建JSP视图

    Spring MVC支持许多类型的视图用于不同的表示技术。包括 - JSP,HTML,PDF,Excel工作表,XML,Velocity模板,XSLT,JSON,Atom 和 RSS 源,JasperReports等。但最常见的是使用JSPL编写的JSP模板,这里使用的是JSP模板,并在/WEB-INF/hello/hello.jsp中写一个简单的hello视图:

    1 <html>
    2    <head>
    3    <title>Hello Spring MVC</title>
    4    </head>
    5    <body>
    6    <h2>${message}</h2>
    7    </body>
    8 </html>

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

  • 相关阅读:
    leetcode 155. Min Stack 、232. Implement Queue using Stacks 、225. Implement Stack using Queues
    leetcode 557. Reverse Words in a String III 、151. Reverse Words in a String
    leetcode 153. Find Minimum in Rotated Sorted Array 、154. Find Minimum in Rotated Sorted Array II 、33. Search in Rotated Sorted Array 、81. Search in Rotated Sorted Array II 、704. Binary Search
    leetcode 344. Reverse String 、541. Reverse String II 、796. Rotate String
    leetcode 162. Find Peak Element
    leetcode 88. Merge Sorted Array
    leetcode 74. Search a 2D Matrix 、240. Search a 2D Matrix II
    Android的API版本和名称对应关系
    spring 定时任务执行两次解决办法
    解析字符串为泛型的方法
  • 原文地址:https://www.cnblogs.com/weyoung1987/p/7840868.html
Copyright © 2020-2023  润新知