前提:

1,已安装JDK

2, 有Intellij IDEA

3, 已安装Gradle

一分钟实现步骤:

1,mkdir Spring-MVC;cd Spring-MVC
2,gradle init
3,edit build.gradle file

/*
* This build file was auto generated by running the Gradle 'init' task
* by 'Administrator' at '16-10-2 下午8:42' with Gradle 3.1
*
* This generated file contains a commented-out sample Java project to get you started.
* For more details take a look at the Java Quickstart chapter in the Gradle
* user guide available at https://docs.gradle.org/3.1/userguide/tutorial_java_projects.html
*/ buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'org.akhikhl.gretty:gretty:+'
}
} ext {
springVersion = '4.3.3.RELEASE'
} //apply from: 'https://raw.github.com/akhikhl/gretty/master/pluginScripts/gretty.plugin'
apply plugin: 'org.akhikhl.gretty' apply plugin: 'java'
apply plugin: 'war'
apply plugin: 'eclipse'
apply plugin: 'idea' // In this section you declare where to find the dependencies of your project
repositories {
// Use 'jcenter' for resolving your dependencies.
// You can declare any Maven/Ivy/file repository here.
jcenter()
mavenCentral()
maven { url 'http://repo.spring.io/release' }
} // In this section you declare the dependencies for your production and test code
dependencies {
//core spring
compile ("org.springframework:spring-context:$springVersion")
compile ("org.springframework:spring-core:$springVersion")
compile ("org.springframework:spring-webmvc:$springVersion") // The production code uses the SLF4J logging API at compile time
compile ("org.slf4j:slf4j-api:1.7.21") // Declare the dependency for your favourite test framework you want to use in your tests.
// TestNG is also supported by the Gradle Test task. Just change the
// testCompile dependency to testCompile 'org.testng:testng:6.8.1' and add
// 'test.useTestNG()' to your build script.
testCompile ("junit:junit:4.12")
}

build gradle

4,mkdir src\main\java ; mkdir src\main\resources ; mkdir src\main\webapp
 mkdir src\main\webapp\WEB-INF
 mkdir src\test\java ; mkdir src\test\resources
5,将项目导入idea,因为gradlew idea这个命令会生成一些多余的文件,不喜欢垃圾多余的东西,故直接导入

6,Spring MVC本质上就是Servlet, 所以需要定义一个web.xml和一个Spring MVC的配置文件,在WEB-INF下面添加web.xml和spring-mvc-servlet.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_1.xsd"> <servlet>
<servlet-name>spring-mvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring-mvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>

web.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"
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.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <mvc:annotation-driven></mvc:annotation-driven>
<context:component-scan base-package="org.springframework.samples"/>
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
</bean> </beans>

spring-mvc-servlet.xml

关于Spring MVC的配置文件,最简的配置是申明p,context,mvc命名空间即可。上面p其实是没有用到的。

7,根据第6步的spring-mvc-servlet.xml的配置,还需要在WEB-INF文件夹下面创建一个views文件夹,并且新建文件home.jsp

<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2016/10/2 0002
Time: 21:53
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Home</title>
</head>
<body>
<h1>
Hello world!
</h1> <P> The time on the server is ${serverTime}. </P>
</body>
</html>

home.jsp

8,HomeController.java

package org.springframework.samples;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod; import java.text.DateFormat;
import java.util.Date;
import java.util.Locale; /**
* Created by Administrator on 2016/10/2 0002.
*/
@Controller
public class HomeController {
private static final Logger logger = LoggerFactory.getLogger(HomeController.class); /**
* . * Simply selects the home view to render by returning its name.
* .
*/
@RequestMapping(value = "/", method = RequestMethod.GET)
public String home(Locale locale, Model model) {
logger.info("Welcome home! The client locale is {}.", locale); Date date = new Date();
DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale); String formattedDate = dateFormat.format(date); model.addAttribute("serverTime", formattedDate); return "home";
} }

HomeController.java

9,

gradlew tomcatRun

10, http://localhost:8080/Spring-MVC/

11,理论延伸,Spring MVC的Servlet一共有三个层次

  HttpServletBean,直接继承于Java的HttpServlet, 将Servlet中配置的参数设置到相应的属性,并不参与实际请求的处理

  FrameworkServlet,初始化WebApplicationContext,将不同类型的请求合并到processRequest方法中统一处理

  DispatcherServlet,初始化自身的9个组件,主要将请求交给doDispatch方法具体处理。哪9大组件呢?他们是:

    HandlerMapping,根据request找到相应的Handler(就是常说的Controller)和Interceptors.

    HandlerAdapter,共有3个方法,supports判断是否可以使用某Handler,handler方法具体用Handler干活,getLastModified是用来获取资源的Last Modified.

    HandlerExceptionResolver,根据异常设置ModelAndView.并转交给render方法进行渲染。

    ViewResolver,将String类型的视图名和Locale解析为View类型的视图

    RequestToViewNameTranslator,根据request获取到视图名,因为有些handler并没有返回视图名的。我想这个是实现404的最好组件了,一个spring mvc容器里只能配置一个。

    LocaleResolver,根据request解析出Locale

    ThemeResolver,根据request解析出主题名

    MultipartResolver,用于处理上传文件,将普通的request转换成MultipartHttpServletRequest

    FlashMapManager,用于管理FlashMap的,而FlashaMap主要用于redirect中传递参数

Java配置

按Spring的发展趋势,现在推荐使用Java配置,下面就让我们来抛弃xml而拥抱Java配置吧

前面1-5步一样的。从第6步开始开始改变

6, 要抛弃web.xml,必须要在支持Servlet3.0+的服务器才行,实现只需扩展一下

AbstractAnnotationConfigDispatcherServletInitializer
public class SampleWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class<?>[0];
} @Override
protected Class<?>[] getServletConfigClasses() {
return new Class<?>[]{SpringMVCConfig.class};
} @Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
}

SampleWebAppInitializer

接下来使用IDEA的Alter +Enter, 自动生成SpringMVCConfig.java

@Configuration
@EnableWebMvc
@ComponentScan("org.springframework.samples.controllers")
public class SpringMVCConfig extends WebMvcConfigurerAdapter {
@Bean
public ViewResolver viewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
;
resolver.setExposeContextBeansAsAttributes(true);
return resolver;
} @Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
}

SpringMVCConfig

7, 可以复制xml版本的jsp

8,根据SpringMVCConfig.java里的componentscan里的约定,我们将HomeController放在controllers下面。内容同xml版本

9,测试

Gradle一分钟实现Spring-MVC的更多相关文章

  1. Spring Boot——2分钟构建spring web mvc REST风格HelloWorld

    之前有一篇<5分钟构建spring web mvc REST风格HelloWorld>介绍了普通方式开发spring web mvc web service.接下来看看使用spring b ...

  2. [转]Spring Boot——2分钟构建spring web mvc REST风格HelloWorld

    Spring Boot——2分钟构建spring web mvc REST风格HelloWorld http://projects.spring.io/spring-boot/ http://spri ...

  3. 使用IDEA和gradle搭建Spring MVC和MyBatis开发环境

    1. 概述 Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具. 它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XML的各种繁琐 ...

  4. Java 本地开发环境搭建(框架采用 Spring+Spring MVC+Hibernate+Jsp+Gradle+tomcat+mysql5.6)

    项目搭建采用技术栈为:Spring+Spring MVC+Hibernate+Jsp+Gradle+tomcat+mysql5.6 搭建环境文档目录结构说明: 使用Intellj Idea 搭建项目过 ...

  5. Spring学习(二)——使用Gradle构建一个简单的Spring MVC Web应用程序

    1.新建一个Gradle工程(Project) 在新建工程窗口的左侧中选择 [Gradle],右侧保持默认选择,点击next,模块命名为VelocityDemo. 2.在该工程下新建一个 module ...

  6. 2分钟在eclipse下使用SpringBoot搭建Spring MVC的WEB项目

    1. 首先用eclipse创建一个maven工程, 普通maven工程即可 2. 修改pom如下: <?xml version="1.0" encoding="UT ...

  7. 我是如何进行Spring MVC文档翻译项目的环境搭建、项目管理及自动化构建工作的

    感兴趣的同学可以关注这个翻译项目 . 我的博客原文 和 我的Github 前段时间翻译的Spring MVC官方文档完成了第一稿,相关的文章和仓库可以点击以下链接.这篇文章,主要是总结一下这个翻译项目 ...

  8. springboot Serving Web Content with Spring MVC

    Serving Web Content with Spring MVC This guide walks you through the process of creating a "hel ...

  9. 准备学习Spring MVC

    这一系列笔记将带你一步一步的进入Spring MVC,高手勿喷. 首先你得安装以下的工具: JDK,虽然JDK8已经发布了一段时间了,但是由于我们并不会使用到里面的新特性,所以JDK6以上版本皆可以( ...

随机推荐

  1. HID燈是什么及其工作原理

    HID為HighIntensityDischarge的縮寫,即高壓氣體放電燈,它發光的原理是將12V電壓增壓至23000V的超高電壓,激穿填充在石英管的氙氣,使它發光.然后再將電壓轉成85V左右,穩定 ...

  2. KeilMDK4.7a下载地址/中文乱码解决/自动关联设置

    推荐地址1,速度更快(确定为4.7a版本,且含注册机):1.http://www.mcuzone.com/software/keil/MDK470.RAR 2.http://kuai.xunlei.c ...

  3. Windows8.1 preview硬盘安装(图解)

    本人小本系统是win7 32位的,想要装win8 64位 ,想直接镜像安装不可能,因为位数不同.U盘只有2G ,显然也放不下3.6G的win8系统.借助NT6 HDD Installer,可以在本地硬 ...

  4. logstash (?m) 经典例子

    在和 codec/multiline 搭配使用的时候,需要注意一个问题,grok 正则和普通正则一样,默认是不支持匹配回车换行的.就像你需要 =~ //m 一样也需要单独指定,具体写法是在表达式开始位 ...

  5. POJ2632 Crashing Robots(模拟)

    题目链接. 分析: 虽说是简单的模拟,却调试了很长时间. 调试这么长时间总结来的经验: 1.坐标系要和题目建的一样,要不就会有各种麻烦. 2.在向前移动过程中碰到其他的机器人也不行,这个题目说啦:a ...

  6. datagridview的数据源的操作

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  7. 基于用户映射的CAS单点登录系统设计与实现

    http://wenku.baidu.com/link?url=wAZR9AMkAAcOt5J_SfroXqU5IM5RhNWaP0-YUwvZT94761Qq1-7pKAt6ngOX1zG4tYec ...

  8. UVALive 4957 Fake scoreboard

    题意就是有n个队伍和m个题目 给出了每个队伍解决的题目数量 每个题目也给出了被解决的次数 然后求一个方阵. N,Y表示每个队伍是否过了哪个题目. 要求字典序最小. 这题给人的第一反应就是网络流. 虽然 ...

  9. DAY TRADER

    日内交易是一种交易模式,英文名字是daytrade,主要是指持仓时间短,不留过夜持仓的交易方式.日内交易捕捉入市后能够马上脱离入市成本的交易机会,入市之后如果不能马上获利,就准备迅速离场.因为这种交易 ...

  10. Linq 语法举例

    1.简单的linq语法 //1 var ss = from r in db.Am_recProScheme select r; //2 var ss1 = db.Am_recProScheme; // ...