一: 概述
SSM 框架在项目开发中经常使用到, 相比于 SSH 框架, 它在仅几年的开发中运用的更加广泛.
Spring 作为一个轻量级的框架, 有很多的拓展功能, 最主要的我们一般项目使用的就是 IOC 和 AOP.
SpringMVC 是 Spring 实现的一个 web 层, 相当于 Struts 的框架, 但是比 Struts 更加灵活和强大!
Mybatis 是 一个持久层的框架, 在使用上相比 Hibernate 更加灵活, 可以控制 sql 的编写, 使用 XML 或注解进行相关的配置!
根据上面的描述, 学习 SSM 框架就非常的重要了!
二: 搭建一个 SSM 的过程
使用 Maven 管理项目
使用 Maven 在 Eclipse 中创建一个 webapp 的项目 , 具体的创建过程不做演示, 如有不会创建的 [创建项目]
也可以使用 Maven 命令进行创建, 在 Dos 窗口进入指定的目录, 执行下面命令:
mvnarchetype:create -DgroupId=org.ssm.dufy -DartifactId=ssm-demo -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false
使用命令要注意, 系统安装了 Maven, 并配置好了环境变量![Maven 的安装和环境变量配置]
导入项目 (命名创建), 添加依赖
导入项目是 IDE 中, 或者直接在 IDE 创建, 一般默认有 [src/main/java] , 手动创建 [src/test/resources] ,[src/test/java] 文件夹.
如下项目结构:
然后直接配置 pom.xml 文件中的包依赖!
4.0.0org.dufyssmwar0.0.1-SNAPSHOTssmDemohttp://maven.apache.org4.0.5.RELEASE3.2.11.6.61.2.125.1.35org.springframeworkspring-core${spring.version}org.springframeworkspring-webmvc${spring.version}org.springframeworkspring-context${spring.version}org.springframeworkspring-context-support${spring.version}org.springframeworkspring-aop${spring.version}org.springframeworkspring-aspects${spring.version}org.springframeworkspring-tx${spring.version}org.springframeworkspring-jdbc${spring.version}org.springframeworkspring-web${spring.version}org.springframeworkspring-test${spring.version}testorg.springframeworkspring-webmvc${spring.version}org.springframeworkspring-web${spring.version}mysqlmysql-connector-java${mysql.version}com.alibabadruid0.2.23com.alibabafastjson1.1.41log4jlog4j${log4j.version}org.slf4jslf4j-api${slf4j.version}ch.qos.logbacklogback-classic1.1.2ch.qos.logbacklogback-core1.1.2org.logback-extensionslogback-ext-spring0.1.1org.mybatismybatis${mybatis.version}org.mybatismybatis-spring1.2.0javax.servletjavax.servlet-api3.0.1javax.servlet.jspjavax.servlet.jsp-api2.3.2-b01javax.servletjstl1.2junitjunit3.8.1testssmDemo
创建数据库和表, 生成代码
创建数据库我参考别人的博客数据库设计, 这块没有自己去书写, 直接添上代码
DROPTABLEIFEXISTSuser_t;CREATETABLEuser_t(idint(11)NOTNULLAUTO_INCREMENT,user_namevarchar(40)NOTNULL,passwordvarchar(255)NOTNULL,ageint(4)NOTNULL, PRIMARYKEY(id) )ENGINE=InnoDBAUTO_INCREMENT=2DEFAULTCHARSET=utf8;/Data for the table user_t /insertintouser_t(id,user_name,password,age)values(1,'测试','sfasgfaf',24)
生成代码请查看:
[Mybatis 自动生成代码]
生成的代码导入图片解释:
Spring 和 mybatis 整合, 连接数据库, 进行 Junit 测试
将生成的代码拷贝到项目中, 然后进行 Spring 和 Mybatis 的整合, 添加配置文件!
主要有
applicationContent.xml :Spring 的相关配置!
Spring-mhbatis.xml : Spring 和 Mybatis 集成配置!
jdbc.properties : 数据库信息配置!
logback.xml : 日志输出信息配置!(不做介绍, 详细信息查看源码)
主要介绍 applicationContext.xml,Spring-mhbatis.xml,jdbc.properties. 主要内容如下:
- jdbc.properties
- jdbc_driverClassName=com.mysql.jdbc.Driverjdbc_url=jdbc:mysql://localhost:3306/ssm?useUnicode=true&characterEncoding=utf8jdbc_username=rootjdbc_password=root
- applicationContext.xml
- http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
- http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
- http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
"> 可以不在配置 -->
- spring-mybatis.xml
- http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
- http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
- http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd"> http://www.springframework.org/schema/context/spring-context-3.2.xsd ;
测试代码, 两种方式:
测试 1:
package org.ssm.dufy.service;importorg.junit.Test;importorg.junit.runner.RunWith;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.test.context.ContextConfiguration;importorg.springframework.test.context.junit4.SpringJUnit4Cla***unner;importorg.ssm.dufy.entity.User;/**
配置 spring 和 junit 整合, junit 启动时加载 springIOC 容器 spring-test,junit
*/@RunWith(SpringJUnit4Cla***unner.class)// 告诉 junit spring 配置文件 @ContextConfiguration({"classpath:applicationContext.xml"})publicclassIUserServiceTest{ @AutowiredpublicIUserServiceuserService; @Testpublicvoid getUserByIdTest(){Useruser = userService.getUserById(1);System.out.println(user.getUserName()); } }
测试 2:
package org.ssm.dufy.service;importorg.springframework.context.ApplicationContext;importorg.springframework.context.support.ClassPathXmlApplicationContext;importorg.ssm.dufy.entity.User;publicclassIUserServiceTest2{publicstaticvoid main(String[] args) {ApplicationContextapplication = newClassPathXmlApplicationContext("applicationContext.xml");IUserServiceuService = (IUserService) application.getBean("userService");Useruser = uService.getUserById(1);System.out.println(user.getUserName()); }}
5: 整合 SpringMVC, 添加配置, 创建 jsp
SpringMVC 需要的依赖在 pom.xml 中已经加上了, 现在需在 Web 项目中的 web.xml 中添加启动 SpringMVC 启动配置和 Spring 整合 SpringMVC 的配置了.
新增如下两个文件:
- spring-mvc.xml
- http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
- http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context-3.2.xsd
- http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd"> http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd ; application/json -->json=application/json xml=application/xml html=text/html/ 映射时, 能映射静态资源 -->
- web.xml
- SSM-DEMOcontextConfigLocationclasspath:applicationContext.xml
- webAppRootKey
- springmvc.root
- -->SpringEncodingFilterorg.springframework.web.filter.CharacterEncodingFilterencodingUTF-8forceEncodingtrueSpringEncodingFilter/*logbackConfigLocationclasspath:logback.xmlch.qos.logback.ext.spring.web.LogbackConfigListenerorg.springframework.web.context.ContextLoaderListenerdispatcherServletorg.springframework.web.servlet.DispatcherServletcontextConfigLocationclasspath:spring-mvc.xml1dispatcherServlet/index.jsp
新增 index.jsp 文件
- <%@pagecontentType="text/html; charset=utf-8"%>
- Hello World!
6. 启动 web 服务, 测试
将上面的项目添加到 Tomcat 中, 启动, 控制台没有报错, 并在地址栏访问, http://localhost:8080/ssm. 页面显示 Hello http://localhost:8080/ssm。页面显示Hello World! 项目配置 ok!
7: 编写 Controller, 和对应得业务界面
新增 UserController, 通过参数传递 uid 获取用户, 若用户存在, 跳转到 showName.jsp , 若用户不存在, 则跳转到 error.jsp, 并返回提示信息!
package org.ssm.dufy.web;importjavax.servlet.http.HttpServletRequest;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Controller;importorg.springframework.ui.Model;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RequestMethod;importorg.springframework.web.bind.annotation.RequestParam;importorg.springframework.web.servlet.ModelAndView;importorg.ssm.dufy.entity.User;importorg.ssm.dufy.service.IUserService;@ControllerpublicclassUserController{ @AutowiredprivateIUserServiceuserService; @RequestMapping(value="/showname",method=RequestMethod.GET)publicStringshowUserName(@RequestParam("uid") int uid,HttpServletRequestrequest,Modelmodel){System.out.println("showname");Useruser = userService.getUserById(uid);if(user != null){ request.setAttribute("name", user.getUserName()); model.addAttribute("mame", user.getUserName());return"showName"; } request.setAttribute("error","没有找到该用户!");return"error"; }}
Jsp 内容如下:
- showName.jsp
- <%@pagecontentType="text/html; charset=utf-8"%>show name
三: 遇到的问题
1: 找不到 UserService, 报错
可能是包扫描路径的问题, 检查一下 Service 是否在扫描的范围内
2:jsp 接收不到 request.setAttribute("",""); 内容
查资料说是因为 JSP 的版本问题, 可以在 Jsp 上面添加 <%@ page isELIgnored="false" %>
或者修改 web.xml , 添加 version 版本!
来源: http://www.bubuko.com/infodetail-2660510.html