目录
1.整合思路与开发步骤
1.1整合思路
1.2开发步骤
2.SSM整合开发 代码部分
2.1 项目的大体结构
2.2 使用Navicat创建一个表(student2)
2.3 在pom.xml文件中添加相关依赖
2.4 在web.xml文件中。声明容器对象
2.5 编写mybatis、spring、springmvc的配置文件
2.5.1 mybatis
2.5.3 springmvc
2.6 编写Java代码(实体类、dao接口和对应的mapper文件、service类、controller类)
2.6.1 创建一个实体类
2.6.2 创建实体类对应的dao接口和接口对应的mapper文件
2.6.3 创建dao接口对应的service接口和实现类
2.6.4 创建一个控制器类(接收并处理请求)
2.7 创建视图文件(jsp)
2.7.1 首页(index.jsp)
2.7.2 注册学生页面(addStudent.jsp)
2.7.3 查询学生页面(listStudent.jsp)
2.7.4 结果页面(result.jsp)
2.8.启动Tomcat检验结果
1.整合思路与开发步骤
1.1整合思路
springMVC也基本快学完了,来整合一下试试感觉。很简单也很简陋,只是实现一点功能。重点是思路。SSM三个框架分别对应了三层架构中的每一层。Spring: 业务逻辑层;SpringMVC:视图层;MyBatis:持久层。
整合前,我们要明白什么是我们要写的,什么是需要交给容器帮我们干的。需要把对象交给容器,让容器去创建项目中要使用的Java对象,目前有两个容器。
第一个:Spring容器,Spring容器管理的是service对象,是业务逻辑层对象的容器。
第二个:SpringMVC容器,这个容器管理的是控制器对象,也就是视图层的对象。
![]()
SpringMVC——SSM整合小项目1.整合思路与开发步骤 2.SSM整合开发 代码部分2.8.启动Tomcat检验结果
1.2开发步骤
1. 使用Navicat创建一个要操作的表。
2. IDEA中使用maven创建一个web项目。
3. 在pom.xml文件中添加相关依赖。(spring、spring事务、springmvc、mybatis、mybatis-spring、mysql驱动、servlet、jsp、jackson、druid)
4.在web.xml文件中声明容器对象
1)声明spring的监听器 ContextLoaderListener:创建spring容器对象(service、dao)。
2)声明springmvc的中央调度器 DispatcherServlet:创建springmvc容器对象(controller)。
3)声明字符集过滤器 CharacterEncodingFilter,解决post请求乱码的问题。
5.创建项目中特定的包:entity、dao、service、controller。(package)
6.编写mybatis配置文件、spring配置文件、springmvc配置文件。(xml)
7.编写Java代码:实体类、dao接口和对应的mapper文件、service类、controller类,使用注解声明对象、给对象赋值。
8.创建视图文件。(各种 jsp 页面,发起请求,响应请求等)
2.SSM整合开发 代码部分
2.1 项目的大体结构
2.2 使用Navicat创建一个表(student2)
IDEA中使用maven创建一个web项目
2.3 在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>org.example</groupId>
<artifactId>SSM01</artifactId>
<version>1.0.0</version>
<packaging>war</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<!-- servlet依赖 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!-- jsp依赖 -->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2.1-b03</version>
<scope>provided</scope>
</dependency>
<!-- jackson依赖 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.0</version>
</dependency>
<!-- spring依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
<!-- spring事务依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
<!-- springmvc依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
<!-- mybatis依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.1</version>
</dependency>
<!-- mybatis-spring集成依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.1</version>
</dependency>
<!-- mysql驱动依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.9</version>
</dependency>
<!-- druid连接池依赖 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.12</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>src/main/java</directory><!--所在的目录-->
<includes>
<include>**/*.properties</include><!--包括目录下的.properties,.xml 文件都会扫描到-->
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
</project>
2.4 在web.xml文件中。声明容器对象
<!-- 声明Spring监听器-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:conf/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 声明springmvc的中央调度器-->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:conf/dispatcherServlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<!-- 字符集的过滤器-->
<filter>
<filter-name>characterEncodingFilter</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>
<!-- 强制请求(request)对象使用encoding的编码方式-->
<param-name>forceRequestEncoding</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<!-- 强制应答(response)对象使用encoding的编码方式-->
<param-name>forceResponseEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
2.5 编写mybatis、spring、springmvc的配置文件
2.5.1 mybatis
jdbc.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8
jdbc.username=root
jdbc.password=123456
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--设置日志-->
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
<mappers>
<package name="com.liuhaiyang.dao"/>
</mappers>
</configuration>
2.5.2 spring
<?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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!-- spring配置文件:声明service、dao、工具类、事务配置 -->
<!-- 加载外部属性配置文件 -->
<context:property-placeholder location="classpath:/conf/jdbc.properties"/>
<!-- 声明组件扫描器 -->
<context:component-scan base-package="com.liuhaiyang.service"/>
<!-- 创建数据源-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<!-- 创建SqlSessionFactory对象 -->
<bean id="factory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:/conf/mybatis.xml"/>
</bean>
<!-- 创建SqlSession对象,通过反射机制加载dao接口对应的mapper文件 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="sqlSessionFactoryBeanName" value="factory"/>
<property name="basePackage" value="com.liuhaiyang.dao"/>
</bean>
</beans>
2.5.3 springmvc
<?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: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 https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- springmvc的配置文件,声明的是controller,视图解析器等web开发中的对象-->
<!-- 组件扫描器-->
<context:component-scan base-package="com.liuhaiyang.controller"/>
<!--视图解析器 帮助处理视图 主要帮助我们处理重复的多余的冗余路径等-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/Jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
<!--声明springmvc注解驱动
作用:1.创建HttpMessageConverter接口的7个实现类对象,处理Java对象到json的转换
2.解决静态资源中,动态资源访问失败的问题.-->
<mvc:annotation-driven />
</beans>
2.6 编写Java代码(实体类、dao接口和对应的mapper文件、service类、controller类)
2.6.1 创建一个实体类
package com.liuhaiyang.domain;
public class Student {
private Integer id;
private String name;
private Integer age;
//getter and setter
//toString
}
2.6.2 创建实体类对应的dao接口和接口对应的mapper文件
package com.liuhaiyang.dao;
import com.liuhaiyang.domain.Student;
import java.util.List;
public interface StudentDao {
int insertStudent(Student student);
List<Student> selectStudent();
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.liuhaiyang.dao.StudentDao">
<!--使用insert,uodate,delete,select标签写sql-->
<insert id="insertStudent">
insert into student2(name,age) values (#{name},#{age})
</insert>
<select id="selectStudent" resultType="com.liuhaiyang.domain.Student">
select id,name,age from student2
</select>
</mapper>
2.6.3 创建dao接口对应的service接口和实现类
package com.liuhaiyang.service;
import com.liuhaiyang.domain.Student;
import java.util.List;
public interface StudentService {
int addStudent(Student student);
List<Student> findStudent();
}
package com.liuhaiyang.service.Impl;
import com.liuhaiyang.dao.StudentDao;
import com.liuhaiyang.domain.Student;
import com.liuhaiyang.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class StudentServiceImpl implements StudentService {
/**
* dao是引用类型。Student类型的对象是在spring的配置文件中创建的对象
* 引用类型自动注入 @Autowired, @Resource
*/
@Autowired //在dispatcherServlet.xml中含有它的扫描器
private StudentDao studentDao;
@Override
public int addStudent(Student student) {
int a= studentDao.insertStudent(student);
return a;
}
@Override
public List<Student> findStudent() {
List<Student> list=studentDao.selectStudent();
return list;
}
public void setStudentDao(StudentDao studentDao) {
}
}
2.6.4 创建一个控制器类(接收并处理请求)
package com.liuhaiyang.controller;
import com.liuhaiyang.domain.Student;
import com.liuhaiyang.service.StudentService;
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.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import java.util.List;
@Controller
@RequestMapping("/student") //请求地址的前缀
public class StudentController {
// 声明service对象,调用其中的方法
// 引用类型自动注入,这里使用注解 @Autowired 或者 @Resource
@Autowired
private StudentService studentService;
//添加学生
@RequestMapping(value = "/addstudent.do")
public ModelAndView addStudent(Student student) {
ModelAndView mv=new ModelAndView();
int rows=studentService.addStudent(student);
System.out.println(rows);
String msg="注册失败!!!";
if (rows>0){
//注册成功
msg="注册成功!!!!";
}
mv.addObject("msg",student.getName()+","+msg);
mv.setViewName("result");
return mv;
}
@RequestMapping("/queryStudent.do")
@ResponseBody
public List<Student> queryStudent(){
List<Student> lists=null;
lists =studentService.findStudent();
for (Student student:lists){
System.out.println(student);
}
return lists;
}
}
2.7 创建视图文件(jsp)
2.7.1 首页(index.jsp)
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>首页</title>
</head>
<body>
<div align="center">
<p>SSM整合开发的例子</p>
<table>
<tr>
<td><a href="addStudent.jsp" target="_blank" rel="external nofollow" > 注册学生</a> </td>
<td> </td>
<td><a href="listStudent.jsp" target="_blank" rel="external nofollow" > 查看学生</a> </td>
</tr>
</table>
</div>
</body>
</html>
2.7.2 注册学生页面(addStudent.jsp)
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page pageEncoding="utf-8"%>
<%request.setCharacterEncoding("utf-8");%>
<html>
<head>
<title>添加学生</title>
</head>
<body>
<div align="center">
<p>注册学生</p>
<form action="student/addstudent.do" method="post">
<table>
<tr>
<td>姓名:</td>
<td><input type="text" name="name"></td>
</tr>
<tr>
<td>年龄:</td>
<td><input type="text" name="age"></td>
</tr>
<tr>
<td>操作:</td>
<td><input type="submit" value="注册"></td>
</tr>
</table>
</form>
</div>
</body>
</html>
2.7.3 查询学生页面(listStudent.jsp)
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>浏览学生</title>
<script type="text/javascript" src="js/jquery-3.6.0.min.js"></script>
<script type="text/javascript">
$(function () {
getinfo();
$("#doajax").click(getinfo())
})
function getinfo(){
$.ajax({
url:"student/queryStudent.do",
dataType:"json",
success:function (resp) {
$("#stuinfo").empty();
$.each(resp,function (i,n) {
$("#stuinfo").append("<tr><td>"+n.id+"</td><td>"+n.name+"</td><td>"+n.age+"</td></tr>");
})
}
})
}
</script>
</head>
<body>
<div align="center">
<p>浏览学生<button id="doajax">获得学生数据</button></p>
<table>
<thead>
<tr>
<td>id</td>
<td>姓名</td>
<td>年龄</td>
</tr>
</thead>
<tbody id="stuinfo">
</tbody>
</table>
</div>
</body>
</html>
2.7.4 结果页面(result.jsp)
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
result.jsp , ${msg}
</body>
</html>
2.8.启动Tomcat检验结果
添加学生
查看学生数据库的图就在上面