`
jinnianshilongnian
  • 浏览: 21424343 次
  • 性别: Icon_minigender_1
博客专栏
5c8dac6a-21dc-3466-8abb-057664ab39c7
跟我学spring3
浏览量:2403176
D659df3e-4ad7-3b12-8b9a-1e94abd75ac3
Spring杂谈
浏览量:2996176
43989fe4-8b6b-3109-aaec-379d27dd4090
跟开涛学SpringMVC...
浏览量:5630413
1df97887-a9e1-3328-b6da-091f51f886a1
Servlet3.1规范翻...
浏览量:257187
4f347843-a078-36c1-977f-797c7fc123fc
springmvc杂谈
浏览量:1592662
22722232-95c1-34f2-b8e1-d059493d3d98
hibernate杂谈
浏览量:248795
45b32b6f-7468-3077-be40-00a5853c9a48
跟我学Shiro
浏览量:5845661
Group-logo
跟我学Nginx+Lua开...
浏览量:697478
5041f67a-12b2-30ba-814d-b55f466529d5
亿级流量网站架构核心技术
浏览量:779851
社区版块
存档分类
最新评论

5分钟构建spring web mvc REST风格HelloWorld

阅读更多

当然写本文的目的不是为了速度,只是表明现在构建一个Spring web mvc Rest风格的HelloWorld应用会很简单。不过如果看过Spring Boot这个项目,可能只需要最多3分钟就能构建一个简单的Rest风格应用。回头研究下,然后分享下。

 

我的构建环境

JDK 7

Maven 3

Servlet3容器

 

创建项目

首先使用Maven创建一个普通Maven应用即可,不必是web的。

 

添加依赖

        <!-- servlet 3 -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.0.1</version>
        </dependency>

        <!--spring context -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>4.0.0.RELEASE</version>
        </dependency>

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

        <!--jackson -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.2.3</version>
        </dependency>

 servlet3依赖scope是provided表示环境提供,然后添加spring-context-support和spring-webmvc依赖,最后用于json的jackson依赖。非常简单明了。

 

添加maven插件

为了方便测试,添加jetty的maven插件,这样直接使用mvn jetty:run即可运行。

    <build>
        <finalName>springmvc</finalName>
        <plugins>
            <plugin>
                <groupId>org.mortbay.jetty</groupId>
                <artifactId>jetty-maven-plugin</artifactId>
                <version>8.1.8.v20121106</version>
                <configuration>
                    <reload>manual</reload>
                    <webAppConfig>
                        <contextPath>/${project.build.finalName}</contextPath>
                    </webAppConfig>
                    <connectors>
                        <connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
                            <port>9080</port>
                            <!--<maxIdleTime>60000</maxIdleTime>-->
                        </connector>
                    </connectors>
                </configuration>
            </plugin>
        </plugins>
    </build>

  

实体 

package com.sishuok.entity;

import java.io.Serializable;

/**
 * <p>User: Zhang Kaitao
 * <p>Date: 13-12-19
 * <p>Version: 1.0
 */
public class User implements Serializable {
    private Long id;
    private String name;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        User user = (User) o;

        if (id != null ? !id.equals(user.id) : user.id != null) return false;

        return true;
    }

    @Override
    public int hashCode() {
        return id != null ? id.hashCode() : 0;
    }
}

 

控制器

package com.sishuok.controller;

import com.sishuok.entity.User;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

/**
 * <p>User: Zhang Kaitao
 * <p>Date: 13-12-19
 * <p>Version: 1.0
 */
@RestController
@RequestMapping("/user")
public class UserController {

    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
    public User view(@PathVariable("id") Long id) {
        User user = new User();
        user.setId(id);
        user.setName("zhang");
        return user;
    }
}

具体就不多介绍了,请参考:《Spring4新特性——Web开发的增强》和《跟我学SpringMVC 》。

 

 

SpringMVC注解风格配置

@Configuration
@EnableWebMvc
@ComponentScan
public class AppConfig {
}

具体含义请参考《Spring4新特性——Groovy Bean定义DSL》部分。

 

Servlet3容器启动初始化器

在Servlet容器启动时编程式注册Servlet

package com.sishuok;

import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.DispatcherServlet;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration;

/**
 * <p>User: Zhang Kaitao
 * <p>Date: 13-12-19
 * <p>Version: 1.0
 */
public class AppInitializer implements WebApplicationInitializer {

    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        AnnotationConfigWebApplicationContext webApplicationContext =
                new AnnotationConfigWebApplicationContext();
        webApplicationContext.register(AppConfig.class);


        DispatcherServlet dispatcherServlet = new DispatcherServlet(webApplicationContext);
        ServletRegistration.Dynamic dynamic = servletContext.addServlet("dispatcherServlet", dispatcherServlet);
        dynamic.addMapping("/");

    }
} 

具体含义请参考《跟我学Spring3》的第12章 和《Spring4新特性——Groovy Bean定义DSL》和我的github中的《servlet3-showcase》部分。 

 

然后运行 mvn jetty:run运行即可,浏览器输入如下地址即可得到我们的json数据。

http://localhost:9080/springmvc/user/1

 

参考示例的github地址:springmvc-rest-helloworld

 

非常简单的一个Rest风格的web应用就搭建完了,接下来再完善即可。

 

下一篇将介绍使用Spring Boot 2分钟构建spring mvc REST风格HelloWorld。

 

 

16
0
分享到:
评论
9 楼 石頭剪刀b 2015-11-23  
不错.已经关注.
8 楼 qxpidt 2015-07-26  
这个工程,我怎么跑不起来呢,
始终不知道是哪里加载了AppInitializer
7 楼 suansuaner 2014-07-13  
你好,按照这个做访问的时候
http://localhost:8080/study_foo1/user/1
报404
No mapping found for HTTP request with URI [/study_foo1/user/1] in DispatcherServlet with name 'dispatcherServlet'

这个是什么原因啊?
6 楼 jinnianshilongnian 2013-12-27  
cremains 写道
挺好的。顶一个。

5 楼 cremains 2013-12-27  
挺好的。顶一个。
4 楼 jinnianshilongnian 2013-12-27  
hngmduyi 写道
还在吧?这里有个springmvc rest的问题,http://www.oschina.net/question/99204_139192,请帮忙解答一下。

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
<property name="alwaysUseFullPath" value="true"></property> 
    </bean>
3 楼 jinnianshilongnian 2013-12-27  
keer2345 写道
紧跟开涛兄弟的步伐

2 楼 keer2345 2013-12-27  
紧跟开涛兄弟的步伐
1 楼 hngmduyi 2013-12-27  
还在吧?这里有个springmvc rest的问题,http://www.oschina.net/question/99204_139192,请帮忙解答一下。

相关推荐

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

    NULL 博文链接:https://jinnianshilongnian.iteye.com/blog/1997192

    Spring3MVC-REST-HelloWorld 实例简单代码

    Spring3MVC-REST-HelloWorld 实例简单代码

    Spring Web MVC入门教程

    包括:注解式开发HelloWorld、处理器定义、请求映射、REST风格支持、请求数据映射、数据绑定等诸多内容 第四章:数据类型转换 包括:简介、内建类型转换器、自定义类型转换器等 第五章:数据格式化 包括:简介、...

    spring4-mvc-docker-hello-world

    spring4-mvc-docker-hello-world Spring Mvc 4 Docker Hello世界示例,带有jsp视图和rest控制器以及自动装配服务。 乌尔 运行IT测试 mvn clean verify 作者 Juan EnriqueAlcázarSolomando-初期工作 执照 此项目...

    spring加载restful(文档+程序源码)

     本节中的例子将演示Spring 3环境的创建过程,并创建一个可以部署到Tomcat中的“Hello World”应用。然后我们再完成一个更复杂的应用来了解Spring 3 REST支持的重要概念,如多种MIME类型表示支持和JAXB支持。另外,...

    hellorest-iut:TP Spring MVC - Rest - JavaConfig IUT - 学生

    你好休息使用 Spring 4 和 Gradle 的 Hello World 应用程序。 使用./gradlew eclipse项目加载到./gradlew eclipse 使用./gradlew idea项目加载到 Intellij 使用./gradlew tomcatRun在 tomcat 上运行

    gs-rest-hateoas:构建超媒体驱动的RESTful Web服务

    本指南将引导您完成使用Spring创建“ Hello,World”超媒体驱动的REST Web服务的过程。 是REST的重要方面。 它使您可以构建使客户端和服务器在很大程度上分离并使其独立发展的服务。 为REST资源返回的表示形式不仅...

    Spring.3.x企业应用开发实战(完整版).part2

     Spring3.0引入了众多Java开发者翘首以盼的新功能和新特性,如OXM、校验及格式化框架、REST风格的Web编程模型等。这些新功能实用性强、易用性高,可大幅降低Java应用,特别是JavaWeb应用开发的难度,同时有效提升...

    Spring3.x企业应用开发实战(完整版) part1

     Spring3.0引入了众多Java开发者翘首以盼的新功能和新特性,如OXM、校验及格式化框架、REST风格的Web编程模型等。这些新功能实用性强、易用性高,可大幅降低Java应用,特别是JavaWeb应用开发的难度,同时有效提升...

    Spring 3 Reference中文

    4.8.1.1 示例:BeanPostProcessor 风格的Hello World.. 79 4.8.1.2 示例:RequiredAnnotationBeanPostProcessor 81 4.8.2 使用BeanFactoryPostProcessor 自定义配置元数据. 81 4.8.2.1 示例:...

    WebTrainingPile:Java WebApp(TRAINIDEA桩)

    路线图: 1 Hello world(简单的JSP) 2 Hello world(简单servlet) 3 Hello world(Spring MVC) 4 Rest Hello World(Spring MVC) 5 WebSocket服务6 Angular(或其他框架)前端Web应用程序。 7 WebApp的“ hello...

    spring-framework-reference-4.1.2

    3.7. General Web Improvements ............................................................................... 19 3.8. WebSocket, SockJS, and STOMP Messaging ..............................................

    spring3.1中文参考文档

    spring3.1中文参考文档,南磊翻译,现在有4章,目录如下: 第一部分 Spring framework概述.......................................................................................................................

    spring-framework-reference4.1.4

    3.7. General Web Improvements ............................................................................... 19 3.8. WebSocket, SockJS, and STOMP Messaging ..............................................

    JAVA上百实例源码以及开源项目

     Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...

    JAVA上百实例源码以及开源项目源代码

     Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...

Global site tag (gtag.js) - Google Analytics