一. 创建 maven 聚合工程
1. 创建 Project maven 父工程 ssm;
2. 依次创建 Module maven 子工程 ssm_utils -> ssm_domain -> ssm_dao -> ssm_service;
3. 最后创建 Module maven 骨架子工程 ssm_web.
二. 父工程导入依赖坐标, 子工程相互关联依赖
1. 在父工程 pom.xml 中导入开发需要关联的相关依赖:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.itcast</groupId>
<artifactId>ssm</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>ssm_utils</module>
<module>ssm_domain</module>
<module>ssm_dao</module>
<module>ssm_service</module>
<module>ssm_web</module>
</modules>
<!-- 统一管理jar包版本 -->
<properties>
<spring.version>5.0.2.RELEASE</spring.version>
<slf4j.version>1.6.6</slf4j.version>
<log4j.version>1.2.12</log4j.version>
<shiro.version>1.2.3</shiro.version>
<mysql.version>5.1.6</mysql.version>
<mybatis.version>3.4.5</mybatis.version>
<spring.security.version>5.0.1.RELEASE</spring.security.version>
</properties>
<!-- 锁定jar包版本 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<!-- 项目依赖jar包 -->
<dependencies>
<!-- spring -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.6.8</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- log start -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j.version}</version>
</dependency>
<!-- log end -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.0</version>
</dependency>
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.2</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>${spring.security.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>${spring.security.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>${spring.security.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-taglibs</artifactId>
<version>${spring.security.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.9</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
<!-- 添加tomcat7插件 -->
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
</plugin>
</plugins>
</build>
</project>
2. 子工程中依赖关系
子工程 ssm_utils 自动继承父工程 ssm :
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>ssm</artifactId>
<groupId>com.itcast</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.itcast</groupId>
<artifactId>ssm_utils</artifactId>
<version>1.0-SNAPSHOT</version>
</project>
子工程 ssm_domain 依赖 子工程 ssm_utils :
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>ssm</artifactId>
<groupId>com.itcast</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.itcast</groupId>
<artifactId>ssm_domain</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 依赖子工程 ssm_utils -->
<dependencies>
<dependency>
<groupId>com.itcast</groupId>
<artifactId>ssm_utils</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
子工程 ssm_dao 依赖 子工程 ssm_domain :
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>ssm</artifactId>
<groupId>com.itcast</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.itcast</groupId>
<artifactId>ssm_dao</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 依赖子工程 ssm_domain -->
<dependencies>
<dependency>
<groupId>com.itcast</groupId>
<artifactId>ssm_domain</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
子工程 ssm_service 依赖 子工程 ssm_dao :
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>ssm</artifactId>
<groupId>com.itcast</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.itcast</groupId>
<artifactId>ssm_service</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 依赖子工程 ssm_dao -->
<dependencies>
<dependency>
<groupId>com.itcast</groupId>
<artifactId>ssm_dao</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
子工程 ssm_web 依赖 子工程 ssm_service :
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>ssm</artifactId>
<groupId>com.itcast</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.itcast</groupId>
<artifactId>ssm_web</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<!-- 依赖子工程 ssm_service -->
<dependencies>
<dependency>
<groupId>com.itcast</groupId>
<artifactId>ssm_service</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
三. 准备后台数据
在 MySQL 数据库中创建一张表, 用户后期在前台页面对其做 CRUD 操作:
CREATE DATABASE emp;
USE emp;
-- 创建表
DROP TABLE IF EXISTS `emp`;
CREATE TABLE `emp` (
`id` INT(20) NOT NULL AUTO_INCREMENT, -- id 自增
`name` VARCHAR(20) DEFAULT NULL,
`sex` VARCHAR(20) DEFAULT NULL,
`age` VARCHAR(20) DEFAULT NULL,
`birthday` VARCHAR(20) DEFAULT NULL,
`marry` VARCHAR(20) DEFAULT NULL,
`email` VARCHAR(20) DEFAULT NULL,
`deptId` VARCHAR(20) DEFAULT NULL,
PRIMARY KEY (`id`) -- 声明主键
) ENGINE=INNODB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;
-- 添加字段
INSERT INTO `emp` VALUES (NULL, '张三', '男', '12', '1999-08-03', '单身', '1234567@qq.com', '1');
INSERT INTO `emp` VALUES (NULL, '李思', '女', '16', '1999-08-03', '单身', '2345678@qq.com', '3');
INSERT INTO `emp` VALUES (NULL, '王五', '男', '33', '1999-08-03', '已婚', '3456789@qq.com', '2');
INSERT INTO `emp` VALUES (NULL, '赵六', '男', '15', '1999-08-03', '单身', '4567890@qq.com', '4');
INSERT INTO `emp` VALUES (NULL, '田七', '男', '21', '1999-08-03', '单身', '5678901@qq.com', '5');
-- 查询表
SELECT * FROM emp;
四. 代码正式编写
1. 在子工程 ssm_utils 中创建开发过程中要使用到的自定义工具类 DateUtils 的工具类
package com.cast.domain;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* 日期转换格式类
*/
public class DateUtils {
//将日期格式转换成字符串格式
public static String dateToString(Date date, String str){
SimpleDateFormat sdf = new SimpleDateFormat(str);
String strDate = sdf.format(date);
return strDate;
}
//将字符串格式转换成日期格式
public static Date stringToDate(String str, Date date) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat(str);
Date dateStr = sdf.parse(str);
return dateStr;
}
}
2. 在子工程 ssm_domain 中创建 emp 表的实体类封装
package com.cast.domain;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
/**
* 封装 Emp 类
*/
public class Emp {
private int id; //编号
private String name; //姓名
private String sex; //性别 //数据库列名
private String gender; //性别 //前端页面选择属性
private String age; //年龄
@DateTimeFormat(pattern = "yyyy-MM-dd") //将页面传递过来的字符串类型是数据转换成指定的日期格式
private Date birthday; //生日 //数据库列名
private String birthdayStr; //生日
private Integer marry; //婚否 // 1 单身 2 已婚
private String marryStr; //婚否
private String email; //邮箱
private String deptId; //部门id
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
if("man".equals(gender)){
sex = "男";
} else if ("woman".equals(gender)) {
sex = "女";
}
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getBirthdayStr() {
if (birthday != null) {
birthdayStr = DateUtils.dateToString(birthday, "yyyy-MM-dd");
}
return birthdayStr;
}
public void setBirthdayStr(String birthdayStr) {
this.birthdayStr = birthdayStr;
}
public Integer getMarry() {
return marry;
}
public void setMarry(Integer marry) {
this.marry = marry;
}
public String getMarryStr() {
if(marry != null) {
if (marry == 1) {
marryStr = "单身";
} else if (marry == 2) {
marryStr = "已婚";
}
}
return marryStr;
}
public void setMarryStr(String marryStr) {
this.marryStr = marryStr;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getDeptId() {
return deptId;
}
public void setDeptId(String deptId) {
this.deptId = deptId;
}
}
3. 子工程 ssm_dao 持久层接口代码编写
package com.cast.dao;
import com.cast.domain.Emp;
import org.apache.ibatis.annotations.*;
import java.util.List;
/**
* 持久层 dao 接口
*/
public interface IEmpDao {
//查询所有 Emp
@Select("select * from emp")
@Results({
@Result(id = true, property = "id", column = "id"),
@Result(property = "name", column = "name"),
@Result(property = "gender", column = "sex"),
@Result(property = "age", column = "age"),
@Result(property = "birthdayStr", column = "birthday"),
@Result(property = "marryStr", column = "marry"),
@Result(property = "email", column = "email"),
@Result(property = "deptId", column = "deptId")
})
public List<Emp> findAll() throws Exception;
//通过 id 查询对应 Emp
@Select("select * from emp where id = #{id}")
@Results({
@Result(id = true, property = "id", column = "id"),
@Result(property = "name", column = "name"),
@Result(property = "gender", column = "sex"),
@Result(property = "age", column = "age"),
@Result(property = "birthdayStr", column = "birthday"),
@Result(property = "marryStr", column = "marry"),
@Result(property = "email", column = "email"),
@Result(property = "deptId", column = "deptId")
})
public Emp findById(String id) throws Exception;
//添加一个 Emp
@Insert("insert into emp values(null,#{name},#{sex},#{age},#{birthdayStr},#{marryStr},#{email},#{deptId})")
public void addEmp(Emp emp) throws Exception;
//通过 id 修改某个 Emp
@Update("update emp set name=#{name},sex=#{sex},age=#{age},birthday=#{birthdayStr},marry=#{marryStr},email=#{email},deptId=#{deptId} where id=#{id}")
public void updateEmp(Emp emp) throws Exception;
//通过 id 删除某个 Emp
@Delete("delete from Emp where id = #{id}")
public void deleteEmp(String id) throws Exception;
}
4. 子工程 ssm_service 业务层接口代码编写
package com.cast.service;
import com.cast.domain.Emp;
import java.util.List;
/**
* 业务层 service 接口
*/
public interface IEmpService {
//查询所有 Emp
public List<Emp> findAll() throws Exception;
//通过 id 查询对应 Emp
public Emp findById(String id) throws Exception;
//添加一个 Emp
public void addEmp(Emp emp) throws Exception;
//通过 id 修改某个 Emp
public void updateEmp(Emp empr) throws Exception;
//通过 id 删除某个 Emp
public void deleteEmp(String id) throws Exception;
}
子工程 ssm_service 业务层接口实现类代码编写
package com.cast.service.impl;
import com.cast.dao.IEmpDao;
import com.cast.domain.Emp;
import com.cast.service.IEmpService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
* 业务层 service 接口实现类
*/
@Service
@Transactional
public class EmpServiceImpl implements IEmpService {
@Autowired
private IEmpDao empDao;
public List<Emp> findAll() throws Exception {
return empDao.findAll();
}
public Emp findById(String id) throws Exception {
return empDao.findById(id);
}
public void addEmp(Emp emp) throws Exception {
empDao.addEmp(emp);
}
public void updateEmp(Emp emp) throws Exception {
empDao.updateEmp(emp);
}
public void deleteEmp(String id) throws Exception {
empDao.deleteEmp(id);
}
}
5. 子工程 ssm_web 表现层代码编写
package com.cast.controller;
import com.cast.domain.Emp;
import com.cast.service.IEmpService;
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 java.util.List;
/**
* 表现控制层
*/
@Controller
@RequestMapping("/emp")
public class EmpController {
@Autowired
private IEmpService empService;
//查询所有 Emp
@RequestMapping("/findAll.do")
private ModelAndView findAll() throws Exception {
ModelAndView mv = new ModelAndView();
List<Emp> empList = empService.findAll();
mv.addObject("empList", empList);
mv.setViewName("emp-list");
return mv;
}
//通过 id 查询对应 Emp
@RequestMapping("/findById.do")
private ModelAndView findById(String id) throws Exception {
ModelAndView mv = new ModelAndView();
Emp emp = empService.findById(id);
mv.addObject("emp", emp);
mv.setViewName("emp-update");
return mv;
}
//添加一个 User
@RequestMapping("/addEmp.do")
private String addEmp(Emp emp) throws Exception {
empService.addEmp(emp);
return "redirect:findAll.do";
}
@RequestMapping("/updateEmp.do")
private String updateEmp(Emp emp) throws Exception {
empService.updateEmp(emp);
return "redirect:findAll.do";
}
//通过 id 删除某个 emp
@RequestMapping("/deleteEmp.do")
private String deleteEmp(String id) throws Exception {
empService.deleteEmp(id);
return "redirect:findAll.do";
}
}
6. 在子工程 ssm_web 下 resources 文件夹下创建连接池配置文件 jdbc.properties 文件
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/emp
jdbc.username=root
jdbc.password=root
7. 在子工程 ssm_web 下 resources 文件夹下创建 applicationContext.xml 文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 引入连接池配置文件 -->
<context:property-placeholder location="classpath:jdbc.properties"/>
<!--配置连接池-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<!--配置生产SqlSession对象的工厂-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!--扫描pojo包,给包下所有pojo对象起别名-->
<property name="typeAliasesPackage" value="com.cast.domain"/>
</bean>
<!--扫描接口包路径,生成包下所有接口的代理对象,并且放入spring容器中-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.cast.dao"/>
</bean>
<!--组件扫描配置-->
<context:component-scan base-package="com.cast.service"/>
<!--配置事务管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!--注入连接池-->
<property name="dataSource" ref="dataSource"/>
</bean>
<!--开启事务注解的支持-->
<tx:annotation-driven/>
</beans>
8. 在子工程 ssm_web 下 resources 文件夹下创建 spring-mvc.xml 文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!--组件扫描-->
<context:component-scan base-package="com.cast.controller"/>
<!--处理器映射器,处理器适配器,springmvc注解支持-->
<mvc:annotation-driven/>
<!--视图解析器-->
<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/pages/"/>
<property name="suffix" value=".jsp"/>
</bean>
<!--释放静态资源-->
<mvc:default-servlet-handler/>
</beans>
9. 在子工程 ssm_web 下 resources 文件夹下创建 log4j.properties 文件
# Set root category priority to INFO and its only appender to CONSOLE.
#log4j.rootCategory=INFO, CONSOLE debug info warn error fatal
log4j.rootCategory=debug, CONSOLE, LOGFILE
# Set the enterprise logger category to FATAL and its only appender to CONSOLE.
log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE
# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n
# LOGFILE is set to be a File appender using a PatternLayout.
# log4j.appender.LOGFILE=org.apache.log4j.FileAppender
# log4j.appender.LOGFILE.File=d:\axis.log
# log4j.appender.LOGFILE.Append=true
# log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
# log4j.appender.LOGFILE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n
10. 在子工程 ssm_web 下 找到 web.xml 文件, 配置核心
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<!--编码过滤器-->
<filter>
<filter-name>encoding</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>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--springmvc的核心servlet 前端控制器-->
<servlet>
<servlet-name>spring-mvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring-mvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!--配置spring核心监听器-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--重新指定spring配置文件的路径-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
</web-app>
五. 引入前端资源 略....
以下为一段添加新用户的前端 form 表单, 当用户输入完相关信息, 点击 保存 按钮, from 表单将直接执行 action 属性, 并自动封装form表单中的参数一起请求到服务器 /emp/addEmp.do 参数一并传递.
<%--添加表单--%>
<form action="${pageContext.request.contextPath}/emp/addEmp.do" method="post">
<!-- 正文区域 -->
<section class="content">
<%--员工信息--%>
<div class="panel panel-default">
<%--用户输入的员工信息表--%>
<div class="row data-type">
<div class="panel panel-default">
<div class="panel-heading">员工信息</div>
<div class="row data-type">
<div class="col-md-2 title">姓名</div>
<div class="col-md-4 data">
<input type="text" class="form-control" name="name" id="name" placeholder="姓名" value="">
</div>
<div class="col-md-2 title">性别</div>
<div class="col-md-4 data">
<select class="form-control select2" style="width: 100%" name="gender">
<option value="man" selected="selected">男</option>
<option value="woman">女</option>
</select>
</div>
<div class="col-md-2 title">年龄</div>
<div class="col-md-4 data">
<input type="text" class="form-control" name="age" id="age" placeholder="年龄" value="">
</div>
<div class="col-md-2 title">生日</div>
<div class="col-md-4 data">
<div class="input-group date">
<div class="input-group-addon">
<i class="fa fa-calendar"></i>
</div>
<input type="text" class="form-control pull-right" id="datepicker-a3" name="birthday">
</div>
</div>
<div class="col-md-2 title">婚否</div>
<div class="col-md-4 data">
<select class="form-control select2" style="width: 100%" name="marry">
<option value="1" selected="selected">单身</option>
<option value="2">已婚</option>
</select>
</div>
<div class="col-md-2 title">邮箱</div>
<div class="col-md-4 data">
<input type="text" class="form-control" name="email" id="email" placeholder="邮箱账号" value="">
</div>
<div class="col-md-2 title">部门</div>
<div class="col-md-4 data">
<select class="form-control select2" style="width: 100%" name="deptId">
<option value="1" selected="selected">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
</select>
</div>
</div>
</div>
<%--保存 / 返回 按钮--%>
<div class="box-tools text-center">
<button type="submit" class="btn bg-maroon">保存</button>
<button type="button" class="btn bg-default" onclick="history.back(-1);">返回</button>
</div>
</div>
</div>
</section>
</form>
代码下载: https://pan.baidu.com/s/1k3dKpKkfIp2WHgya7LvV2Q
***此代码需在 jdk1.8 下运行使用***