我最近才整合完SSM。
站在用户的角度思考问题,与客户深入沟通,找到桥西网站设计与桥西网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:网站制作、做网站、企业官网、英文网站、手机端网站、网站推广、国际域名空间、网站空间、企业邮箱。业务覆盖桥西地区。前段时间,分开学习了这三个框架,都是看某黄埔军校的视频,整合的部分没看视频,想自己做。
但是有一些部分自己没有能完成,主要是如何从spring容器里取出ApplicationContext,这个我的实现比较low,看了看讲义,才OK的。
我的实现:
[java] view plain copy
WebApplicationContext acc = WebApplicationContextUtils.getRequiredWebApplicationContext(request.getServletContext());
ls = (LoginService) acc.getBean("MyService");
而讲义上的实现:
[java] view plain copy
@Autowired
@Qualifier("MyService")
private LoginService ls;
public void setLs(LoginService ls) {
this.ls = ls;
}
这里的区别呢,是我的实现在spring中还要注册MyService,虽然下面的写法我貌似。。。没学过?好吧应该就是注解实现。
这里放上我的Step,给自己看看,就当复习了。
[plain] view plain copy
2018年5月9日13:08:51
今天写SSM整合
1.建立项目,添加spring5\springMVC5\Mybatis3的maven
2.写spring、springmvc、mybatis的配置文件
2.1 spring配置文件,约束,哪里来?
源码中可以找sxd约束文件,这个的话我在
E:\2017下学期\spring-framework-5.0.5.RELEASE-dist\spring-framework-5.0.5.RELEASE\docs\spring-framework-reference
找到了,一个bean,一个context
2.2 spring配置文件,导入beans和database
2.3 spring-bean 我先创建一个实体类Person,再注册(注册了没用)
2.4 spring-db 我这里创建数据源,但是alt+/出不来提示,我一想,mysql的包没载入,在maven中加入
还是没得,恩,我加了jdbc的包,还是没有,我以为是没有源码,下载了,还是没有提示,棒
没有提示,我追了下源码,找set方法,我知道有4个,所以找得到,除此之外,还有一些其他属性可以设置
编写jdbc_mysql.properties文件,并导入
2.5 spring-bean 注册dao,这个是spring集成mybatis,注册sqlSession
这里就要导入mybatis和spring的整合包了,这里sqlsession中也要导入mybatis的配置文件
2.6 spring-bean 配置mapper自动扫描
MapperScannerConfigurer将扫描basePackage所指定的包下的所有接口类(包括子类),
如果它们在SQL映射文件中定义过,则将它们动态定义为一个Spring Bean,
这样,我们在Service中就可以直接注入映射接口的bean
意思就是可以直接ref="dao类名",给你自动注册好了
2.7 写mybatis的配置文件,一个别名,一个映射
约束去×××?dtd文件
2.8 写spring mvc配置文件,其实就是扫描controller
2.8 到这里,配置文件就写完了,这里注意的是,java代码没开始写,只是定义了几个包,dao\service\beans
-------------配置部分完成---------------------
3.编写service类和对应的dao
3.1 写loginservice接口
3.2 写实现类,其中有person的dao
3.3 写persondao,也是个接口
3.4 在spring-bean中注册接口
4.编写dao对应的mapper
4.1 这里的namespace直接为对应dao类的限定名
4.2 mapper中的id和类中方法id一致
4.3 参数传递,用#{}
-------------mybatis部分完成---------------------
4.编写controller
4.1 这里我写了个basecontroller用于获得applicationContext
4.2 就按照一般的,写了login
5.写jsp
5.1 写index
5.2 写welcome,成功
6.在web.xml中注册spring\springmvc
6.1 开启监听事件
6.2 注册spring
6.3 注册springmvc
7.跑程序
失败了1:datasource创建失败,读不到驱动,先把字符串填进去
失败了2:mybatis的config和mapper头中不能出现另一个 mapper 对应 mapper did config 对应 config did
失败了3:找不到persondao,bean初始化失败,dao的Setter忘了写无法注入
第二个原因,如果类名只有第一个字母大写,这个时候要写小写
ref="personDao" ref="IPersonDao"
失败了4:不用base这样的方法拿到容器。。。直接在参数中加上HttpServletRequest获取
8.加入springmvc拦截器,只让有权限的人进入网页
8.1 在controller中添加方法
8.2 编写拦截器类
8.3 在xml中注册拦截器
*这里我发现他的spring,就是获取容器那里好像是不太一样的,是
@Autowired
@Qualifier("MyService")
private LoginService ls;
public void setLs(LoginService ls) {
this.ls = ls;
}
这一堆东西,我找了找讲义,然后把代码给补上了,除了控制器这里,还有就是业务实现类:
@Service("MyService")
public class LoginServiceImp implements LoginService {
@Autowired
private PersonDao pdao;
这样,当然,还有xml配置文件里面,需要把之前手动定义的MyService变成扫描包
这样,就可以直接用ls了。
mybatis建议用配置文件开发,而springmvc我默认是注释,spring的注释也可以看一看
9.添加spring事务,当然是为了图ACDI特性
9.1 编写spring-tx配置文件,2件事,,
9.2 在业务类名上加上标记
9.3 测试事务性,在注册类中抛出异常
9.4 controller中写入注册方法
失败了:我按照讲义直接加注释,好像不行,看以前笔记,有个
@Transactional(isolation=Isolation.DEFAULT, propagation=Propagation.REQUIRED, rollbackFor=Exception.class)
可能是缺省的没有rollbackFor吧。。。
10.添加springmvc异常操作
10.1 在Springmvc中注册异常捕获
我发现我错了,是直接在controller写就好了,加上@ExceptionHandler(Exception.class)标记
OK
11.springAOP我还没涉及到,所以有这里再写个例子
这里写AOP的对一个类的处理,大概就是获取具体权限吧
比如我们权限有2个级别,登录是一个级别,买买买是一个级别,
每次执行买买买之后,就退出
11.1 导入aspectj的包
11.2 编写MyAspectJ.java,编写前置通知、后置通知
11.3 在spring-aspectj.xml中注册
失败了:一直不行,配置得好好的,AspectJ可以对service进行拦截,但是对controller不行
这个时候我就在想,因为service毕竟是在容器里注册了的,但是springmvc里面也有controller的注册啊
查了半天,恩,aspectj的配置要写在springmvc的配置文件里面就生效了。。。
绝望嘻嘻嘻
至此,SSM整合,完成。2018年5月10日17:35:08
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。