[4]第一个接口-学Java的iOS开发者

本次学习我们有两个目标

  1. 完善SpringMVC框架
  2. 写出来第一个接口并访问

完善SpringMVC框架

上次我们引入了最基本的SpringMVC框架的依赖,但一个依赖是远远不够的,SpringMVC有一系列框架,各司其职,下面我们就开始吧,需要什么引什么,让我带你一步一步学习SpringMVC框架

  1. 首先创建文件结构,我们的先不使用项目间互相依赖,先使用一个项目多个文件夹分结构。主要结构如下


    主要结构
  2. 是不是一下看到太多东西无法接受,别慌,这只是个总揽,创建完后的效果。现在我们才真正开始创建了。如果接上篇文章的话,你现在的目录应该是这样的


    原始目录
  3. 首先,我们在main文件夹下创建一个Class文件夹,用于存放我们的源码,名字可以随便起哈。然后再在Class文件夹下创建5个文件夹,分别是AopBeanControllerDaoService

  • Aop,是SpringMVC中的切面,面向切面编程嘛,非侵入式的代码。
  • Bean,中主要放的是数据模型,具体和Dao层和Service层交互。
  • Controller,控制器,抛去Aop不说,Controller是跟页面最近的一层,数据进入Controller然后由Controller调用Service完成业务逻辑操作,将数据返回给页面展示。Controller在整个流程中起着总管的作用,要不能叫控制器嘛。
  • Dao,Dao层有两个方面,1. 跟数据库和模型组建映射(Mapper),2. 映射出方法跟Service做交互。Dao层可以理解为由一个一个的映射组成,这个映射一方面从数据库查数据映射至Bean中也就是模型中,一方面给Service出接口供Service调用。
  • Service,服务,真正处理业务逻辑的类,Controller调用Service,Service调用Dao获取和操作数据,完成后返回给Controller。


    创建文件夹
  1. 创建完后Class文件夹没有任何属性,我们这里放的是源码,所以需要设置一下,打开项目设置->Module->JiaoRiBao->右键点击Class->选择Sources然后OK即可。这样就在文件夹里就可以创建java文件了


    设置源码文件夹
  2. 首先我们当然先要搞入口的控制器咯,在Controller文件夹里创建一个java类,类名就叫BaseController吧,然后再在同一位置创建一个UserController继承与BaseController,这个控制器我们就用来做用户相关的操作


    创建java类
  3. 有学过Servlet的小伙伴此时应该会说,是不是忘了什么?对了,需要在web.xml中配置控制器才能访问,但我们用的是SpringMVC当然要用简便方法来操作咯,于是我们就要学习SpringMVC的第一个注解了@Controller这个注解是告诉Spring的扫描器说这是一个Spring的控制器,不注解的话需要在web.xml中注册这个控制器才行。

  4. 好了,开始操作。由于@Controller在spring-context库里所以我们要在maven里加一个依赖加。
    打开pom.xml,加之前我们先在properties标签里添加一个<spring.version>5.1.7.RELEASE</spring.version>用于统一所有的spring库版本,然后加入以下依赖

  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-beans</artifactId>
    <version>${spring.version}</version>
    <scope>compile</scope>
  </dependency>

下图的${spring.version}对应刚添加的<spring.version>5.1.7.RELEASE</spring.version>这样所有spring库都用这个版本,方便统一操作,添加好以后更新maven,打开BaseController,在类的声明上方添加@Controller就可以自动提示了。同样的,UserController上也加入该注解

spring-context依赖

自动提示

@Controller

8.好,接下来再来认识一个注解@RequestMapping这个注解是声明路径用的,可以看到我图中是这样写的@RequestMapping("/user"),这样当我访问这个控制器内的方法时就要用localhost:8080/user/xxx.xx路径了

@RequestMapping

  1. 接下来再加一个注解@ResponseBody这个注解主要是用来让该Controller中方法的返回值返回到页面上

    @ResponseBody

  2. 我们先写一个登陆方法吧声明一个返回值是String入参是HttpServletRequest request新手嘛,暂时先按这样固定的写。添加一个这样的方法,方法这里再加一个@RequestMapping声明了路径"/login",访问的时候要使用localhost:8080/user/login访问到此接口。

    @RequestMapping("/login")
    String userLogin(HttpServletRequest request) {
        HashMap map = new HashMap();
        map.put("phone", request.getParameter("phone"));
        map.put("pass", request.getParameter("pass"));

        return "";
    }
登陆方法
  1. 这里我直接在接口里写了一个逻辑,就是接受phone和pass两个参数,然后返回到页面里,当然要转成json字符串返回咯,我推荐使用阿里爸爸的fastjson框架,挺方便的,打开pom.xml,加入以下依赖,更新maven
    <!-- json -->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>1.2.23</version>
    </dependency>
  1. 继续修改登录逻辑,将转json加入进去,返回json字符串到页面


    添加fastjson

    转换json
  2. 接口出好了,访问一下。果然不通😂。原因是web.xml还没有配置,SpringMVC框架还没形成闭环,记不记得@Controller,要使这个注解生效还要配置一下spring-mvc库和web.xml

    404

  3. 打开pom.xml配置spring-mvc库,更新maven,是不是都轻车熟路了……

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>${spring.version}</version>
    </dependency>
添加spring-mvc
  1. 接下来是重点操作咯,注意听讲,敲黑板。在webapp文件夹下创建一个SpringMVC文件夹(名字随意,方便归纳),在SpringMVC文件夹下右键->XML Configuration File->Spring Config,创建一个spring-mvc的配置文件,名字也可以随意起。完后在spring-mvc.xml加入以下内容,base-package对应的是你控制器所在的文件夹
<context:component-scan base-package="Controller"/>
创建spring-mvc配置文件

配置内容
  1. 打开项目配置,和Class设置源码文件夹的操作一样,这次我们要将SpringMVC设置为资源文件夹,别问为啥,设就完了。


    设置资源文件夹
  2. 打开web.xml,下面开始配置web.xml,首先在<web-app>标签下加入如下内容。注意咯,一大波内容,我们慢慢消化。

  <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:spring-mvc.xml</param-value>
    </init-param>
  </servlet>

  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>*.hehe</url-pattern>
  </servlet-mapping>

讲解一下:

  • servlet标签,是servlet的设置总标签,servlet是什么东西小伙伴们可以去百度一下哈,一句两句解释不清楚。此处就不展开了,免得看着乱。
  • servlet-name标签,是此servlet的名字。
  • servlet-class标签,是指明此servlet的类,这里用spring框架中的DispatcherServlet类即可,固定这么写就行
  • init-param标签,字面意思是初始化参数
  • param-name标签,该标签的值是contentConfigLocation固定的,这表示接下来的value的值是配置的地址
  • param-value标签,是刚才创建的spring-mvc.xml配置文件的地址。路径是从SpringMVC文件夹开始的,这就是为什么把它设为资源文件夹,不设为资源是无法找到这个xml的
  • servlet-mapping标签,是一个映射,主要作用是声明本servlet处理的路径范围
  • url-pattern标签,是具体拦截的路径范围,*.hehe就是地址只能用.hehe为结尾访问,如果不想设置拦截的话,将该值设置为/就可以了。
web.xml配置完成
  1. 再次运行,访问,第一个接口就完成咯😄,恭喜恭喜!


    接口完成
  2. 总结一下:

  • web.xml中配置了servlet。1. servlet指明了以.hehe结尾的路径可以访问。2. 关联了SpringMVC的配置文件spring-mvc.xml。
  • spring-mvc.xml中关联了Controller文件夹,该文件夹下的所有控制器,只要声明@Controller注解的都会被认为是一个控制器,通过@RequestMapping注解声明了访问路径。
  • http请求访问到方法路径后会跳转到指定控制器的指定方法,使用HttpServletRequest即可获取到请求参数,然后我们的方法返回一个json字符串到页面上
  1. 然而这个接口只是一个假接口,下一章我们开始操作数据库,搞真正的接口咯

温馨提示:HttpServletRequest的getParameter方法默认只能获取到Content-Type为application/x-www-form-urlencoded格式的参数,如果是application/json格式的话需要在参数位置添加@RequestBody注解,想了解可以自行百度

学Java的iOS开发者系列文章

iOS转Java欢迎关注学Java的iOS开发者文集

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,635评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,628评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,971评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,986评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,006评论 6 394
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,784评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,475评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,364评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,860评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,008评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,152评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,829评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,490评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,035评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,156评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,428评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,127评论 2 356

推荐阅读更多精彩内容