一、简介
所谓SSM,即是Spring+SpringMVC+MyBatis三个开源框架的整合,是目前流行的作为WEB项目搭建的框架选择。
这篇文章是自己动手搭建并将过程记录,以便加深印象和方便以后查阅。
二、环境
1.操作系统:windows 10
2.IDE版本:Eclipse Luna Release (4.4.0)
3.JDK版本:jdk1.7.0_60
4.tomcat版本:apache-tomcat-7.0.53
5.maven版本:3.2.1
6.数据库:mysql(事先建好数据库)
三、步骤
(一)创建工程
1.New一个maven工程
2.点击Next,选择默认工作空间位置;如果勾选了create a simple project会自动创建src/main/java,src/test/java,src/test/resources这些maven项目中常见文件夹,但会缺失web项目需要的web.xml等文件;
此处我们不勾选,点击下一步;
3.选择web类型,注意不要选错了,点击Next
4.填写GroupID、ArtifactID及版本信息,点击Finish
5.工程创建完毕
(二)调整项目结构
1.window-Preferences-Server-Runtime Environment添加tomcat,并注意JRE环境为你的jdk版本
2.这时候看到我们JRE System Library后面显示的还是[J2SE-1.5],并且没有maven项目的src/main/java等文件夹,我们需要调整对应的JRE环境,在工程上右键Build Path-Configure Build Path,在Libraries下选中JRE,右侧edit,选择我们自己的jdk版本
3.这时候我们的项目就变成了这个样子,JRE版本也对了,src/main等文件夹也有了,但还是缺少src/test/resources,需要手动创建
4.右键New一个source folder,名称为src/test/resources
5.结构调整完毕
(三)添加pom依赖,下载SSM框架所需jar包
4.0.0test.java.zxfSSMDemo
war0.0.1-SNAPSHOTSSMDemo Maven Webapphttp://maven.apache.org
4.3.8.RELEASEorg.springframeworkspring-core${spring.version}org.springframeworkspring-aop${spring.version}org.springframeworkspring-web${spring.version}org.springframeworkspring-webmvc${spring.version}org.springframeworkspring-jdbc${spring.version}org.springframeworkspring-tx${spring.version}org.aspectjaspectjrt1.8.0org.aspectjaspectjweaver1.8.0org.mybatismybatis3.3.0mysqlmysql-connector-java5.1.31com.alibabadruid1.0.20org.mybatismybatis-spring1.2.3javax.servletjstl1.2log4jlog4j1.2.17org.slf4jslf4j-api1.7.21junitjunit3.8.1testSSMDemo
下载之后可以看到maven依赖下的包已经都有了
(四)配置文件
1.修改web.xml
Archetype Created Web Application contextConfigLocation
classpath:spring-mybatis.xml
encodingFilter org.springframework.web.filter.CharacterEncodingFilter true encoding
UTF-8
encodingFilter /* org.springframework.web.context.ContextLoaderListener org.springframework.web.util.IntrospectorCleanupListener SpringMVC org.springframework.web.servlet.DispatcherServlet contextConfigLocation
classpath:spring-mvc.xml
1 true SpringMVC / /index.jsp
2.在resources文件夹下创建spring-mybatis.xml
点击finish,创建文件
3.配置spring-mybatis.xml
classpath:jdbc.propertiesclasspath:log4j.properties
4.创建spring-mvc.xml文件
5.创建jdbc.properties文件
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/testdb
jdbc.username=root
jdbc.password=root
6.创建log4j.properties文件
log4j.rootLogger=INFO,Console,File
#定义日志输出目的地为控制台
log4j.appender.COnsole=org.apache.log4j.ConsoleAppender
log4j.appender.Console.Target=System.out
#可以灵活地指定日志输出格式,下面一行是指定具体的格式
log4j.appender.Console.layout = org.apache.log4j.PatternLayout
log4j.appender.Console.layout.COnversionPattern=[%c] - %m%n #文件大小到达指定尺寸的时候产生一个新的文件
log4j.appender.File = org.apache.log4j.RollingFileAppender
#指定输出目录
log4j.appender.File.File = logs/ssm.log
#定义文件最大大小
log4j.appender.File.MaxFileSize = 10MB
# 输出所以日志,如果换成DEBUG表示输出DEBUG以上级别日志
log4j.appender.File.Threshold = ALL
log4j.appender.File.layout = org.apache.log4j.PatternLayout
log4j.appender.File.layout.COnversionPattern=[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n
(五)编写服务端代码
1.利用逆向工程生成dao、实体类和mybatis映射文件,具体参考教程https://blog.csdn.net/qq_33236248/article/details/80091214
2.在src/java/main文件夹下新建包com.java.zxf.dao、com.java.zxf.domain
3.将逆向工程生成的三个文件,分别拷贝到对应的目录下;(习惯上把mapper改为dao,可以不改,但如果改了,记住UserMapper.xml中的namespace也要做对应更改,不然会报Invalid bound statement (not found)的异常)
User.java,代码如下:
package com.java.zxf.domain;public class User {private String id;private String userName;private String userGender;private String userBirthday;public String getId() {return id;}public void setId(String id) {this.id = id == null ? null : id.trim();}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName == null ? null : userName.trim();}public String getUserGender() {return userGender;}public void setUserGender(String userGender) {this.userGender = userGender == null ? null : userGender.trim();}public String getUserBirthday() {return userBirthday;}public void setUserBirthday(String userBirthday) {this.userBirthday = userBirthday == null ? null : userBirthday.trim();}
}
UserDao.java,代码如下 :
package com.java.zxf.dao;import com.java.zxf.domain.User;public interface UserDao {int deleteByPrimaryKey(String id);int insert(User record);int insertSelective(User record);User selectByPrimaryKey(String id);int updateByPrimaryKeySelective(User record);int updateByPrimaryKey(User record);
}
UserMapper.xml,代码如下:
id, user_name, user_gender, user_birthdaydelete from userwhere id = #{id,jdbcType=VARCHAR}insert into user (id, user_name, user_gender, user_birthday)values (#{id,jdbcType=VARCHAR}, #{userName,jdbcType=VARCHAR}, #{userGender,jdbcType=VARCHAR}, #{userBirthday,jdbcType=VARCHAR})insert into userid,user_name,user_gender,user_birthday,#{id,jdbcType=VARCHAR},#{userName,jdbcType=VARCHAR},#{userGender,jdbcType=VARCHAR},#{userBirthday,jdbcType=VARCHAR},update useruser_name = #{userName,jdbcType=VARCHAR},user_gender = #{userGender,jdbcType=VARCHAR},user_birthday = #{userBirthday,jdbcType=VARCHAR},where id = #{id,jdbcType=VARCHAR}update userset user_name = #{userName,jdbcType=VARCHAR},user_gender = #{userGender,jdbcType=VARCHAR},user_birthday = #{userBirthday,jdbcType=VARCHAR}where id = #{id,jdbcType=VARCHAR}
4.在src/java/main文件夹下新建包com.java.zxf.service,用来存放service层代码;
5.在service包下新建UserService类,定义接口根据ID查询用户信息
package com.java.zxf.service;import com.java.zxf.domain.User;public interface UserService {/*** 根据ID获取用户信息*/public User getUserById(String id);
}
6.在service包下新建com.java.zxf.service.impl包,用来存放service层实现的代码;
7.在impl包下新建UserServiceImpl类,实现UserService
package com.java.zxf.service.impl;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import com.java.zxf.dao.UserDao;
import com.java.zxf.domain.User;
import com.java.zxf.service.UserService;@Service
public class UserServiceImpl implements UserService {@Autowiredprivate UserDao userDao;public User getUserById(String id) {return userDao.selectByPrimaryKey(id);}}
8.在src/java/main文件夹下新建包com.java.zxf.controller,用来存放控制层代码;
9.在controller下新建UserController类,并编写控制层代码;
package com.java.zxf.controller;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;import com.java.zxf.domain.User;
import com.java.zxf.service.UserService;/*** 用户控制器*/
@Controller
public class UserController {@Autowiredprivate UserService userService;@RequestMapping(value = "/user", method = RequestMethod.GET)public ModelAndView login(@RequestParam(value="id",required=true) String id) {User user = userService.getUserById(id);ModelAndView mav = new ModelAndView();if (user == null) {//跳转至失败页mav.setViewName("fail");return mav;} else {//跳转至成功页mav.addObject("id", user.getId());mav.addObject("name", user.getUserName());mav.addObject("gender", user.getUserGender());mav.addObject("birthday", user.getUserBirthday());mav.setViewName("success");return mav;}}
}
(六)编写前端代码
1.在WEB-INF目录下新建jsp文件夹,用来存放jsp页面
2.在jsp文件夹下分别新建失败页fail.jsp和成功页success.jsp
fail.jsp代码如下:
<%@ page language="java" cOntentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
根据ID查询用户信息失败
success.jsp代码如下:
<%@ page language="java" cOntentType="text/html; charset=UTF-8"pageEncoding="UTF-8" isELIgnored="false"%>
根据ID查询用户信息成功
用户信息如下:
用户ID:${id}
用户名:${name}
用户性别:${gender}
用户生日:${birthday}
(七)构建项目
1.在项目上右键,选择run-maven build..,然后输入命令clean install
2.构建成功
(八)部署项目
1.在Servers标签中,新建一个server,可以点击链接,也可以右键New Server;如果没有Server标签,可以在菜单栏依次Window-Show View-Servers即可打开
配置tomcat
2.点击Next,将我们的项目添加到右侧
3.点击finish完成,server就创建完成了
4.在server上双击,打开相关配置,在Timeouts中将服务器启动和关闭时间改为300秒,因为如果项目太大,几十秒肯定启动不完,服务器就停了
5.右键server,点击publish发布(可能失败,多点几次)
6.右键server,点击start,启动服务器
启动成功
(九)访问项目
(在此之前,数据库已经有一条数据)
1.在浏览器地址栏输入http://localhost:8080/SSMDemo/user?id=1
2.成功
3.再测一下失败页,在地址栏输入http://localhost:8080/SSMDemo/user?id=2
4.访问成功
(十)至此,基本的SSM框架搭建完毕。
源码附上:点击打开链接