> 本文由 [简悦 SimpRead](http://ksria.com/simpread/) 转码, 原文地址 [zhuanlan.zhihu.com](https://zhuanlan.zhihu.com/p/32267020)
ssm 框架的学习小结,主要是初期环境的搭建配置以及信息的交互处理过程,非技术人员请绕道~ 有什么疑问可以关注我的公众号:多一点思考。
SpringMVC 其实就是 Spring 框架的一个模块,是一个基于 MVC 的 WEB 开发框架。它主要负责的是与前端信息的交互。
大致过程:当客户端发起请求时,会先到达 DispatcherServlet(前端控制器,其实就是一个 Servlet),前端控制器根据 HandlerMapping(处理器映射器)查找 url 对应的 Handler,之后再调用 HandlerAdapter(处理器适配器)来执行对应的 Hanlder,这时候 Handler 会返回一个带有逻辑视图以及模型数据的 ModelAndView 给 HandlerAdpater 并再次返回给 DispatcherServlet,前端控制器调用视图解析器对 ModelAndView 进行视图渲染,并且向前端相应处理结果。
SSM 环境搭建
IDE 的话,我用的 MyEcplise,如果用 Ecplise 的话,需要自行配置服务器。
首先,建一个 Dynamic 工程,需要注意的是一定要勾选上 web.xml。
将 Spring 框架包、jstl 包、standard 包、common-logging 包、aopalliance 包、mybatis 包、mybatis-spring 包、mysql-connector 包、common-jbcp 包、commons-pool-1.6 包、aspectjweaver 包复制粘贴到 lib 文件夹中,并且 BuildPath。
配置前端控制器。在 web.xml 中加入如下代码:
其中 contextConfigLocation 属性值为 springmvc 配置文件的位置。servlet-mapping 来配置需要该前端控制器解析的 url 类型。
在目录下新建 Source
Folder 命名为 config,再新建 spring 和 Mybatis 文件夹分别用于管理 spring 和 mybatis 的配置文件。另外新建 mapper、service、serviceImpl、contoller、po 包,还有几个文件略过,详细看下面的工程目录:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lpwzNqGF-1605253765842)(data:image/svg+xml;utf8,
)]
在 config/spring 目录下新建 springmvc.xml 文件配置 springmvc 的处理器映射器、处理器适配器、视图解析器,代码如下:
此配置文件的头部省略,代码自行百度。视图解析器内 prefix 和 suffix 属性可设置所有视图文件的前缀和后缀,这样就不用在每个地方都写长长地址了~ 另外除了配置他们三个,还需要把自定义得 Hander 文件加载进去,这里使用了一个扫描器,自动加载 controller 包下的所有 Hander 文件(标记为 @Controller)
配置 MyBatis 的配置文件 SqlConfigMap.xml:
以及 db.properties、log4j.properties、applicationContext-dao 配置文件,具体配置参照我另一篇文章,这里就不多说了。唯一需要注意的是,mybatis 和 spring 需要整合,而 spring 和 springmvc 不需要整合,而且这里因为 spring 除了要管理 dao 层,还要管理 service 层、事务,所以有三个配置文件分别命名为 applicationContext-dao、applicationContext-service、applicationContext-transaction。其中 applicationContext-dao 按照之前那篇文章来配置即可,用于 spring 与 mybatis 的整合。
配置 spring 的 事务管理。
此篇文章不涉及事务,所以不多加阐述。
到此环境差不多就配置完成了,以下用一个简单的小程序来说明下 ssm 是如何接受用户请求,处理并且做出相应的~
小程序
mysql 数据库新建 itemlist 表:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MydY5a78-1605253765858)(data:image/svg+xml;utf8,
)]
用 mybatis 的逆向工程,自动生成对应的 po.java、mapper.xml、mapper.java 文件用于操作数据库。
为了维持可扩展性,我们应尽可能地不要修改自动生成的这些文件。新建 ItemlistCustom.java 并且继承由逆向工程生成的 Itemlist 的 po 类。
再建 ItemlistCustom.xml 文件来编写我们要实现的 sql 语句。
新建对应的 mapper.java 文件
这时候我们还缺少一个查询条件的 po 类
编写 Service 层,新建一个简单的 ItemlistService.java 文件和对应的实现类。
此处需要注意的是用到了注解 @Autowired,我们直接通过 spring 来管理 service,里面的 mapper 的类 spring 直接帮我们生成了。
我们也要相应的在 applicationContext.xml 中配置下 service。
编写 Contoller 层。
@Contoller 标识此类为 Contoller 类,否则需要继承 Handler 类,详细百度非注解处理器映射器和处理器适配器。
@Autowired 自动注入 service。
@RequestMapping 配置 url,当用户访问该 url 时候,会自动执行注解下的方法,也就是说一个 url 对应 handler 的一个方法。
modelAndView 它所携带的信息为模型数据和逻辑视图,可以通过给它 setObject 来向前台传递信息。
最后在 web.xml 中配置 spring。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Sn3rVKKD-1605253765888)(https://pic4.zhimg.com/v2-53a4ae83c5da34aa62b3b9f33347da3f_b.jpg)]
另外新建 jsp 页面。
运行服务器,访问对应的 url,页面就会显示数据库中商品列表。
以上仅仅是非常基础的配置,没想到就写了这么多~ 最后的最后还是要简单写写另外需要注意的地方。
逆向工程
a. 导入 mybatis-generator.jar 包
b. 编写生成文件所需的 xml 文件,主要是配置数据库的相关信息。
c. 编写执行文件. java,注意里面的 xml 文件路径最好写绝对路径。
d. 运行执行文件. java。
传参
自定义的 Contoller 类的方法参数可以写多个,可查下参数列表。
a.HttpRequest、HttpResponse 通过这两个参数可采用原始的 servlet 进行开发。
b. pojo 类。也就是所谓的模型。前台 name 可以定义为 pojo 类的属性名,springmvc 会自动传入该模型。要传入 pojo 中的 pojo 在前台 name 值可定义为 pojo.name 进行传递。
c. 简单类型,如 int、String。前台的 name 要和方法中的参数名保持一致。
json 数据交互
SpringMVC 采用 @ResponseBody 和 @ReuqestBody 注解进行转化,进而前端和后端进行交互传递信息。
拦截器
SpringMVC 针对 HandlerMapping 进行拦截器的配置,如果某个 HandlerMapping 配置了拦截器,HandlerMapping 映射成功后执行拦截器。
当然,它也提供全局的拦截器,SpringMVC 自动注入每一个 HandlerMapping 中。
SpringMVC 与 Struts2 的不同
SpringMVC 是基于方法开发,而 Struts2 是基于类开发。SpringMVC 接受值于方法的参数列表中,可以进行单例开发,而 Struts2 接收参数于类的成员变量中,不能进行单例开发。在单例模式下,每个线程所传入的参数值不互相影响,实现隔离。
微信公众号:多一点思考。