一、SpringMVC概述与基本原理

spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,Spring Web MVC也是要简化我们日常Web开发的。

另外还有一种基于组件的、事件驱动的Web框架在此就不介绍了,如Tapestry、JSF等。

Spring Web MVC也是服务到工作者模式的实现,但进行可优化。前端控制器是DispatcherServlet;应用控制器其实拆为处理器映射器(Handler Mapping)进行处理器管理和视图解析器(View Resolver)进行视图管理;页面控制器/动作/处理器为Controller接口(仅包含ModelAndView handleRequest(request, response) 方法)的实现(也可以是任何的POJO类);支持本地化(Locale)解析、主题(Theme)解析及文件上传等;提供了非常灵活的数据验证、格式化和数据绑定机制;提供了强大的约定大于配置(惯例优先原则)的契约式编程支持。

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

  • 模型(Model )封装了应用程序的数据和一般他们会组成的POJO。

  • 视图(View)是负责呈现模型数据和一般它生成的HTML输出,客户端的浏览器能够解释。

  • 控制器(Controller )负责处理用户的请求,并建立适当的模型,并把它传递给视图渲染。

1.1、DispatcherServlet

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

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

  1. 接收HTTP请求后,DispatcherServlet 咨询 HandlerMapping 来调用相应的控制器。

  2. 该控制器接受请求并调用基于使用GET或POST方法相应的服务方法。服务方法将基于定义的业务逻辑设置模型数据,并返回视图名到DispatcherServlet。

  3. DispatcherServlet将需要帮助的ViewResolver从拾取到该请求所定义的视图。

  4. 一旦视图被敲定,DispatcherServlet会传递模型数据是在浏览器上最终呈现的视图。

所有上述部件,即HandlerMapping,控制器和视图解析器WebApplicationContext 部分是纯的 ApplicationContext 必要的 Web应用程序的一些额外的功能扩展。

1.2、所需配置

你需要映射所需的DispatcherServlet处理,通过在web.xml文件中使用URL映射请求。下面是一个例子,说明声明和映射 HelloWeb DispatcherServlet 的例子:

[html] view plaincopy
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
  4. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
  5. id="WebApp_ID" version="3.0">
  6. <!-- SpringMVC的前端控制器 -->
  7. <servlet>
  8. <servlet-name>Hello</servlet-name>
  9. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  10. <load-on-startup>1</load-on-startup>
  11. </servlet>
  12. <!-- Spring MVC配置文件结束 -->
  13. <!-- 拦截设置 -->
  14. <servlet-mapping>
  15. <servlet-name>Hello</servlet-name>
  16. <!-- 由SpringMVC拦截所有请求 -->
  17. <url-pattern>/</url-pattern>
  18. </servlet-mapping>
  19. </web-app>

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

 接下来,<servlet-mapping>标记指示URL会被DispatcherServlet处理。这里全部用。jsp结束HTTP请求将由DispatcherServlet的HelloWeb处理。如果不想用默认文件名为[servlet-name]-servlet.xml和默认位置的WebContent/WEB-INF 在 web.xml 文件中定义该文件的名称和位置如下:

[html] view plaincopy
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
  4. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
  5. id="WebApp_ID" version="3.0">
  6. <!-- SpringMVC的前端控制器 -->
  7. <servlet>
  8. <servlet-name>Hello</servlet-name>
  9. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  10. <!-- 设置自己定义的控制器xml文件 -->
  11. <init-param>
  12. <param-name>contextConfigLocation</param-name>
  13. <param-value>/WEB-INF/Hello-servlet.xml</param-value>
  14. </init-param>
  15. <load-on-startup>1</load-on-startup>
  16. </servlet>
  17. <!-- Spring MVC配置文件结束 -->
  18. <!-- 拦截设置 -->
  19. <servlet-mapping>
  20. <servlet-name>Hello</servlet-name>
  21. <!-- 由SpringMVC拦截所有请求 -->
  22. <url-pattern>/</url-pattern>
  23. </servlet-mapping>
  24. </web-app>

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

下面是有关 Hello-servlet.xml 文件的要点:

[html] view plaincopy
  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" xmlns:p="http://www.springframework.org/schema/p"
  4. xsi:schemaLocation="
  5. http://www.springframework.org/schema/mvc
  6. http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
  7. http://www.springframework.org/schema/beans
  8. http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
  9. http://www.springframework.org/schema/context
  10. http://www.springframework.org/schema/context/spring-context-3.0.xsd">
  11. <!-- 把标记了@Controller注解的类转换为bean -->
  12. <context:component-scan base-package="com.mucfc" />
  13. <!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 -->
  14. <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />
  15. <!-- 对模型视图名称的解析,即在模型视图名称添加前后缀 -->
  16. <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
  17. p:prefix="/WEB-INF/views/" p:suffix=".jsp"/>
  18. </beans>
  •  [servlet-name]-servlet.xml 文件将被用于创建定义的Bean,会覆盖在全局范围里名字相同的Bean的定义。

  • <context:component-scan...>标签将使用启动Spring MVC的注解扫描功能,允许做出像 @Controller和使用@RequestMapping注解等使用。

  • 使用InternalResourceViewResolver将有定义来解析视图名的规则。按照上述定义的规则,命名为你好的逻辑视图被委托给一个视图实现位于/WEB-INF/jsp/hello.jsp。

1.3、定义控制器

DispatcherServlet 委托请求发送到控制器,以执行特定于它的功能。注解@Controller表示一个特定的类提供一个控制器的角色。注解@RequestMapping 用于将URL映射到任何一个类或者一个特定的处理方法。

[java] view plaincopy
  1. package com.mucfc;
  2. import org.springframework.stereotype.Controller;
  3. import org.springframework.ui.ModelMap;
  4. import org.springframework.web.bind.annotation.RequestMapping;
  5. import org.springframework.web.bind.annotation.RequestMethod;
  6. @Controller
  7. public class HelloWorldController {
  8. @RequestMapping(value="/hello")
  9. public String printWelcome(ModelMap model) {
  10. model.addAttribute("message", "Spring 3 MVC Hello World");
  11. return "hello";
  12. }
  13. }

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

可以写在上面的另一种形式,可以使用@RequestMapping添加额外的属性如下控制:

[java] view plaincopy
  1. package com.mucfc;
  2. import org.springframework.stereotype.Controller;
  3. import org.springframework.ui.ModelMap;
  4. import org.springframework.web.bind.annotation.RequestMapping;
  5. import org.springframework.web.bind.annotation.RequestMethod;
  6. @Controller
  7. public class HelloWorldController {
  8. @RequestMapping(value="/hello",method=RequestMethod.GET,params="userid")
  9. public String printWelcome(ModelMap model,String userid) {
  10. model.addAttribute("message", "Spring 3 MVC Hello World");
  11. return "hello";
  12. }
  13. }

value属性指示该处理方法所映射到的URL和method属性定义了服务的方法来处理HTTP GET请求。有以下重要点要注意关于上述定义的控制器:

  • 将定义所需的业务逻辑内部的服务方法。可以调用此方法在另一个方法按要求。

  • 基于定义的业务逻辑,将在此方法中创建一个模型。您可以设定器不同的模型的属性和这些属性将被视图访问提出的最终结果。此示例创建一个具有自己的属性“message”的模型。

  • 定义的服务方法可以返回一个字符串,其中包含要用于渲染模型视图的名称。这个例子返回“hello”作为逻辑视图名。

1.4、创建JSP视图

Spring MVC支持多种类型的视图不同的演示技术。这些措施包括:JSP,HTML,PDF,Excel,XML,Velocity,XSLT,JSON,Atom和RSS订阅,JasperReports等,但最常用JSTL JSP模板。因此,我们编写一个/WEB-INF/hello/hello.jsp简单的hello 视图:

在这里, ${message}是我们已经建立了控制器内部的属性。你可以在视图中显示多个属性。

[html] view plaincopy
  1. <%@ page language="java" contentType="text/html; charset=gb2312"
  2. pageEncoding="gb2312"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
  7. <title>Insert title here</title>
  8. </head>
  9. <body>
  10. Message:${message}
  11. </body>
  12. </html>

二、第一个SpringMVC程序

工程免费下载

1、在ecliose中新建立一个web工程,首先将需要的包导入到\WebContent\WEB-INF\lib

2、先配置web.xml

[html] view plaincopy
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
  4. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
  5. id="WebApp_ID" version="3.0">
  6. <!-- SpringMVC的前端控制器 -->
  7. <servlet>
  8. <servlet-name>Hello</servlet-name>
  9. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  10. <!-- 设置自己定义的控制器xml文件 -->
  11. <init-param>
  12. <param-name>contextConfigLocation</param-name>
  13. <param-value>/WEB-INF/Hello-servlet.xml</param-value>
  14. </init-param>
  15. <load-on-startup>1</load-on-startup>
  16. </servlet>
  17. <!-- Spring MVC配置文件结束 -->
  18. <!-- 拦截设置 -->
  19. <servlet-mapping>
  20. <servlet-name>Hello</servlet-name>
  21. <!-- 由SpringMVC拦截所有请求 -->
  22. <url-pattern>/</url-pattern>
  23. </servlet-mapping>
  24. </web-app>

3、配置Hello-servlet.xml:

[html] view plaincopy
  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" xmlns:p="http://www.springframework.org/schema/p"
  4. xsi:schemaLocation="
  5. http://www.springframework.org/schema/mvc
  6. http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
  7. http://www.springframework.org/schema/beans
  8. http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
  9. http://www.springframework.org/schema/context
  10. http://www.springframework.org/schema/context/spring-context-3.0.xsd">
  11. <!-- 把标记了@Controller注解的类转换为bean -->
  12. <context:component-scan base-package="com.mucfc" />
  13. <!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 -->
  14. <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />
  15. <!-- 对模型视图名称的解析,即在模型视图名称添加前后缀 -->
  16. <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
  17. p:prefix="/WEB-INF/views/" p:suffix=".jsp"/>
  18. </beans>

4、配置控制器:

[java] view plaincopy
  1. package com.mucfc;
  2. import org.springframework.stereotype.Controller;
  3. import org.springframework.ui.ModelMap;
  4. import org.springframework.web.bind.annotation.RequestMapping;
  5. import org.springframework.web.bind.annotation.RequestMethod;
  6. @Controller
  7. public class HelloWorldController {
  8. @RequestMapping(value="/hello",method=RequestMethod.GET,params="userid")
  9. public String printWelcome(ModelMap model,String userid) {
  10. model.addAttribute("message", "Spring 3 MVC Hello World");
  11. return "hello";
  12. }
  13. }

5、WEB-INF下新建一个views文件夹,然后再新建一个hello.jsp

[html] view plaincopy
  1. <%@ page language="java" contentType="text/html; charset=gb2312"
  2. pageEncoding="gb2312"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
  7. <title>Insert title here</title>
  8. </head>
  9. <body>
  10. Message:${message}
  11. </body>
  12. </html>

6、整个工程目录如下:

7、直接运行,浏览器中输入http://localhost:8080/SpringMVCLearningChapter1/hello

结果如下:

工程免费下载

转载于:https://www.cnblogs.com/liangxiaofeng/p/6377802.html

springMVC helloworld入门相关推荐

  1. 一、SpringMVC基础入门,创建一个HelloWorld程序

    一.SpringMVC基础入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要的jar包. 2.添加Web.xml配置文件中关于SpringMVC的配置 1 2 3 4 5 6 ...

  2. Spring MVC HelloWorld入门及运行机制 (一)

    完整的项目案例: springmvc.zip 介绍 SpringMVC是一款Web MVC框架. 它跟Struts框架类似,是目前主流的Web MVC框架之一. 文章通过实例来介绍SpringMVC的 ...

  3. pythonhelloworld实例_Python基于Tkinter的HelloWorld入门实例

    本文实例讲述了Python基于Tkinter的HelloWorld入门实例.分享给大家供大家参考.具体分析如下: 初学Python,打算做几个Tkinter的应用来提高. 刚学的HelloWorld, ...

  4. 用python写helloworld_Python基于Tkinter的HelloWorld入门实例

    Python基于Tkinter的HelloWorld入门实例 本文实例讲述了Python基于Tkinter的HelloWorld入门实例.分享给大家供大家参考.具体分析如下: 初学Python,打算做 ...

  5. java day61【 SpringMVC 的基本概念 、 SpringMVC 的入门 、 请求参数的绑定 、常用注解 】...

    第1章 SpringMVC 的基本概念 1.1关于三层架构和 MVC 1.1.1 三层架构 1.1.2 MVC 模型 1.2SpringMVC 概述 1.2.1 SpringMVC 是什么 1.2.2 ...

  6. SpringMVC从入门到精通(终结版)

    1.项目配置文件 1.1.pom.xml文件 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=&qu ...

  7. SpringMVC——快速入门

    目录 1.SpringMVC 1.1.回顾MVC架构 1.2.SpringMVC概述 1.3.SpringMVC的特点 1.4.SpringMVC整体架构 2.SpringMVC快速入门 2.1.创建 ...

  8. SpringMVC从入门到精通(全)

    目录 1. SpringMVC简介 1.1 MVC 1.2 SpringMVC 2. 入门案例 2.1 引入依赖包 2.2 配置xml文件 2.3 创建请求控制器 2.4 springMVC配置文件 ...

  9. 【动力节点】springmvc框架入门教程-从入门到精通

    目录 一.Springmvc入门 1.Springmvc是什么 2.Springmvc处理流程 3.入门程序 二.springMVC架构 1.springMVC的架构图 2.架构流程 3.spring ...

  10. ubuntu系统下c语言helloworld入门以及编写简单程序

    文章目录 一.c语言helloworld入门 二.分别在ubuntu和windows系统下编写简单程序 (一)ubuntu系统下的简单主/子程序 (二)在windows系统下编写简单主/子程序 (三) ...

最新文章

  1. Python源码学习:Python类机制分析
  2. Numpy中数组间运算
  3. 最新 MSDN Library for Visual Studio 2008 SP1
  4. Python种reverse和reversed反转列表的操作方法
  5. 在react里写原生js_小程序原生开发与第三方框架选择
  6. 口无遮拦的钉钉与坐立不安的腾讯
  7. C# 面向对象之多态
  8. 【解决】U盘装系统(Win7/Win8) 装双系统
  9. 读书笔记:javascript高级程序设计
  10. 光洋协议转换网关WTGNet-KOYO
  11. ideaIU-2018.3.5版本安装
  12. indows蓝屏PROCESS1_INITIALIZATION_FAILED STOP:0x0000006B 解决方法
  13. APM32F103C8T6兼容性测试
  14. 论文笔记——ESRGAN: Enhanced Super-Resolution Generative Adversarial Networks
  15. AV1代码学习:encoder_encode函数
  16. 【XJTUSE软件项目管理复习笔记】 第二章 软件项目整体管理
  17. Abaqus中批量对节点施加集中力荷载
  18. 【干】探索自己的云米冰箱-2
  19. 北方工业大学计算机学院院长,王景中(北方工业大学院长)_百度百科
  20. Maven插件wagon-maven-plugin自动化部署

热门文章

  1. Windows Server 2008 Active Directory建置實務(附CD)
  2. code block下使用openMP
  3. 进程间通信---共享内存 ftok shmat shmget shmdt shmctl
  4. php mac windows,苹果电脑是windows系统吗
  5. 执行cmd并获得结果_用JAVA执行CMD命令备份PG数据库,解决需要口令的问题
  6. wav文件头修复_贴唱混音之二——音频修复
  7. python 连接hive_python pyhive通过SSH隧道连接hive报错,求解
  8. Spring源码之动态AOP自定义标签
  9. 【渝粤题库】陕西师范大学292231 财务管理Ⅱ 作业(专升本)
  10. 【Python实例第24讲】稀疏的可逆协方差估计