文档章节

SpringMVC4.x源码分析(一):SpringMVC入门例子

祖大俊
 祖大俊
发布于 2018/06/09 09:18
字数 576
阅读 639
收藏 2

Spring+SpringMVC+MyBatis简称SSM,它们是如此重要,分析SpringMVC底层源码实现原理,绝对物有所值,对Spring Boot及Spring Cloud的学习也大有裨益。

IDE工具:IntelliJ IDEA 2018

Java:JDK8

Web容器:Tomcat8.5

首先建立一个Maven Web工程,并在pom.xml内加入SpringMVC和servlet-api依赖包。

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.0.1</version>
    <scope>compile</scope>
</dependency>

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>4.3.17.RELEASE</version>
</dependency>

编写web.xml文件。

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>
  <servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/config/springmvc-config.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  
  <servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
  
  <welcome-file-list>
    <welcome-file>index</welcome-file>
  </welcome-file-list>
</web-app>

编写com.spring.controllor.HelloControllor。

@Controller
public class HelloControllor {

    @RequestMapping(path = {"/index", "/"})
    public String index(Model model) {
        System.out.println("Hello controllor invoked");
        model.addAttribute("msg", "Hello controllor!");
        return "hello";
    }
}

编写SpringMVC配置文件:WEB-INF/config/springmvc-config.xml。

<?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:p="http://www.springframework.org/schema/p"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:task="http://www.springframework.org/schema/task"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-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/task
        http://www.springframework.org/schema/task/spring-task-4.2.xsd">

    <context:component-scan base-package="com.spring"/>
    <mvc:annotation-driven />
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/" />
        <property name="suffix" value=".jsp" />
    </bean>
</beans>

return "hello"代表中缀,viewResolver使用前缀(/WEB-INF/jsp/)+中缀(hello)+后缀(.jsp)=/WEB-INF/jsp/hello.jsp来代表目标视图页面。

编写WEB-INF/jsp/hello.jsp文件。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isELIgnored="false"%>
<html>
<head>
    <title>Title</title>
</head>
<body>
    ${msg}
</body>
</html>

在IntelliJ IDEA中的右上角部署你的应用。

启动Tomcat应用,并在地址栏里输入http://localhost:8080或者http://localhost:8080/index。

由于我们配置映射地址是两个【@RequestMapping(path = {"/index", "/"})】,所以/和/index都访问的是同一个com.spring.controllor.HelloControllor#index()方法,该方法称之为HandlerMethod。

model.addAttribute("msg", "Hello controllor!"),可以通过jsp页面的EL表达式${msg}来获取。如果你的${msg}表达式不生效,那么记得在jsp中启用EL表达式功能:<%@ page isELIgnored="false"%>

model.addAttribute("msg", "Hello controllor!"),底层其实是request.setAttribute("msg", "Hello controllor!"),所以页面使用${msg}可以取到它的值。

后续我们将根据这个基础入门例子作为入口,来分析SpringMVC的底层实现原理。

原文出处:http://my.oschina.net/zudajun

© 著作权归作者所有

祖大俊
粉丝 797
博文 32
码字总数 52477
作品 0
昌平
私信 提问
Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密...

小致Daddy
2018/08/03
19.3K
1
spring 源码分析(1)-xml文件解析

我们在最开始接触spring的时候,看到不少书spring入门的例子如下 上面这个例子第一行是表示如何初始化一个spring 容器,第二表示如何从一个已经初始化后的spring容器中按bean id得到这个bea...

Mr_zebra
2018/07/30
19
0
Spring Boot实战与原理分析

Spring Boot实战与原理分析 1:Spring Boot概述与课程概要介绍 2:Spring4 快速入门 3:Spring4 扩展分析(一) 4:Spring4 扩展分析(二) 5:Spring Boot 快速入门 6:Spring Boot 配置分析...

刘宗泽
2018/06/26
0
0
Spring Boot [Hello World]

导读: 通过上篇文章, 我们已经了解到了 Spring Boot 作为一个Spring的脚手架, 其核心思想便是约定大于配置,通过一层层的封装让我们可以在最短的时间内搭建一个web项目,从繁琐的配置中走...

yangrd
2018/08/27
0
0
微服务 SpringBoot 2.0(三):启动剖析之@SpringBootApplication

我原以为就一个注解,背后竟然还有3个 —— Java面试必修 引言 前面两章我们先后认识了SpringBoot和它的极简配置,为新手入门的学习降低了门槛,会基本的使用后,接下来我们将进一步认识Spr...

阿郎_
2018/09/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Cloud Alibaba 实战(二) - 关于Spring Boot你不可不知道的实情

0 相关源码 1 什么是Spring Boot 一个快速开发的脚手架 作用 快速创建独立的、生产级的基于Spring的应用程序 特性 无需部署WAR文件 提供starter简化配置 尽可能自动配置Spring以及第三方库 ...

JavaEdge
今天
7
0
TensorFlow 机器学习秘籍中文第二版(初稿)

TensorFlow 入门 介绍 TensorFlow 如何工作 声明变量和张量 使用占位符和变量 使用矩阵 声明操作符 实现激活函数 使用数据源 其他资源 TensorFlow 的方式 介绍 计算图中的操作 对嵌套操作分层...

ApacheCN_飞龙
今天
7
0
五、Java设计模式之迪米特原则

定义:一个对象应该对其他对象保持最小的了解,又叫最小知道原则 尽量降低类与类之间的耦合 优点:降低类之间的耦合 强调只和朋友交流,不和陌生人说话 朋友:出现在成员变量、方法的输入、输...

东风破2019
昨天
23
0
jvm虚拟机结构

1:jvm可操作数据类型分为原始类型和引用类型,因此存在原始值和引用值被应用在赋值,参数,返回和运算操作中,jvm希望在运行时 明确变量的类型,即编译器编译成class文件需要对变量进行类型...

xpp_ba
昨天
5
0
聊聊nacos Service的processClientBeat

序 本文主要研究一下nacos Service的processClientBeat Service.processClientBeat nacos-1.1.3/naming/src/main/java/com/alibaba/nacos/naming/core/Service.java public class Service ex......

go4it
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部