1. Spring MVC概述

Spring MVC框架是一个开源的Java平台,为开发强大的基于Java的Web应用程序提供全面的基础架构支持非常容易和非常快速。
Spring web MVC框架提供了MVC(模型 - 视图 - 控制器)架构和用于开发灵活和松散耦合的Web应用程序的组件。 MVC模式导致应用程序的不同方面(输入逻辑,业务逻辑和UI逻辑)分离,同时提供这些元素之间的松散耦合。

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

1.1 Spring MVC生命周期

spring mvc框架是围绕DispatcherServlet设计的,它处理所有的HTTP请求和响应。请求处理工作流如下图所示:
超简单的Spring MVC框架搭建

  1. 在接收到 Request 请求后,DispatcherServlet 会查询到 HandlerMapping
    以调用相应的 controller
  2. controller 接受请求,并根据 getpost 调用相应的服务方法,方法基于模型数据,将视图返回给 DispatcherServlet
  3. DispatcherServlet 将从 view Resolver 中获取视图
  4. 当视图完成,DispatcherServlet 将模型数据传递到最终的视图,并展示在浏览器上

2. Spring MVC - Hello World示例

创建一个动态web项目,项目结构如下:
超简单的Spring MVC框架搭建

2.1 必需的配置

web.xml

需要通过使用web.xml文件中的URL映射来映射希望DispatcherServlet处理的请求。 下面是一个示例来显示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>/</url-pattern>
   </servlet-mapping>

</web-app>

DispatcherServlet 默认会找WebContent/WEB-INF目录中名为[servlet-name]-servlet.xml的文件加载应用程序上下文。
如果不想使用默认文件名为[servlet-name]-servlet.xml和默认位置为WebContent/WEB-INF,可以通过在web.xml文件中添加servlet侦听器ContextLoaderListener来自定义此文件名和位置 如下:

<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>
   
   <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>

   <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>/</url-pattern>
   </servlet-mapping>

</web-app>

HelloWeb-servlet.xml

<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.my" />

   <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
      <property name="prefix" value="/WEB-INF/jsp/" />
      <property name="suffix" value=".jsp" />
   </bean>

</beans>
  • <context:component-scan base-package="***" /> 用于扫描文件
  • InternalResourceViewResolver 定义解析视图名称的规则

2.2 定义控制器

HelloController.java

package com.my.springmvc;

import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller // @Controller表示当前类充当控制器角色
@RequestMapping("/hello") // @RequestMapping用于将URL映射到整个类或方法
public class HelloController {

	//value = "/pringHello" 将URL映射到方法,method = RequestMethod.GET 用于声明处理HTTP GET请求
	@RequestMapping(value = "/pringHello",method = RequestMethod.GET) 
	public String pringHello(ModelMap model) {
		// 创建模型,添加属性为 message
		model.addAttribute("message", "Hello Spring MVC Framework!");
		
		//返回页面文件名,ViewResolver会根据配置跳转到对应的jsp页面
		return "hello";
	}
}

2.3 创建JSP视图

hello.jsp

<%@ page contentType="text/html; charset=UTF-8" %>
<html>
<head>
<title>Hello World</title>
</head>
<body>
   <h2>Hello, ${message}</h2>
</body>
</html>

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

3. 启动服务

启动tomcat服务,成功日志如下:
超简单的Spring MVC框架搭建
浏览器访问:http://localhost:8080/HelloWeb/hello/pringHello
超简单的Spring MVC框架搭建

相关文章: