第一个SpringMVC实例和解析(HelloSpringMVC)

1. 开发步骤:

(1)增加Spring支持

下载Spring安装包和其依赖的commons-logging.jar,复制到项目Web应用的lib文件夹(WebRoot/WEB-INF/lib);

Spring文件夹内容介绍:    

dccs: Spring相关文档,包括开发指南、API参考文档;

libs: jar包。分为:1)Spring框架calss文件的JAR包;2)Spring框架源文件的压缩包,文件名以-source结尾; 3)Spring框架API文档的压缩包,文件名以-javadoc结尾;

schemas: Spring配置文件的XML Schema文档;

其他.txt说明性文档。

(2)配置前端控制器DispatchServlet

在部署描述符web.xml中编辑配置DispatchServlet(WebRoot/WEB-INF/web.xml)

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
    http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
  <display-name>SM02</display-name>

  <!-- 配置SpringMVC前端控制器DispatcherServlet -->
  <servlet>
      <servlet-name>springmvc</servlet-name>
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
      <init-param>
          <param-name>contextConfigLocation</param-name>
          <!-- 指定SpringMVC配置文件spring-config.xml,用来将拦截的对应请求分发给对应的Controller-->
          <param-value>/WEB-INF/springmvc-config.xml</param-value>
      </init-param>
      <load-on-startup>1</load-on-startup>
  </servlet>

  <!-- 指定该springmvc的Servlet可以拦截的请求为所有请求("/"),       之后可以分发给对应的Controller-->
  <servlet-mapping>
      <servlet-name>springmvc</servlet-name>
      <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

(3)配置SpringMVC的Controller

在SpringMVC的配置文件springmvc-config.xml中配置对应的Controller、对应的Java Bean、对应拦截的请求等

(WEN-INF/springmvc-config.xml,路径在web.xml的DispatcherServlet的配置中param-value子标签中配置)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    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-4.2.xsd">

    <!-- 配置Handle,映射"/hello"请求 -->
    <bean name="/hello" class="org.fkit.controller.HelloController"/>

    <!-- 处理映射器将bean的name作为url进行查找,需要在配置Handle时指定name(即url) -->
    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>

    <!-- SimpleControllerHandlerAdapter是一个处理器适配器,所有处理适配器都要实现 HandlerAdapter接口-->
    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>

    <!-- 视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"/>
</beans>

其中,Spring4.0之后可以不配置处理映射器、处理器适配器、视图解析器,这些工作会默认完成。此处为显式表现出SpringMVC工作流程。

(4)Controller类的实现

HelloController类实现了Controller接口,用来处理"/hello"的单一请求,即浏览器发出http://localhost:8080/SM02/hello的请求时实际由该Controller处理。

(src/org/fkit/controller/HelloController.java)

package org.fkit.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

/**
 * 一个实现了Controller接口的控制器
 * 可以处理一个单一的请求动作("/hello")
 * http://localhost:8080/SM02/hello
 */
public class HelloController implements Controller {
    private static final Log logger = LogFactory.getLog(HelloController.class);
    /**
     * handleRequest方法时Controller接口必须实现的方法
     * 返回一个ModelAndView对象,包含视图名或视图名和模型
     */
    public ModelAndView handleRequest(HttpServletRequest arg0,
            HttpServletResponse arg1) throws Exception {
        logger.info("handleRequest调用");

        //创建ModelAndView对象
        ModelAndView mv = new ModelAndView();

        //添加模型数据,可以是任意POJO对象,第一个参数是对该对象的命名,可在jsp中用EL表达式引用
        mv.addObject("message", "Hello SpringMVC");

        //设置逻辑视图名,视图解析器会根据该名字解析到具体的视图页面,参数指定该页面路径
        mv.setViewName("/WEB-INF/content/welcome.jsp");

        //返回ModelAndView对象
        return mv;
    }
}

(5)View页面实现

HelloController返回的页面,用来显式返回的视图内容,在该Controller的ModelAndView对象的setViewName()中指定路径。

(WEB-INF/content/welcome.jsp)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>欢迎页面</title>
</head>
<body>
<!-- 页面可以访问Controller传递传递出来的message -->
${requestScope.message}
</body>
</html>

(6)结果展示

在浏览器中输入URL:http://localhost:8080/SM02/hello,返回以下视图,表示访问成功。

2. 执行流程解析

(1)用户向服务器发送请求

(2)请求被DispatcherServlet拦截

(3)DispatcherServlet对请求URL(统一资源定位符)进行解析,得到URI(请求资源标识符)。根据该URI,调用HandlerMapping获得该Handler(Controller)配置的所有相关对象,包括Handler对象以及Handler对象对应的拦截器,这些对象会被封装到一个HandlerExecutionChain对象中返回。

(4)DispatcherServlet根据获得的Handler,选择一个合适的HandlerAdapter。HandlerAdapter的设计符合面向对象的单一职责原则,代码架构清晰,便于维护,可复用性高。HandlerAdapter被用于处理多种Handler,调用Handler实际处理请求的方法。

(5)提取请求中的模型数据,执行Handler(Controller)。在填充Handler入参过程中,根据配置,Spring会做一些额外的工作(消息转换、数据转换、数据格式化、数据验证...)

(6)Handler执行完成后向DispatcherServlet返回一个ModelAndView对象,对象中应包括视图名,或视图名和模型

(7)根据返回的对象,选择合适的ViewResolver(视图解析器),返回给DispatcherServlet。

(8)ViewResolver结和Model和View渲染视图。

(9)将视图渲染结果返回给客户端。

时间: 2024-11-09 18:36:03

第一个SpringMVC实例和解析(HelloSpringMVC)的相关文章

【SpringMVC架构】SpringMVC入门实例,解析工作原理(二)

上篇博文,我们简单的介绍了什么是SpringMVC,这篇博文,我们搭建一个简单SpringMVC的环境,使用非注解形式实现一个HelloWorld实例,从简单入手,逐步深入. 环境准备 我们需要有基本的java环境,下面只是简单的罗列,不再详细的介绍. jdk1.6以上 eclipse或者myEclipse tomcat6以上 我们使用SpringMVC的版本是Spring3.2.0,下图是最基本的jar包: 在Spring的官方API文档中,给出了所有jar包作用的概述,现列举常用的包以及相关

SpringMVC+Spring3+hibernate4 开发环境搭建以及一个开发实例教程

刚刚接触了SpringMVC这个框架,因此有必要把它拿过来同hibernate.Spring框架进行集成和开发一个实例,在真正企业从头开发的项目中往往一个稳定的开发环境至关重要,开发一个项目选择什么样的搭建平台也需要有经验才可以,并不是说你会搭建一个开发平台然后公司就会用你搭建的开发平台,一个项目或者一个公司看中的也不是你可以搭出框架,而是在这个框架使用过程中出现的各种问题你可以解决掉. 也就是说呢,无论开发什么项目要做到稳定.环境稳定.开发成本稳定.技术稳定.换句话说就是"风险可控"

SpringMVC源码解析- HandlerAdapter - ModelFactory

ModelFactory主要是两个职责: 1. 初始化model 2. 处理器执行后将modle中相应参数设置到SessionAttributes中 我们来看看具体的处理逻辑(直接充当分析目录): 1. 初始化model 1.1 解析类上使用的sessionAttributres,将获取参数合并到mavContainer中 1.2 执行注解了@ModelAttribute的方法,并将结果同步到Model 参数名的生成规则:@ModelAttribute中定义的value > 方法的返回类型决定(

SSM框架-SpringMVC 实例文件上传下载

SSM框架-SpringMVC 实例文件上传下载 2017-04-17 09:38 4497人阅读 评论(6) 收藏 举报  分类: java基础(3)  目录(?)[+] 目录(?)[+] 林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 本文详细讲解了SpringMVC实例单文件上传.多文件上传.文件列表显示.文件下载. 本文工程免费下载 一.新建一个Web工程,导入相关的包 springmvc的包+commons-fileupload

【JavaScript】jQuery Ajax 实例 全解析

jQuery确实是一个挺好的轻量级的JS框架,能帮助我们快速的开发JS应用,并在一定程度上改变了我们写JavaScript代码的习惯. 废话少说,直接进入正题,我们先来看一些简单的方法,这些方法都是对jQuery.ajax()进行封装以方便我们使用的方法,当然,如果要处理复杂的逻辑,还是需要用到jQuery.ajax()的(这个后面会说到). 1. load( url, [data], [callback] ) :载入远程 HTML 文件代码并插入至 DOM 中. url (String) :

SpringMVC 源代码深度解析&lt;context:component-scan&gt;(扫描和注册的注解Bean)

我们在SpringMVC开发项目中,有的用注解和XML配置Bean,这两种都各有自己的优势,数据源配置比较经常用XML配置,控制层依赖的service比较经常用注解等(在部署时比较不会改变的),我们经常比较常用的注解有@Component是通用标注,@Controller标注web控制器,@Service标注Servicec层的服务,@Respository标注DAO层的数据访问.SpringMVC启动时怎么被自动扫描然后解析并注册到Bean工厂中去(放到DefaultListableBeanF

用c#写一个json的万能解析器

CommonJsonModel .cs /// <summary> /// 万能JSON解析器 /// </summary> public class CommonJsonModel : CommonJsonModelAnalyze { private string rawjson; private bool isValue = false; private bool isModel = false; private bool isCollection = false; inter

用maven定制一个车联网的天气预报解析项目

用maven定制一个车联网的天气预报解析项目 1:首先我们要根据之前的学习先创建一个maven项目 本实例以Gao这个项目来介绍,我们要做的功能是把车联网返回的内容解析并格式化后显示出来.车联网天气查询api地址http://developer.baidu.com/map/carapi-7.htm 在此我们需要一个开发者密钥即访问接口中的参数ak.我已经申请好,没有直接使用了,没有的童鞋可以去申请一个. 2:添加新的依赖 由于我们要解析接口默认返回的xml格式的数据,所以我们要用到一些解析xml

(一)SpringMvc简介以及第一个springmvc工程

一.SpringMVC是什么? springmvc是Spring的一个模块,提供web层解决方案(就与MVC设计架构) 如上图, DispatcherServlet:前端控制器,由SpringMVC提供. HandlerMapping:处理器映射器,由SpringMVC提供.用于解析url,将该url映射到某一个Controller上. HandlerAdapter:处理器适配器,由SpringMVC提供.用于将url映射到某个Controller的某个方法上. Handler:处理器,需要程序