小言_互联网的博客

SSM整合——简单的小项目实战

597人阅读  评论(0)

文章目录:

1.SSM整合思路

1.1 两个容器的创建 

1.2 SSM整合开发的步骤

2.SSM整合开发 

2.1 项目的大体结构 

2.2 使用Navicat创建一个表(student2) 

2.3 IDEA中使用maven创建一个web项目

2.4 在pom.xml文件中添加相关依赖

2.5 在web.xml文件中。声明容器对象

2.6 创建项目中特定的包(entity、dao、service、controller)

2.7 编写mybatis、spring、springmvc的配置文件 

2.7.1 mybatis 

2.7.2 spring

2.7.3 springmvc

2.8 编写Java代码(实体类、dao接口和对应的mapper文件、service类、controller类)

2.8.1 创建一个实体类 

2.8.2 创建实体类对应的dao接口和接口对应的mapper文件 

2.8.3 创建dao接口对应的service接口和实现类

2.8.4 创建一个控制器类(接收并处理请求)

2.9 创建视图文件(jsp)

2.9.1 首页(index.jsp)

2.9.2 注册学生页面(addStudent.jsp)

2.9.3 注册成功和失败的页面(success.jsp、fail.jsp)

2.9.4 查询学生页面(queryStudent.jsp)

2.10 为项目配置tomcat,启动测试!!!

2.10.1 注册学生的测试结果 

2.10.2 查询学生的测试结果 

3.写在结尾!!!


1.SSM整合思路

SSM:Spring + SpringMVC + MyBatis,就是使用这三个框架的优势功能来完成一些项目的构建。三个框架分别对应了三层架构中的每一层。Spring: 业务逻辑层;SpringMVC:视图层;MyBatis:持久层。

SSM整合了话,就需要把对象交给容器,让容器去创建项目中要使用的Java对象,目前有两个容器。

第一个:Spring容器,Spring容器管理的是service和dao等对象,是业务逻辑层对象的容器。

第二个:SpringMVC容器,这个容器管理的是控制器对象,也就是视图层的对象。

1.1 两个容器的创建 

Spring容器的创建:在web.xml文件中声明 监听器 ContextLoaderListener 这个功能框架中已经写好了,就是创建Spring的容器对象 WebApplicationContext,在创建 WebApplicationContext 对象时,读取Spring的配置文件,遇到<bean>标签或者注解,就可以创建service、dao等对象,这些对象最终都放在Spring容器中。

SpringMVC容器的创建:在web.xml文件中声明 中央调度器 DispatcherServlet,在这个servlet的 init() 方法中,创建了容器对象WebApplicationContext,在创建 WebApplicationContext 对象时,读取SpringMVC的配置文件,如果遇到相应的注解,则创建控制器对象,创建好的对象放在SpringMVC容器中。

1.2 SSM整合开发的步骤

  • 使用Navicat创建一个要操作的表。(也可以直接在IDEA中写sql语句来创建)
  • IDEA中使用maven创建一个web项目。
  • 在pom.xml文件中添加相关依赖。(spring、spring事务、springmvc、mybatis、mybatis-spring、mysql驱动、servlet、jsp、jackson、druid) 
  • 在web.xml文件中声明容器对象

         1)声明spring的监听器 ContextLoaderListener:创建spring容器对象(service、dao)。

         2)声明springmvc的中央调度器 DispatcherServlet:创建springmvc容器对象(controller)。

         3)声明字符集过滤器 CharacterEncodingFilter,解决post请求乱码的问题。

  • 创建项目中特定的包:entity、dao、service、controller。(package)
  • 编写mybatis配置文件、spring配置文件、springmvc配置文件。(xml)
  • 编写Java代码:实体类、dao接口和对应的mapper文件、service类、controller类,使用注解声明对象、给对象赋值。
  • 创建视图文件。(各种 jsp 页面,发起请求)
  • 启动 tomcat,测试!!!

2.SSM整合开发 

2.1 项目的大体结构 

在这个SSM整合开发的项目中,用到了这些内容(JavaSE就不多说了。。。Java Web相关的有:JDBC、HTML、JS、json、jQuery、Ajax、Tomcat、Servlet、JSP、EL,最后是框架:MyBatis、Spring、SpringMVC) 。

2.2 使用Navicat创建一个表(student2) 

2.3 IDEA中使用maven创建一个web项目

2.4 在pom.xml文件中添加相关依赖

依赖项比较多,毕竟是三个框架整合在一起了!!! 


  
  1. <!-- servlet依赖 -->
  2. <dependency>
  3. <groupId>javax.servlet </groupId>
  4. <artifactId>javax.servlet-api </artifactId>
  5. <version>3.1.0 </version>
  6. <scope>provided </scope>
  7. </dependency>

  
  1. <!-- jsp依赖 -->
  2. <dependency>
  3. <groupId>javax.servlet.jsp </groupId>
  4. <artifactId>jsp-api </artifactId>
  5. <version>2.2.1-b03 </version>
  6. <scope>provided </scope>
  7. </dependency>

  
  1. <!-- jackson依赖 -->
  2. <dependency>
  3. <groupId>com.fasterxml.jackson.core </groupId>
  4. <artifactId>jackson-databind </artifactId>
  5. <version>2.9.0 </version>
  6. </dependency>
  7. <dependency>
  8. <groupId>com.fasterxml.jackson.core </groupId>
  9. <artifactId>jackson-core </artifactId>
  10. <version>2.9.0 </version>
  11. </dependency>

  
  1. <!-- spring依赖 -->
  2. <dependency>
  3. <groupId>org.springframework </groupId>
  4. <artifactId>spring-context </artifactId>
  5. <version>5.2.5.RELEASE </version>
  6. </dependency>

  
  1. <!-- spring事务依赖 -->
  2. <dependency>
  3. <groupId>org.springframework </groupId>
  4. <artifactId>spring-tx </artifactId>
  5. <version>5.2.5.RELEASE </version>
  6. </dependency>
  7. <dependency>
  8. <groupId>org.springframework </groupId>
  9. <artifactId>spring-jdbc </artifactId>
  10. <version>5.2.5.RELEASE </version>
  11. </dependency>

  
  1. <!-- springmvc依赖 -->
  2. <dependency>
  3. <groupId>org.springframework </groupId>
  4. <artifactId>spring-webmvc </artifactId>
  5. <version>5.2.5.RELEASE </version>
  6. </dependency>

  
  1. <!-- mybatis依赖 -->
  2. <dependency>
  3. <groupId>org.mybatis </groupId>
  4. <artifactId>mybatis </artifactId>
  5. <version>3.5.1 </version>
  6. </dependency>

  
  1. <!-- mybatis-spring集成依赖 -->
  2. <dependency>
  3. <groupId>org.mybatis </groupId>
  4. <artifactId>mybatis-spring </artifactId>
  5. <version>1.3.1 </version>
  6. </dependency>

  
  1. <!-- mysql驱动依赖 -->
  2. <dependency>
  3. <groupId>mysql </groupId>
  4. <artifactId>mysql-connector-java </artifactId>
  5. <version>5.1.9 </version>
  6. </dependency>

  
  1. <!-- druid连接池依赖 -->
  2. <dependency>
  3. <groupId>com.alibaba </groupId>
  4. <artifactId>druid </artifactId>
  5. <version>1.1.12 </version>
  6. </dependency>

2.5 在web.xml文件中。声明容器对象


  
  1. <!-- 声明spring监听器 -->
  2. <context-param>
  3. <param-name>contextConfigLocation </param-name>
  4. <param-value>classpath:/conf/applicationContext.xml </param-value>
  5. </context-param>
  6. <listener>
  7. <listener-class>org.springframework.web.context.ContextLoaderListener </listener-class>
  8. </listener>

  
  1. <!-- 声明springmvc的中央调度器 -->
  2. <servlet>
  3. <servlet-name>DispatcherServlet </servlet-name>
  4. <servlet-class>org.springframework.web.servlet.DispatcherServlet </servlet-class>
  5. <init-param>
  6. <param-name>contextConfigLocation </param-name>
  7. <param-value>classpath:/conf/dispatcherServlet.xml </param-value>
  8. </init-param>
  9. <load-on-startup>1 </load-on-startup>
  10. </servlet>
  11. <servlet-mapping>
  12. <servlet-name>DispatcherServlet </servlet-name>
  13. <url-pattern>*.do </url-pattern>
  14. </servlet-mapping>

  
  1. <!-- 声明字符集过滤器 -->
  2. <filter>
  3. <filter-name>CharacterEncodingFilter </filter-name>
  4. <filter-class>org.springframework.web.filter.CharacterEncodingFilter </filter-class>
  5. <init-param>
  6. <param-name>encoding </param-name>
  7. <param-value>utf-8 </param-value>
  8. </init-param>
  9. <init-param>
  10. <param-name>forceRequestEncoding </param-name>
  11. <param-value>true </param-value>
  12. </init-param>
  13. <init-param>
  14. <param-name>forceResponseEncoding </param-name>
  15. <param-value>true </param-value>
  16. </init-param>
  17. </filter>
  18. <filter-mapping>
  19. <filter-name>CharacterEncodingFilter </filter-name>
  20. <url-pattern>/* </url-pattern>
  21. </filter-mapping>

2.6 创建项目中特定的包(entity、dao、service、controller

2.7 编写mybatis、spring、springmvc的配置文件 

2.7.1 mybatis 


  
  1. jdbc.url=jdbc:mysql: //localhost:3306/ssm?useUnicode=true&amp;characterEncoding=utf-8
  2. jdbc.username=root
  3. jdbc.password= 12345678

  
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE configuration
  3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-config.dtd">
  5. <configuration>
  6. <!-- 设置日志 -->
  7. <settings>
  8. <setting name="logImpl" value="STDOUT_LOGGING"/>
  9. </settings>
  10. <mappers>
  11. <!-- 加载dao包下的所有mapper文件 -->
  12. <package name="com.songzihao.dao"/>
  13. </mappers>
  14. </configuration>

2.7.2 spring


  
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:context= "http://www.springframework.org/schema/context"
  5. 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">
  6. <!-- spring配置文件:声明service、dao、工具类、事务配置 -->
  7. <!-- 加载外部属性配置文件 -->
  8. <context:property-placeholder location="classpath:/conf/jdbc.properties" />
  9. <!-- 声明组件扫描器 -->
  10. <context:component-scan base-package="com.songzihao.service" />
  11. <!-- 创建数据源 -->
  12. <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
  13. <property name="url" value="${jdbc.url}" />
  14. <property name="username" value="${jdbc.username}" />
  15. <property name="password" value="${jdbc.password}" />
  16. </bean>
  17. <!-- 创建SqlSessionFactory对象 -->
  18. <bean id="factory" class="org.mybatis.spring.SqlSessionFactoryBean">
  19. <property name="dataSource" ref="dataSource" />
  20. <property name="configLocation" value="classpath:/conf/mybatis.xml" />
  21. </bean>
  22. <!-- 创建SqlSession对象,通过反射机制加载dao接口对应的mapper文件 -->
  23. <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
  24. <property name="sqlSessionFactoryBeanName" value="factory" />
  25. <property name="basePackage" value="com.songzihao.dao" />
  26. </bean>
  27. <!-- 事务配置 -->
  28. </beans>

2.7.3 springmvc


  
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:context= "http://www.springframework.org/schema/context"
  5. xmlns:mvc= "http://www.springframework.org/schema/mvc"
  6. 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">
  7. <!-- springmvc配置文件:声明controller、视图解析器等web开发中的对象 -->
  8. <!-- 声明组件扫描器 -->
  9. <context:component-scan base-package="com.songzihao.controller" />
  10. <!-- 声明视图解析器 -->
  11. <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  12. <property name="prefix" value="/WEB-INF/jsp/" />
  13. <property name="suffix" value=".jsp" />
  14. </bean>
  15. <!-- 声明springmvc注解驱动 -->
  16. <mvc:annotation-driven />
  17. </beans>

2.8 编写Java代码(实体类、dao接口和对应的mapper文件、service类、controller类

2.8.1 创建一个实体类 


  
  1. package com.songzihao.entity;
  2. /**
  3. *
  4. */
  5. public class Student {
  6. private Integer id;
  7. private String name;
  8. private Integer age;
  9. //getter and setter
  10. //toString
  11. }

2.8.2 创建实体类对应的dao接口和接口对应的mapper文件 


  
  1. package com.songzihao.dao;
  2. import com.songzihao.entity.Student;
  3. import java.util.List;
  4. /**
  5. *
  6. */
  7. public interface StudentDao {
  8. int insertStudent(Student student);
  9. List<Student> selectStudent();
  10. }

  
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <mapper namespace="com.songzihao.dao.StudentDao">
  6. <!-- 使用insert、update、delete、select标签编写sql语句 -->
  7. <insert id="insertStudent">
  8. insert into student2(name,age) values (#{name},#{age})
  9. </insert>
  10. <select id="selectStudent" resultType="com.songzihao.entity.Student">
  11. select id,name,age from student2 order by id asc
  12. </select>
  13. </mapper>

2.8.3 创建dao接口对应的service接口和实现类


  
  1. package com.songzihao.service;
  2. import com.songzihao.entity.Student;
  3. import java.util.List;
  4. /**
  5. *
  6. */
  7. public interface StudentService {
  8. int addStudent(Student student);
  9. List<Student> queryStudent();
  10. }

  
  1. package com.songzihao.service.impl;
  2. import com.songzihao.dao.StudentDao;
  3. import com.songzihao.entity.Student;
  4. import com.songzihao.service.StudentService;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.stereotype.Service;
  7. import java.util.List;
  8. /**
  9. *
  10. */
  11. @Service
  12. public class StudentServiceImpl implements StudentService {
  13. /**
  14. * studentDao是引用类型,其对象是在spring配置文件中创建
  15. * 引用类型自动注入,这里使用注解 @Autowired 或者 @Resource
  16. */
  17. @Autowired
  18. private StudentDao studentDao;
  19. @Override
  20. public int addStudent(Student student) {
  21. int rows=studentDao.insertStudent(student);
  22. return rows;
  23. }
  24. @Override
  25. public List<Student> queryStudent() {
  26. List<Student> list=studentDao.selectStudent();
  27. return list;
  28. }
  29. }

2.8.4 创建一个控制器类(接收并处理请求)


  
  1. package com.songzihao.controller;
  2. import com.songzihao.entity.Student;
  3. import com.songzihao.service.StudentService;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.stereotype.Controller;
  6. import org.springframework.web.bind.annotation.RequestMapping;
  7. import org.springframework.web.bind.annotation.ResponseBody;
  8. import org.springframework.web.servlet.ModelAndView;
  9. import java.util.List;
  10. /**
  11. *
  12. */
  13. @Controller
  14. @RequestMapping(value = "/student")
  15. public class StudentController {
  16. /**
  17. * 声明service对象,调用其中的方法
  18. * 引用类型自动注入,这里使用注解 @Autowired 或者 @Resource
  19. */
  20. @Autowired
  21. private StudentService studentService;
  22. //添加学生
  23. @RequestMapping(value = "/addStudent.do")
  24. public ModelAndView addStudent(Student student) {
  25. ModelAndView mv= new ModelAndView();
  26. //调用service,处理业务逻辑方法,把处理结果返回给用户
  27. int rows=studentService.addStudent(student);
  28. String msg= "";
  29. if (rows> 0) {
  30. msg= "注册成功!!!";
  31. mv.addObject( "msg",student.getName() + "," + student.getAge());
  32. mv.setViewName( "success");
  33. } else {
  34. msg= "注册失败!!!";
  35. mv.addObject( "msg",msg);
  36. mv.setViewName( "fail");
  37. }
  38. return mv;
  39. }
  40. //查询学生
  41. @RequestMapping(value = "/queryStudent.do")
  42. @ResponseBody
  43. public List<Student> queryStudent() {
  44. List<Student> list=studentService.queryStudent();
  45. return list;
  46. }
  47. }

2.9 创建视图文件(jsp)

2.9.1 首页(index.jsp)


  
  1. <%@ page contentType="text/html;charset=utf-8" language="java" %>
  2. <%
  3. String basePath=request.getScheme() + "://" + request.getServerName()
  4. + ":" + request.getServerPort() + request.getContextPath() + "/";
  5. %>
  6. <html>
  7. <head>
  8. <base href="<%=basePath%>">
  9. <title>SSM </title>
  10. </head>
  11. <body>
  12. <div align="center">
  13. <p>SSM整合开发的例子 </p>
  14. <table>
  15. <tr>
  16. <td> <a href="addStudent.jsp">注册学生 </a> </td>
  17. <td> <br/> </td>
  18. <td> <a href="queryStudent.jsp">查询学生 </a> </td>
  19. </tr>
  20. </table>
  21. </div>
  22. </body>
  23. </html>

2.9.2 注册学生页面(addStudent.jsp)


  
  1. <%@ page contentType="text/html;charset=utf-8" language="java" %>
  2. <html>
  3. <head>
  4. <title>添加学生 </title>
  5. </head>
  6. <body>
  7. <div align="center">
  8. <p>注册学生 </p>
  9. <form action="student/addStudent.do" method="post">
  10. <table>
  11. <tr>
  12. <td>姓名: </td>
  13. <td> <input type="text" name="name"> </td>
  14. </tr>
  15. <tr>
  16. <td>年龄: </td>
  17. <td> <input type="text" name="age"> </td>
  18. </tr>
  19. <tr>
  20. <td>提交: </td>
  21. <td> <input type="submit" value="注册"> </td>
  22. </tr>
  23. </table>
  24. </form>
  25. </div>
  26. </body>
  27. </html>

2.9.3 注册成功和失败的页面(success.jsp、fail.jsp)


  
  1. <%@ page contentType="text/html;charset=utf-8" language="java" %>
  2. <html>
  3. <head>
  4. <title>$ </title>
  5. </head>
  6. <body>
  7. <h3>结果:${msg} </h3>
  8. </body>
  9. </html>

  
  1. <%@ page contentType="text/html;charset=utf-8" language="java" %>
  2. <html>
  3. <head>
  4. <title>$ </title>
  5. </head>
  6. <body>
  7. <h3>结果:${msg} </h3>
  8. </body>
  9. </html>

2.9.4 查询学生页面(queryStudent.jsp)


  
  1. <%@ page contentType="text/html;charset=utf-8" language="java" %>
  2. <%
  3. String basePath=request.getScheme() + "://" + request.getServerName()
  4. + ":" + request.getServerPort() + request.getContextPath() + "/";
  5. %>
  6. <html>
  7. <head>
  8. <base href="<%=basePath%>">
  9. <title>查询学生 </title>
  10. <script type="text/javascript" src="js/jquery-3.6.0.js"> </script>
  11. <script type="text/javascript">
  12. $( function () {
  13. $( "#myBtn").on( "click", function () {
  14. $.ajax({
  15. url: "student/queryStudent.do",
  16. dataType: "json",
  17. success: function (resp) {
  18. $( "#stuinfo").empty();
  19. $.each(resp, function (i,n) {
  20. $( "#stuinfo").append( "<tr><td>" + n.id + "</td>" +
  21. "<td>" + n.name + "</td>" +
  22. "<td>" + n.age + "</td></tr>");
  23. })
  24. }
  25. })
  26. })
  27. })
  28. </script>
  29. </head>
  30. <body>
  31. <div align="center">
  32. <p>查询学生 <button id="myBtn">获取学生信息 </button> </p>
  33. <table>
  34. <thead>
  35. <tr>
  36. <td>id </td>
  37. <td>姓名 </td>
  38. <td>年龄 </td>
  39. </tr>
  40. </thead>
  41. <tbody id="stuinfo">
  42. </tbody>
  43. </table>
  44. </div>
  45. </body>
  46. </html>

2.10 为项目配置tomcat,启动测试!!!

2.10.1 注册学生的测试结果 

2.10.2 查询学生的测试结果 


3.写在结尾!!!

以上就是整个SSM整合开发的详细步骤,在这当中,只是简单的实现了注册学生、查询学生的功能,还有很多的漏洞、功能不足的地方。。。

毕竟我也是初学者,还希望大佬们勿喷!!!(😅😅😅)        有需要改进、或是哪里写的不太对的地方,也希望大佬可以指出!!!(😄😄😄)


转载:https://blog.csdn.net/weixin_43823808/article/details/115443814
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场