SSM血泪史
软件体系架构后,老师说按照质量驱动编程,于是我信了——然后我们组选用了SSM构架,四个星期铺就一部狂赶ddl的血泪史
SSM——Spring MVC + Spring + Mybatis为组合的构架,Mybatis负责数据库读取的代码简化、Spring负责读取数据之后的代码简化,而Spring MVC负责前后端响应的代码简化。
代码不难,配置细心!!!
一、首先配置数据库和服务器
这个比较简单,网上基本上都有报错的解决方案,我选用的Mysql和Tomcat这种中小型建站方案
菜鸟上有比较详细的教程:
Mysql数据库搭建,当然现在有更简洁的方式,在Mysql官网上下载web community 一键安装,当然如果要选择路径的话,需要用custom模式安装
Tomcat安装及配置,这里需要注意jre和Tomcat的版本问题,当然全部下载最新的大概率是没有问题的(当时我就在这里踩了坑,jre用一年前的,Tomcat用最新的就有不兼容的问题)
如果原来没有接触过网页服务器编程的话,这些教程快速浏览一下也很不错
二、接下来配置Maven环境
在这种需要大量jar包调用的开发中,用完Maven之后,必定真香。。。花了三天时间配置Maven,但是之后不停的失败后新建项目可真是方便,特别是有了Maven repository,找jar包再也不发愁了呢,在团队之间建项目也很方便了。
Maven目前来讲,我觉得最最方便的就是包管理器 pom.xml,在上面的Maven repository有如何写jar包依赖的代码,直接复制粘贴就好。如果用的是eclipse的话。。。注意pom.xml代码格式在这里
同样贴上几个教程:(我真的是把所有的坑都踩了一遍。。。。)
如果可以看英文教程的话,官网的入门指导真的不错!!能少走很多弯路:Maven users center
如果只是想看如何在eclipse上配置的话,还是菜鸟上面的两篇就够用了:Maven配置、Maven Eclipse
Maven还可以设置很多东西,比如远程仓库镜像、本地仓库等等,在{your-maven-address}/config/setting.xml中都有如何配置的详细注释,当然,在eclipse中也可以修改windows->preferance
阿里Maven镜像:http://maven.aliyun.com/nexus/content/groups/public/
如何在eclipse上建项,这一篇博主真的讲得非常细致了
SSM需要建立的webapp,同样很重要的是版本配置的问题,不知道为什么,【jre1.7】、【dynamic web Module 3.1】、【JS 1.0】就是比其他配置方案要稳定一些,不怎么随意报错(有些报错就是抽风,随便validation一下就可以了)
这里是解决dynamic web Module 版本不能修改的问题
-
需要更高版本的java:更改jre的版本、添加Maven编译的插件
-
没有办法更改web版本:是不是runtime设置问题、手动更改
配置完上面的东西之后,我就直接在GitHub上面找到简单的SSM项目看了起来,然后发现这种学习方法真的不适合对于Spring和数据库一无所知的人。按照Github上面的项目盲写代码,到时候报错都看不懂。
不过,如果对这些有一点点了解的,我觉得GitHub上这些项目不错:整合优雅的SSM项目(这个项目的整理确实很好看,但是没有太多前端的东西)、SSM demo(内容较为全面)、SSM(这个就有点复杂了)
还有一点,其中关于Mybatis部分的代码是可以自动生成的!!!
三、Mybatis学习
由于我用的数据库Mysql是8.XX版本,connector也选择的是8.XX版本,所以一切包都是选择的最高版本,我先用一个小项目来则是Mybatis和Mysql之间的版本问题,参照的是这一篇教程:Mybatis入门
这里踩坑最多的其实是Mysql在Mybatis中的配置问题
首先我原来的数据库设置成了不需要用户密码登录(我也忘了我是怎么做到的。。。),然后在小项目中可不用密码,但到了web项目中怎么也通不过,所以我重装了一遍Mysql
用高版本的connector所用的jbdc驱动不一样,应该换为:
value="com.mysql.cj.jdbc.Driver"
有些时候url后面加上两个以上的参数&会识别不出来,需要改成:
jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC
连接换成&;
maven自动生成这一部分的代码我参照了四篇教程:pom中plugin配置,不好好配置没有办法执行generator
、Maven generator的具体操作、generatorConfig.xml如何理解以及generatorConfig.xml的参考
还有什么关于Mybatis不理解的,可以参照Mybatis中文官方文档
关于Mybatis的理解:减少了很多关于数据库SQL语言的代码,但是在从sqlsession中取数据依旧很麻烦,这就需要Spring登场了~~
四、Spring的理解与学习
之前真的是不理解Spring是个啥玩意,啥Ioc啥注入的,看不懂。但是这篇教程把我讲懂了
于是根据这篇教程Mybatis+Spring配置以及编程和测试,把Spring和Mybatis一起搭建起来了,运用了里面第二个方法对配置之后的项目进行测试,中间遇到了不少问题,最后好像是因为generate太多次,导致xxmapper.xml文件中内容重复,导致报错。
博主后面用的好像不是Spring MVC做的测试,我就没有做web的测试,直接进入下一个环节
目前所有在resource文件夹中除了mapper和log4j之外的xml配置的格式是按照那个格式特别好的GitHub项目配置的,当然在内容上根据Mybatis+Spring配置以及编程和测试进行了修改
五、Spring MVC
Spring MVC本想看英文教程的,可是真的是实在看不进去,也看不懂,完全没有接触过,在这个时候能理解大多数代码的基础上,我将专门Spring MVC教程和GitHub上的项目—>有点复杂的那个结合来看
中间关于web.xml出现了些问题,一个是关于configLocation多值的问题,还有一个是由于我的spring-Mybatis配置都是分开写的,如果只是按照单个值来写会出现报错:BeanFactory无法生成、找不到.xml文件等等
这是我写的web.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<display-name>hustxk</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:spring/spring-*.xml,
classpath:mybatis-config.xml
</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>webs</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/spring-*.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>webs</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- 汉字编码问题 -->
<filter>
<filter-name>setEncoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>setEncoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
以及我的部分文件路径视图:
到现在我还是不太明白为什么在教程中一直强调命名的{DispatcherServlet}-servlet.xml,我一直都没写,我的Spring-web中倒是有相似的内容,难道这个是我的servlet吗?
-----------------更新------------------------------------------------------------------------------------------------
这是因为加了listener吗?
you can customize this file name and location by adding the servlet listener ContextLoaderListener in your web.xml file as follows −
<web-app...>
<!-------- DispatcherServlet definition goes here----->
....
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/HelloWeb-servlet.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
</web-app>
----------------------------------------------------------------------分割线-----------------------------------
之后写好根据这个简单但是全面的GitHub项目,把对应的controller和jsp文件写好,就可以配置server进行运行测试啦
感悟:虽然最后只出来小小的一行,但是代表所有的都配置成功了不是吗
SSM这个框架中包含的东西太多,这是三天速成这些难免很多东西都理解不到位,用我们软件体系结构老师的话来说就是:“没有金刚钻就不要揽瓷器活”,这些东西在ddl之后肯定要认真看看哇!!!