本次学习我们有两个目标
- 完善SpringMVC框架
- 写出来第一个接口并访问
完善SpringMVC框架
上次我们引入了最基本的SpringMVC框架的依赖,但一个依赖是远远不够的,SpringMVC有一系列框架,各司其职,下面我们就开始吧,需要什么引什么,让我带你一步一步学习SpringMVC框架
-
首先创建文件结构,我们的先不使用项目间互相依赖,先使用一个项目多个文件夹分结构。主要结构如下
主要结构 -
是不是一下看到太多东西无法接受,别慌,这只是个总揽,创建完后的效果。现在我们才真正开始创建了。如果接上篇文章的话,你现在的目录应该是这样的
原始目录 首先,我们在
main
文件夹下创建一个Class
文件夹,用于存放我们的源码,名字可以随便起哈。然后再在Class
文件夹下创建5个文件夹,分别是Aop
、Bean
、Controller
、Dao
、Service
。
- 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。
创建文件夹
-
创建完后Class文件夹没有任何属性,我们这里放的是源码,所以需要设置一下,打开项目设置->Module->JiaoRiBao->右键点击Class->选择Sources然后OK即可。这样就在文件夹里就可以创建java文件了
设置源码文件夹 -
首先我们当然先要搞入口的控制器咯,在Controller文件夹里创建一个java类,类名就叫BaseController吧,然后再在同一位置创建一个UserController继承与BaseController,这个控制器我们就用来做用户相关的操作
创建java类 有学过Servlet的小伙伴此时应该会说,是不是忘了什么?对了,需要在web.xml中配置控制器才能访问,但我们用的是SpringMVC当然要用简便方法来操作咯,于是我们就要学习SpringMVC的第一个注解了
@Controller
这个注解是告诉Spring的扫描器说这是一个Spring的控制器,不注解的话需要在web.xml中注册这个控制器才行。好了,开始操作。由于@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上也加入该注解
8.好,接下来再来认识一个注解@RequestMapping
这个注解是声明路径用的,可以看到我图中是这样写的@RequestMapping("/user")
,这样当我访问这个控制器内的方法时就要用localhost:8080/user/xxx.xx
路径了
-
接下来再加一个注解
@ResponseBody
这个注解主要是用来让该Controller中方法的返回值返回到页面上
@ResponseBody 我们先写一个登陆方法吧声明一个返回值是
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 "";
}
- 这里我直接在接口里写了一个逻辑,就是接受phone和pass两个参数,然后返回到页面里,当然要转成json字符串返回咯,我推荐使用阿里爸爸的fastjson框架,挺方便的,打开pom.xml,加入以下依赖,更新maven
<!-- json -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.23</version>
</dependency>
-
继续修改登录逻辑,将转json加入进去,返回json字符串到页面
添加fastjson
转换json -
接口出好了,访问一下。果然不通😂。原因是web.xml还没有配置,
SpringMVC
框架还没形成闭环,记不记得@Controller
,要使这个注解生效还要配置一下spring-mvc
库和web.xml
404 打开pom.xml配置
spring-mvc
库,更新maven,是不是都轻车熟路了……
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
- 接下来是重点操作咯,注意听讲,敲黑板。在webapp文件夹下创建一个SpringMVC文件夹(名字随意,方便归纳),在SpringMVC文件夹下右键->XML Configuration File->Spring Config,创建一个spring-mvc的配置文件,名字也可以随意起。完后在spring-mvc.xml加入以下内容,base-package对应的是你控制器所在的文件夹
<context:component-scan base-package="Controller"/>
-
打开项目配置,和Class设置源码文件夹的操作一样,这次我们要将SpringMVC设置为资源文件夹,别问为啥,设就完了。
设置资源文件夹 打开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中配置了servlet。1. servlet指明了以.hehe结尾的路径可以访问。2. 关联了SpringMVC的配置文件spring-mvc.xml。
- spring-mvc.xml中关联了Controller文件夹,该文件夹下的所有控制器,只要声明
@Controller
注解的都会被认为是一个控制器,通过@RequestMapping
注解声明了访问路径。 - http请求访问到方法路径后会跳转到指定控制器的指定方法,使用HttpServletRequest即可获取到请求参数,然后我们的方法返回一个json字符串到页面上
- 然而这个接口只是一个假接口,下一章我们开始操作数据库,搞真正的接口咯
温馨提示:HttpServletRequest的getParameter方法默认只能获取到Content-Type为application/x-www-form-urlencoded格式的参数,如果是application/json格式的话需要在参数位置添加@RequestBody注解,想了解可以自行百度
学Java的iOS开发者系列文章
iOS转Java欢迎关注学Java的iOS开发者文集