继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

(简单易懂详细)使用Spring MVC搭建Hello world

慕标5832272
关注TA
已关注
手记 1232
粉丝 229
获赞 1001

Spring MVC 服务流程图

webp

Spring MVC 服务流程

Spring MVC组件和流程

首先,在使用Spring MVC之前,我们要明确Spring MVC 是一种基于Servlet的技术,它提供了核心控制器DispatcherServlet和相关组件,而Spring MVC 是围绕着DispatcherServlet来工作的.

然后,我们来简单解释一下上面这个流程图:
① 用户发出请求
② DispatcherServlet 首先通过请求和事先解析好的HandlerMapping配置,找到对应的处理器(Handler),开始准备运行处理器和拦截器组成的执行链
③ 运行处理器我们需要一个对应的环境,这时候就有了一个适配器(HandlerAdapter),通过这个适配器来运行步骤②的执行链
④ 运行的处理器(Handler)包括控制器(Controller)的内容和其他增强功能,处理完毕之后,处理器返回模型和视图(ModelAndView)给核心控制器DispatcherServlet
⑤ 核心控制器DispatcherServlet将对应是视图信息传递给视图解析器(ViewResolver),注意,是否需要解析取决于是否使用逻辑视图,如果是逻辑视图,视图解析器就会去解析它,然后把模型渲染到视图中,最后响应用户的请求,如果不是逻辑视图,则不会处理,而直接通过视图渲染数据.

搭建Hello World

如果没有经过一个实例的解释介绍的话,单纯看上面的理论知识是比较抽象难懂的

现在,我们通过搭建Hello World来进一步了解Spring MVC 的运行过程
完整的项目目录如下:


webp

项目目录

为了防止用户直接通过URI访问,一般把JSP文件放在/WEB-INF目录下
作为Spring MVC入门,先以XML 配置为例

首先,配置web.xml

<web-app>
    <display-name>Archetype Created Web Application</display-name>

    <!-- 配置Spring IoC配置文件的路径 -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/applicationContext.xml</param-value>
    </context-param>

    <!-- 配置ContextLoaderListener用以初始化Spring IoC 容器 -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <!-- 配置DispatcherServlet -->
    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!-- 使得dipatcher 在服务器启动时就初始化 -->
        <load-on-startup>2</load-on-startup>
    </servlet>

    <!-- Servlet拦截配置 -->
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping></web-app>

解释一下配置内容
①系统变量contextConfigLocation:它会告诉Spring MVC其Spring IoC的配置文件位置,默认为/WEB-INF/applicationContext.xml
②ContextLoaderListener实现接口ServletContextListener,其作用是在Web工程初始化之前,它先完成对Spring IoC容器的初始化,也可以在Web工程关闭知识完成对Spring IoC容器的资源释放.
③配置核心控制器DispatcherServlet,首先需要配置servlet-name为dispatcher(可自定义名称),此处有一点需值得注意的地方,这里的dispatcher需要有一个/WEB-INF/dispatcher-servlet.xml文件与之对应,即/WEB-INF/servlet-name-servlet.xml,通过load-on-startup来配置在服务器其中是便初始化它.
④配置DisparcherServlet拦截以后缀"do"结束的请求

其次便是applicationContext.xml,该文件主要用于装配Spring Bean,由于只是输出一个hello world,此处便不作配置

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

接下来便是配置dispatcher-servlet.xml

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

    <!-- 使用注解来驱动 -->
    <mvc:annotation-driven />
    
    <!-- 定义扫描装载的包 -->
    <context:component-scan base-package="controller"/>
    
    <!-- 定义视图解析器 -->
    <!-- 找到Web工程下/WEB-INF/views文件夹,且文件结尾为jsp文件作为映射 -->
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/WEB-INF/views/" p:suffix=".jsp"/></beans>

这里的配置也比较简单:
①<mvc:annotation-driven/>表示使用注解来驱动Spring MVC
②context:component-scan 定义所扫描的包,用以加载对应的控制器和其他一些组件
③定义视图解析器InternalResourceViewResolver,这样视图就知道去对应的文件夹/WEB-INF/views下载找到对应的JSP 文件作为视图响应用户的请求

然后,开发一个简单的控制器

package controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.servlet.ModelAndView;//该注解表示它是一个控制器@Controller("MyController")//表明当请求的URI在/wt下的时候才有该控制器响应@RequestMapping("/wt")public class MyController {//表面URI 是在/index的时候该方法才请求
    @RequestMapping("/index")    public ModelAndView index() {        // 模型和视图
        ModelAndView mv = new ModelAndView();        // 视图逻辑名称为index
        mv.setViewName("index");        // 返回模型和视图
        return mv;
    }
}

解释一下:
①注解@Controller是表面该类为一个控制器,Spring MVC 扫描的时候会把它当做控制器加载进来
②注解@RequestMapping指定了对应的请求的URI,Spring MVC 会在初始化的时候把这些信息解析存放起来,于是便有了处理器映射(HandlerMapping),当发生请求的时候,Spring MVC 就会去使用这些信息去找到对应的控制器Controller来提供服务
③模型与视图ModelAndView,在方法中,把视图的名称定义为index,而在dispatcher-servlet.xml文件中,我们配置了前缀/WEB-INF/views,后缀.jsp,然后再加上视图的逻辑名称index,便有了路径/WEB-INF/views/index.jsp
④注解@RequestMapping,指定URI 在指定名称之下才能请求

最后,我们再来看一下index.jsp的代码

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%><!DOCTYPE html><html><head><meta charset="UTF-8"><title>Spring MVC</title></head><body>
    <h1>Hello World</h1></body></html>

好了,大功告成,现在可以运行tomcat,输入网址http://localhost:8080/webmvc/wt/index.do便可以验证输出了

webp



作者:wtbook
链接:https://www.jianshu.com/p/51ef3ec03b47


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP