SpringMVC 简述及其Helloworld演绎全过程

该篇博客主要阐述SpringMVC框架概述以及一个hello world小程序,主要需要了解SpringMVC开发的简单过程

该篇博客主要阐述

1、什么是SpringMVC
2、SpringMVC处理请求过程解析
3、采用SpringMVC好处
4、SpringMVC之hello world

一、什么是SpringMVC

Spring MVC 是Spring框架最重要的的模块之一。 它以强大的Spring IoC容器为基础,并充分利用容器的特性来简化它的配置

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


二、SpringMVC处理请求过程解析

这里写图片描述

1:请求离开浏览器,将用户所请求的内容、请求的URL发送给了web.xml中的DispatcherServlet(前端控制器)处理这是SpringMVC好处之一:不需要编写Dispatcher Servlet,SpringMVC自带,而DispatcherServlet的任务是将请求发送给SpringMVC控制器(controller)中的某个方法,当然在实际应用中可能会有多个控制器,所以DispatcherServlet需要知道应该将请求发送给哪个控制器,这就需要第2步了


2、DispatcherServlet会查询一个或多个处理器映射(handler mapping)来确定下一站在哪。现在常用@RequestMapping(“/helloworld”)来设定某个方法,让DispatcherServlet来找到该方法即可,其中@RequestMapping(“/helloworld”)中的helloworld需要与请求的URL相同。当然必须清楚的一点是/helloworld映射地址为http://localhost:8080/Springmvc_01_helloworld/helloworld。既然通过@RequestMapping(“/helloworld”)确定了控制器,那么就进行第3步了


3、在控制器中,请求会卸下其负载(用户提交的信息)并处理这些信息(不过经常不用控制器来处理,而是委托给服务对象来处理), 控制器所做的最后一件事是将模型数据打包(模型数据指返回给用户的信息),并标示出用于渲染输出的试图名(即逻辑视图名称)


4、将模型和逻辑视图名称返回给DispatcherServlet


5、DispatcherServlet使用视图解析器(view resolver)将逻辑视图名添加前缀和后缀,然后查找视图模板(最常用的是InternalResourceViewResolver)转化成物理视图,注意:这个物理视图因为后缀的不确定,所以不一定是jsp页面,最后得到了视图渲染结果,以下是SpringMVC可以使用视图解析器来选择合适的视图

这里写图片描述


6、请求的任务基本就完成了,第6步就是视图的实现


7、视图将使用模型数据渲染输出,这个输出会通过响应对象传递给客户端


以上就是SpringMVC处理请求全过程解析了

当然在视图解析器中你需要明白以下几点

  • 物理视图名:prefix+逻辑视图名+suffix,即能够显示内容的
  • 逻辑视图名:以下代码的hello就是逻辑视图名,改名将应用于物理视图名

    public String showHomePage() {
    System.out.println("hello world");
    return "hello";
    }
    

三、采用SpringMVC好处

  • 与Spring框架集成(IoC、AOP)
  • 提供强大的约定大于配置的契约式编程
  • 支持灵活的URL到页面控制器的映射
  • 有一套强大的JSP标签库,简化jsp开发
  • RESTful风格支持
  • 简单的文件上传
  • 基于注解的零配置支持等等

四、SpringMVC之hello world

首先总结一下实现请求过程开发步骤
  • 1、导入jar包(包括Spring的jar、jsp、jstl、standard、servlet的jar)

  • 2、在web.xml中配置前端控制器DispatcherServlet

  • 3、编写处理请求的控制器,并为某方法标识为让DispatcherServlet知道请求应该发送到哪

  • 4、创建SpringMVC配置文件,如果不在web.xml中设置init-param,默认的SpringMVC配置文件名为-servlet.xml,注意:位置是在WEB-INF下

  • 5、配置SpringMVC配置文件——将控制器这个类注册到IoC容器中

  • 6、配置SpringMVC配置文件——编写视图解析器(并创建prefix目录)

1.导入jar包
2、配置web.xml,加入前端控制器

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">

  <!-- 配合前端控制器 -->
  <!-- <load-on-startup>表示启动容器时初始化该servlet -->
    <servlet>
        <servlet-name>springDispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
<!-- <url-pattern>代表哪些请求交给SpringMVC处理,"/"代表默认servlet映射的,也可是如"*.html"表示拦截所有html为扩展名的请求-->
    <servlet-mapping>
        <servlet-name>springDispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>
3、编写处理请求的控制器

HomeController.java

package linjie.springmvc.handler;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

/**
* @author LinJie E-mail:xulinjie0105@gmail.com
* @version 创建时间:2018年5月13日 下午2:09:31
* 处理请求的控制器
*/
@Controller
public class HomeController {

    //处理对首页的请求
    //@RequestMapping("/helloworld")两个作用
    //1、表明showHomePage()是一个请求处理方法
    //2、指明这个方法要处理"/helloworld"路径的请求
    @RequestMapping("/helloworld")
    public String showHomePage() {
        System.out.println("hello world");
        return "hello";
    }
}
4、WEB-INF下创建SpringMVC配置文件
  • 将控制器这个类注册到IoC容器中
  • 编写视图解析器(并创建prefix目录)

springDispatcherServlet-servlet.xml(需要有bean、context、mvc三个约束)

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:mvc="http://www.springframework.org/schema/mvc"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
            http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd">

        <!-- 扫描linjie.springmvc.handler包及其子包下的所有文件,通过注解注册到IoC容器中 -->
        <context:component-scan base-package="linjie.springmvc.handler"></context:component-scan>

        <!-- 配置视图解析器 -->
        <!-- 注意:prefix中有views文件夹,所有需要创建该文件夹 -->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/WEB-INF/views/"></property>
            <property name="suffix" value=".jsp"></property>
        </bean>
    </beans>
5、应用根目录下创建index.jsp发送请求(注意发送的请求URL必须和控制器中@RequestMapping(“/helloworld”)的URL是一样的,即为helloworld)

index.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>Insert title here</title>
</head>
<body>
    <a href="helloworld">通往SpringMVC hello world神奇之旅</a>
</body>
</html>
6、WEB-INF/views下创建hello.jsp(根据视图解析器和控制器返回的逻辑视图得出该地址、该页面名)

hello.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>Insert title here</title>
</head>
<body>
    hello world
</body>
</html>
7、客户端浏览器演示

请求

这里写图片描述

响应

这里写图片描述

8、最后看下这个简单请求响应小程序的目录框架

这里写图片描述

jar包目录

这里写图片描述

必要的jar包
  • spring-aop的jar
  • spring-beans的jar
  • spring-context的jar
  • spring-core的jar
  • spring-expression的jar
  • spring-webmvc的jar
  • spring-web的jar

工程下载

参考

《Spring IN ACTION》

《Spring MVC学习指南》

《跟开涛学SpringMVC》开源电子书

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值