第一部分:构建一个简单的maven工程
1.新建maven project
2.创建maven项目基本结构
3.项目命名与打包方式,这里选择打成war包
4.创建完项目后,但是缺失WEB-INF目录以及web.xml文件
解决方案: 右击该项目 —> JAVA EE TOOLS —> Generate Deployment Discripor Stub
此时,第一部分完成。maven项目结构搭建好。
第二部分 pom文件
这里的pom配置文件,主要分三块,
第一模块:
第二模块:
但这里需要注意:
1.比如在日志jar包中,我们使用log4j和slf4j,需要的基本jar包有:log4j.jar, slf4j-api.jar, slf4j-log4j12.jar,但是我们只配置了slf4j-log4j12的依赖。是因为maven的传递依赖功能,当我们配置了slf4j-log4j12.jar的依赖,而slf4j-log4j12.jar会依赖log4j.jar以及slf4j-api.jar;如下图所示
2.我们在servlet-api以及jsp-api中将作用域
第三模块:
最后,我们配置完pom文件后,需要maven update一次,可以让我们主动添加所配置的依赖的jar包以及插件
4.0.0
com
ssm-maven
0.0.1-SNAPSHOT
war
4.12
1.7.7
1.2
2.0
2.5
2.8.5
1.5.4
4.3.8.RELEASE
3.3.1
1.3.0
5.1.36
1.0
5.0.1
1.4
junit
junit
${junit.version}
org.slf4j
slf4j-log4j12
${slf4j.version}
org.springframework
spring-core
${spring.version}
org.springframework
spring-context-support
${spring.version}
org.springframework
spring-web
${spring.version}
org.springframework
spring-webmvc
${spring.version}
org.springframework
spring-oxm
${spring.version}
org.springframework
spring-jdbc
${spring.version}
org.springframework
spring-test
${spring.version}
com.fasterxml.jackson.core
jackson-core
${jackson.version}
com.fasterxml.jackson.core
jackson-databind
${jackson.version}
com.fasterxml.jackson.core
jackson-annotations
${jackson.version}
org.aspectj
aspectjrt
${aspectj.version}
org.aspectj
aspectjweaver
${aspectj.version}
javax.servlet
jsp-api
${jsp.version}
provided
javax.servlet
servlet-api
${servlet.version}
provided
jstl
jstl
${jstl.version}
org.mybatis
mybatis
${mybatis.version}
org.mybatis
mybatis-spring
${spring.mybatis.version}
mysql
mysql-connector-java
${mysql.collection.version}
aopalliance
aopalliance
${aopalliance.version}
org.ow2.asm
asm
${asm.version}
commons-dbcp
commons-dbcp
${dbcp.version}
org.apache.maven.plugins
maven-compiler-plugin
3.0
1.8
1.8
org.apache.maven.plugins
maven-surefire-plugin
true
true
第三部分 配置文件
1.配置web.xml文件
web.xml文件中一共有四个组件
第一个:监听器
org.springframework.web.context.ContextLoaderListener
作用:在web容器启动时,注册ServletContext监听器的实现类对象ContextLoaderListener,读取spring配置文件,创建Spring容器及将创建好的Spring容器对象放入到ServletContext的域属性空间中,确保整个应用中spring容器的唯一性。
第二个:spring配置文件位置
contextConfigLocation
classpath:spring-config/spring-*.xml
作用:这里指定了spring的主配置文件,是ssm框架的总的容器。其中会注册数据源,事务管理,service,dao的注册等。但是要注意,这里的主配置文件和springmvc的配置文件是不同的,springmvc的配置文件中主要用于springmvc“四器”的注册,即映射器处理器,适配器处理器,处理器,视图解析器。在这里我们配置的是classpath下spring-config/spring-*.xml。所以我们在src/main/resources目录下创建spring-config目录,spring相关配置文件放在该目录下,且文件名命名以spring-开头。
第三个:字符集过滤器
characterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
utf-8
forceEncoding
true
characterEncodingFilter
/*
设置请求和响应字符集为utf-8
第四个: DispatchetrServlet中央调度器
springMVC
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:spring-config/springmvc-config.xml
1
springMVC
/
在中央调度器里读取springmvc配置文件,即读取“四器”
综上,具体配置如下:
contextConfigLocation
classpath:spring-config/spring-*.xml
org.springframework.web.context.ContextLoaderListener
springMVC
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:spring-config/springmvc-config.xml
1
springMVC
/
characterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
utf-8
forceEncoding
true
characterEncodingFilter
/*
2.spring主配置文件
注意:我们在web.xml中配置的spring文件应位于src/main/resources目录下的spring-config下以spring-开头的配置文件。所以我们在这里新建spring-context.xml主配置文件,并创建proerties-config目录下存放properties配置文件,如下图:
在spring-context.xml主配置文件中,我们需要配置六个组件
第一个:引入properties配置文件
我们一般将数据库连接四要素写入properties配置文件中,在spring文件中引入。所以此时,我们在上图properties-config目录下创建jdbc.properties文件,并将数据库连接四要素写入其中,如下图所示:
在创建并配置好properties文件后,接下来就需要在spring中引入properties配置文件,如下:
注意:我们一般写的是*.properties,表示引入properties目录下所有文件名以properties结尾的文件,这样方便以后创建其他properties配置文件并引入。一方面是因为代码简洁,另一方面也是因为
第二个:注册数据源(这里我们使用的是dbcp连接池)
注意:此时数据源中的字段,读取了jdbc.properties配置文件
第三个:注册SqlSessionFactoryBean(这个bean是mybatis的核心)
主要有两个参数:dataSource数据源以及mapperLocations,mapperLocations指的是我们的mybatis的mapper映射文件的类路径
(对应的,我们的mapper.xml映射文件需要在src/main/resources下的mapper-config目录下,且以-mapper.xml文件结尾)
此外,还有一个参数:configLocation,这个参数是表示mybatis主配置文件的类路径,因为我们这里已经将sqlSessionFactoryBean放在了spring主配置文件中,所以mybatis的主配置文件可有可无。
第四个:注册Mapper扫描器
该扫描器的作用是扫描Mapper接口,便于后面动态代理生成对应的sqlSession对象。有两个参数,第一个即sqlSessionFactoryBean,另一个是basepackage表示Mapper接口所在的包
以上四个配置了数据源等相关,已经可以实现增删查改操作了,接下来的两个组件是事务管理相关
第五个:注册事务管理器
第六个:配置事务注解驱动
注:spring的其他aop功能,在此不做演示。以上六个组件已经可以实现基本要求
综上,具体配置如下:
3.springmvc.xml
在web.xml配置文件的中央调度器中,我们已经规定好springmvc的配置文件应放在src/main/resources下的spring-config目录下,且文件名为:springmvc-config.xml,配置文件的路径如下图:
springmvc配置文件主要是用于配置“四器”,在这里只用配置三个组件
第一个: 静态资源处理器
第二个:注解驱动
第三个: Controller包扫描器
以上,就可以满足基本需求。如下所示:
综上,ssm框架基本搭建完成。
4. 在类路径下配置并添加log4j.properties配置文件
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=/opt/faeapp/logs/test/test.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p [%-8.8t] %-20.20c{1}[%-20.20M]:%-3L - %m%n
log4j.appender.file.MaxFileSize=50MB
log4j.appender.file.MaxBackupIndex=30
log4j.appender.file.encoding=UTF-8
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=%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p [%-8.8t] %-20.20c{1}[%-20.20M]:%-3L - %m%n
log4j.rootLogger=debug, console
综上,整个ssm框架基本搭建完成
接下来,我们写一个简单的用户注册的例子让ssm框架运行起来。
1.首先创建好数据库表t_student:
2.创建对应的Bean,放在com.tca.beans包内
package com.tca.beans;
import java.io.Serializable;
public class Student implements Serializable{
private static final long serialVersionUID = 1L;
private Integer sid;
private String sname;
private Integer sage;
private String sgender;
public Student() {
super();
// TODO Auto-generated constructor stub
}
public Student(String sname, Integer sage, String sgender) {
super();
this.sname = sname;
this.sage = sage;
this.sgender = sgender;
}
public Integer getSid() {
return sid;
}
public void setSid(Integer sid) {
this.sid = sid;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public Integer getSage() {
return sage;
}
public void setSage(Integer sage) {
this.sage = sage;
}
public String getSgender() {
return sgender;
}
public void setSgender(String sgender) {
this.sgender = sgender;
}
}
3.写对应的Mapper接口和mapper映射文件
3.1 Mapper接口放在com.tca.dao包中
package com.tca.dao;
import org.springframework.stereotype.Component;
import com.tca.beans.Student;
@Component("com.tca.dao.IStudentDao")
public interface IStudentDao {
/**
*
* @param sname
* @return
*/
int countBySname(String sname);
/**
*
* @param student
*/
void insertStudent(Student student);
}
3.2 mapper映射文件放在mapper-config目录下
insert into t_student (sname, sage, sgender) values (#{sname}, #{sage}, #{sgender})
以上dao层已经全部写好。
4.Controller层
注意,因为本例业务逻辑比较简单,因此,没有单独写Service层
package com.tca.controller;
import org.apache.log4j.Logger;
import org.slf4j.impl.Log4jLoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import com.tca.beans.Student;
import com.tca.dao.IStudentDao;
@Controller
@RequestMapping("/register")
public class RegisterController {
@Autowired
private IStudentDao studentDao;
private Logger logger = Logger.getLogger(RegisterController.class);
/**
* 跳转到注册页面
* @return
*/
@RequestMapping("/toRegisterPage")
public ModelAndView toRegisterPage(){
logger.info("准备跳转到注册界面..");
return new ModelAndView("/jsp/register.jsp");
}
/**
* 注册
* @param student
* @return
*/
@RequestMapping("/doRegister")
public ModelAndView doRegister(Student student){
ModelAndView mv = new ModelAndView();
//判断用户名是否使用
String sname = student.getSname();
if (studentDao.countBySname(sname) > 0){
logger.info("该用户名已经注册..");
mv.addObject("errorMsg", "该用户名已使用");
mv.setViewName("/jsp/register.jsp");
return mv;
}
//注册成功,则跳转到注册成功页面
studentDao.insertStudent(student);
logger.info("注册成功..");
mv.addObject("student", student);
mv.setViewName("/jsp/welcome.jsp");
return mv;
}
}
5.最后,我们在WEB-INF目录下创建jsp目录,并创建基本的页面
注意:因为本例比较简单,所以没有实现前后端分离,我们将前端页面以jsp的方式展示
分别创建和添加register.jsp注册页面,welcome.jsp注册成功后欢迎页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
用户注册
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
欢迎界面
你好,${student.sname}!
恭喜您,注册成功!
以上,例子也搭建完毕。接下来使用tomcat运行该项目。
接下来,看效果
1.在浏览器输入url:http://localhost:8080/ssm-maven/register/toRegisterPage
2.进入注册页面,并填写,提交
3.注册成功,进入欢迎页面
至此,整个框架搭建成功并验证成功!