【Java】Gradle构建SpringMVC框架实现App请求接口(图文超详细)

来源:互联网 发布:王砚辉 知乎 编辑:程序博客网 时间:2024/06/08 01:17

Gradle构建SpringMVC框架实现App请求接口

最近这段时间忙着在找工作,面试不是很多。闲着没什么事干就想着把积累的一点后台的知识理一理,虽然不一定非得做这方面的工作,但是以后的工作中,遇到一些问题可以快速的定位到。接触后台的时间很短,在上一家公司的时候也做过一些给App写接口的工作。后台那边的框架也很多都不懂,就是简单的依葫芦画瓢。遇到问题也有后台小哥帮忙解决。接下来,我就用我了解的一点后台知识,实现一个接口供App调用。

环境描述

操作系统:MacOS
编译器:Intellij IDEA 2016
Java运行环境,Tomcat
依赖管理工具:Gradle
基础框架:SpringMVC

Gradle构建springMVC框架

打开我们的编译器,创建一个新的工程,选择Gradle,勾选Web,如下图所示:

创建工程

点击Next,填写GroupId和ArtfactId(GroupId:项目的唯一标识,ArtfactId:一般为项目名称),如图:

创建工程

依然Next,配置一些Gradle的相关信息,具体的我不是很了解,这里选择的是会自己去下载相应的Gradle版本。当然也可以使用本地Gradle,建议先下载到本地,不然就自己准备梯子。这个下载速度真的感人。

创建工程

点击Next,项目创建完成。基础的工程目录结构如下图:


基础工程目录

接下来配置Tomcat服务器,不知道怎么描述,我们还是看图说话吧,编译器右上角如图的地方,点击一个Tomcat服务。


配置Tomcat服务器

左上角的添加按钮点击添加一个Tomcat Server 选择Local


添加Tomcat Server

输入一个Name,我们发现右下角有一个错误提示,是让你配置一个路径,点击Fix随便选一个就好了。然后点击Apply,再点击OK。这样,我们的Tomcat Server就配置完成了。还是图:


配置Tomcat Server

如果不出什么意外的话,程序可以跑起来了。为了看效果,接下来我们到src目录下的main目录下的webapp目录中找到index.jsp文件,在body中随意的输入一点文字。


修改index.jsp文件


运行程序,如果可以看到默认的jsp页面,表示一切到这里都很正常。


运行成功的jsp页面

到这里,基础的工程搭建出来了,接着呢,我们利用Gradle导入SpringMVC的框架

打开工程目录下的build.gradle文件,在dependencies中引入框架。这个我觉得就相当于iOS开发中的cococaPods。一个构建和管理三方依赖的插件。


build.gradle
compile 'org.springframework:spring-webmvc:4.3.6.RELEASE'

这里会自动的去下载框架需要的jar包,这里还是要会科学上网。不然这个下载速度真不是一个慢字能够描述的。修改了这个文件之后,就会自动去下载了。有时候网不好的话,会失败的。失败之后可以在如上图所示的最右边的侧边栏中选中Gradle,然后点击刷新就好了。

SpringMVC引入完成,接着我们去java目录下建一个包,接着新建一个类出来。


新建一个包

在刚刚建的包下建一个DemoController的类


接下来在DemoController中简单的写几行代码

@Controller@RequestMapping("test")public class DemoController {    @RequestMapping(value = "/hello", method = RequestMethod.GET)    @ResponseBody    public Map hello() {        Map map = new HashMap();        map.put("msg", "请求成功");        map.put("data", "浪漫恋星空");        return map;    }}

注解的意思呢,我也解释不清楚,只知道这样写。先把这些东西知道怎么用了再慢慢的去研究下。

修改了代码,我们重新启动一下服务器。还是可以正常的看到我们刚刚的页面,接下来在地址栏输入下面的地址,当然这个地址是我Demo中随意写的。它的构成也很简单,就是本机的地址加上@RequestMapping里面的东西拼接起来的。

http://localhost:8080/test/hello

然后,开心的敲了一下回车。我们就可以得到我们的数据了。等等,这么简单?看图:


错误页面


喜闻乐见,说好的数据呢。习惯了Xcode崩溃在main的地方,到这里,是不是感觉一脸懵逼?别急,刚刚我们虽然引入了SpringMVC框架,但是还需要在项目中作一些配置。感觉后台的东西真的太杂了,各种配置工程,反正我是很不习惯。打开Project Structure(编译器界面的右上角的地方),找到Web Gradle模块,并点击Deployment Descriptors栏右侧的加号添加web.xml文件。如图:


创建web.xml文件


打开刚刚创建的web.xml文件,在该文件中添加如下映射

<servlet>    <servlet-name>dispatcher</servlet-name>    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class></servlet><servlet-mapping>    <servlet-name>dispatcher</servlet-name>    <url-pattern>/</url-pattern></servlet-mapping>

再次重启服务器,在地址栏输入前面的地址。然后我发现还是一个404的浏览错误,因为自己对于后台基本的配置不是很了解,在这里倒腾了很久。

刚刚我们在建立web.xml的时候是默认的路径,我这边是在.idea目录的modules目录的WEB-INF下,而这个路径查资料说是必须在webapp目录下的WEB-INF中,然而我初始的工程中没有这个文件。没有怎么办,new一个出来就完事了。创建好了之后把我们之前的web.xml文件拖到webapp目录的WEB-INF下,重启服务器。还是刚刚的地址。tomcat返回异常信息,nested exception is java.io.FileNotFoundException: Could not open ServletContext resource [/WEB-INF/dispatcher-servlet.xml]。这是因为刚刚我们在web.xml中配置了一个dispatcher,我们需要同时给这个dispatcher创建一个dispatcher-servlet.xml,还是在webapp目录的WEB-INF中。

注意:dispatcher-servlet.xml这是一个Spring Config文件,它的名字是有规定的,就是刚刚在web.xml中配置的servlet-name-servlet.xml。


创建Spring Config文件


创建好这个文件之后,在dispatcher-servlet.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: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">    <context:component-scan base-package="cn.iotguard.demo.controller"></context:component-scan>    <mvc:annotation-driven></mvc:annotation-driven></beans>

再次重启服务器,地址栏输入最开的地址。


错误信息

这次又出现了如图的错误信息,大致可以知道这是一个跟数据类型相关的报错,因为我们App端拿到服务器的数据通常都是json格式的。而我们在代码中是直接返回的一个map,@ResponseBody这个注解是SpringMVC框架中的,通过它可以自动转换成json数据格式。通过这些知识,然后百度关键字,SpringMVC整合json。然后发现,还需要给框架整合一个json解析的jar包,这里就使用fastjson。修改dispatcher-servlet.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: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">    <!--注意:这里的包的名字要填自己的-->    <context:component-scan base-package="com.xingkong.controller"></context:component-scan>    <mvc:annotation-driven>        <!--配置@ResponseBody由fastjson解析-->        <mvc:message-converters>            <bean class="org.springframework.http.converter.StringHttpMessageConverter">                <property name="defaultCharset" value="UTF-8"/>            </bean>            <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter4"/>        </mvc:message-converters>    </mvc:annotation-driven>    <mvc:default-servlet-handler/>    <bean id="fastJsonpResponseBodyAdvice" class="com.alibaba.fastjson.support.spring.FastJsonpResponseBodyAdvice">        <constructor-arg>            <list>                <value>callback</value>                <value>jsonp</value>            </list>        </constructor-arg>    </bean></beans>

最后别忘了添加fastjson的依赖。修改build.gradle文件。

compile group: 'com.alibaba', name: 'fastjson', version: '1.2.28'

这里给大家一个仓库网站,在这个网站可以找到很多我们需要的jar包的gradle依赖的添加。

http://www.mvnrepository.com/

添加完依赖之后,重启服务器。接下来干什么不用再说了吧,都要说哭了。

终于等到你。。。还好我没。。。(额。。。有点偏了! )!


正确请求到的数据

倒腾这么久,终于还是出来了是吧。现在打开我们的Xcode,随意做一个网络请求。看看能不能把我们的数据请求回来。

[ZZTNetworkingManager GET:@"http://localhost:8080/test/hello" parameters:nil success:^(id responseObject) {        NSLog(@"%@",responseObject);    } failure:^(NSError *error) {        NSLog(@"%@",error);    }];

这里就是随便拿了一个项目中的网络请求方法,封装的AF,懒得重新去建工程pod三方,这里就偷个懒。运行程序,心态瞬间就炸了,请求失败了。报错如下:

{Error Domain=com.alamofire.error.serialization.response Code=-1011 "Request failed: internal server error (500)

看到这个报错大家应该都不会很陌生吧,刚刚开始工作的iOS开发,如果遇到一个也是第一次给iOS端写接口的后台小兄弟,然后两个就懵逼了。这里实际上就算iOS端和后台没有约定contentType,正经一点的公司这些东西可能是老大们约定好了的。如果遇到都是新手的话,这是必踩的坑。

修改DemoController中的代码如下:

@Controller@RequestMapping("test")public class DemoController {    @RequestMapping(value = "/hello", method = RequestMethod.GET, produces="application/json;charset=UTF-8")    @ResponseBody    public Map hello() {        Map map = new HashMap();        map.put("msg", "请求成功");        map.put("data", "浪漫恋星空");        return map;    }}

在@RequestMapping中添加一个produces="application/json;charset=UTF-8"就好了。

再次请求接口,可以看到控制台返回了请求到的数据。

[00:02:00] __31-[ZZTHotController viewDidLoad]_block_invoke [第35行] {  "msg" : "请求成功",  "data" : "浪漫恋星空"}

以上就是Gradle构建SpringMVC框架实现App请求接口的内容介绍。当然,这是一些后台很基础的试用。稍微有一点后台基础的人都觉得这个很简单,虽然我作为一个移动端开发,但是我也有一颗后台的心好吧。感兴趣的移动端朋友可以试试写着玩。无聊了再学点数据库设计,再懂一些连接池技术,sql相信都会一些。搞不好哪天就自己倒腾一个像模像样的App出来。从设计到App再到后台,一人包办。想想还有点小激动对吧?

阅读全文
0 0
原创粉丝点击