SSM框架集成

news2024/11/19 10:46:01

文章目录

  • SSM
  • 1 介绍
  • 2 集成步骤
      • 目录结构
      • 配置 web.xml
      • 配置 jdbc.properties
      • 配置 SqlMapConfig.xml
      • 配置 applicationContext-dao.xml
      • 配置 applicationContext-service.xml
      • 配置 log4j.properties
      • 编写解决中文乱码的过滤器
      • 编写实体类
      • 编写 ItemsMapper 接口
      • 编写映射 ItemsMapper.xml
      • 编写 ItemsService 接口
      • 编写 ItemsServiceImpl 实现 ItemsService 接口
      • 编写 ItemsController

SSM

1 介绍

SSM框架是指Spring + Spring MVC + MyBatis的组合,是一种常用的Java Web开发框架。这三个框架分别提供了不同的功能:

  • Spring(Spring Framework): 提供了IoC(控制反转)和AOP(面向切面编程)等功能,用于管理Java应用中的对象和组件,并提供了事务管理等企业级特性。

  • Spring MVC: 是Spring框架的一部分,用于构建Web应用程序的MVC框架,提供了基于Java的配置、灵活的URL映射、强大的数据绑定、表单处理和验证等功能。

  • MyBatis: 是一个持久层框架,用于将Java对象与数据库中的记录进行映射,提供了简单的SQL操作和结果映射。

SSM框架整合这三个框架,可以使得开发者在开发Java Web应用时更加方便和高效。典型的SSM框架的工作流程如下:

  1. 请求到达前端控制器(DispatcherServlet): 所有的请求都会先到达前端控制器,即DispatcherServlet。

  2. DispatcherServlet分发请求: DispatcherServlet根据请求的URL,使用Handler Mapping找到对应的Controller。

  3. Controller处理请求: Controller处理请求,可以调用Service层的方法,Service层包含了业务逻辑。

  4. Service层处理业务逻辑: Service层处理业务逻辑,可能会调用DAO层的方法来访问数据库。

  5. DAO层访问数据库: DAO层使用MyBatis等持久化框架与数据库进行交互。

  6. 返回结果给前端控制器: 数据库返回结果,Service层将结果传递给Controller。

  7. 前端控制器选择视图并返回: Controller选择合适的视图(通常是JSP页面),并将结果传递给前端控制器。

  8. 前端控制器返回响应: 前端控制器将视图渲染成HTML等内容,并返回给客户端。

2 集成步骤

目录结构

在这里插入图片描述

配置 web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <!--配置中文乱码过滤器-->
    <filter>
        <filter-name>encoding</filter-name>
        <filter-class>com.kdx.filter.CharSetEncoding</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>encoding</filter-name>
        <url-pattern>*.action</url-pattern>
    </filter-mapping>

    <!--加载spring配置文件-->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext-*.xml</param-value>
    </context-param>
    <!--监听器-->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <!--配置前端控制器(中央控制器)-->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>*.action</url-pattern>
    </servlet-mapping>
</web-app>

配置 jdbc.properties

若 mysql 为8.x版本则配置如下

jdbcs.driver=com.mysql.cj.jdbc.Driver

若 mysql 为8.x版本之前则配置如下

jdbcs.driver=com.mysql.jdbc.Driver

jdbcs.driver=com.mysql.cj.jdbc.Driver 
jdbcs.url=jdbc:mysql:///mybatis
jdbcs.uname=root
jdbcs.pwd=kdx010908

配置 SqlMapConfig.xml

<?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>
    <plugins>
        <plugin interceptor="com.github.pagehelper.PageInterceptor">
        </plugin>
    </plugins>
</configuration>

配置 applicationContext-dao.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	   xmlns:context="http://www.springframework.org/schema/context"
	   xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:p="http://www.springframework.org/schema/p"
	   xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
	   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jdbc="http://www.springframework.org/schema/jdbc"
	   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
	 http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.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/util http://www.springframework.org/schema/util/spring-util.xsd http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd">
	<!--读取外部的配置文件-->
	<context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder>
	<!--配置数据源-->
	<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
		  <property name="driverClassName" value="${jdbcs.driver}"></property>
		  <property name="url" value="${jdbcs.url}"></property>
		  <property name="username" value="${jdbcs.uname}"></property>
		  <property name="password" value="${jdbcs.pwd}"></property>
	</bean>

	<!--配置mybatis框架-->
	<bean class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource"></property>
		<property name="configLocation" value="classpath:SqlMapConfig.xml"></property>
		<property name="typeAliasesPackage" value="com.kdx.entity"></property>
	</bean>

	<!--配置mapper代理-->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage" value="com.kdx.mapper"></property>
	</bean>
</beans>

配置 applicationContext-service.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	   xmlns:context="http://www.springframework.org/schema/context"
	   xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:p="http://www.springframework.org/schema/p"
	   xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
	   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
	 http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.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/util http://www.springframework.org/schema/util/spring-util.xsd">
	
	<!--扫描业务逻辑类-->
	<context:component-scan base-package="com.kdx.service"></context:component-scan>
</beans>

配置 log4j.properties

# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# MyBatis logging configuration...
log4j.logger.org.mybatis.example.BlogMapper=TRACE
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

编写解决中文乱码的过滤器

public class CharSetEncoding implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");
        chain.doFilter(request,response);
    }

    @Override
    public void destroy() {

    }
}

编写实体类

public class Items {
    private Integer id;

    private String name;

    private Float price;

    private String pic;

    private String detail;

    private Date createtime;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name == null ? null : name.trim();
    }

    public Float getPrice() {
        return price;
    }

    public void setPrice(Float price) {
        this.price = price;
    }

    public String getPic() {
        return pic;
    }

    public void setPic(String pic) {
        this.pic = pic == null ? null : pic.trim();
    }

    public Date getCreatetime() {
        return createtime;
    }

    public void setCreatetime(Date createtime) {
        this.createtime = createtime;
    }

    public String getDetail() {
        return detail;
    }

    public void setDetail(String detail) {
        this.detail = detail == null ? null : detail.trim();
    }
}

编写 ItemsMapper 接口

public interface ItemsMapper {

    //查询全部的商品
    public List<Items> findAll();
}

编写映射 ItemsMapper.xml

<?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.easthome.mapper.ItemsMapper">

    <select id="findAll" resultType="com.easthome.entity.Items">
        select * from items
    </select>
</mapper>

编写 ItemsService 接口

public interface ItemsService {

    List<Items> queryAll();
}

编写 ItemsServiceImpl 实现 ItemsService 接口

@Service
public class ItemsServiceImpl implements ItemsService {

    @Autowired
    private ItemsMapper itemsMapper;

    @Override
    public List<Items> queryAll() {
        List<Items> itemsList = itemsMapper.findAll();
        return itemsList;
    } 
}

编写 ItemsController

第一种写法:

@Controller
public class ItemsController {

    @Autowired
    private ItemsService itemsService;

    @RequestMapping("/list")
    public ModelAndView list(){
        ModelAndView mav = new ModelAndView();
        List<Items> itemsList = itemsService.queryAll();
        mav.addObject("itemsList",itemsList);
        mav.setViewName("list");
        return mav;
    }
}

第二种写法:

	@RequestMapping("/list")
    public List<Items> list(){
        //自动封装一个集合数据  itemsList 自动去视图解析器下面找  itemsList.jsp页面
        return itemsService.queryAll();
    }

第三种写法:

    @RequestMapping("/list")
    public void list(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        List<Items> itemsList = itemsService.queryAll();
        request.setAttribute("itemsList",itemsList);
        request.getRequestDispatcher("/WEB-INF/jsps/list.jsp").forward(request,response);
    }

第四种写法:

    @RequestMapping("/list")
    public void list(Map<String,Object> map) {
        //自动封装一个集合数据  itemsList 自动去视图解析器下面找  itemsList.jsp页面
        map.put("itemsList",itemsService.queryAll());
    }

最后编写前端页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>开发视图</title>
</head>
<body>
<table width="600px" border="1" align="center">
    <tr>
        <td>商品序号</td>
        <td>商品名称</td>
        <td>商品价格</td>
        <td>商品简介</td>
        <td>操作</td>
    </tr>
    <c:forEach items="${requestScope.itemsList}" var="items">

        <tr>
            <td>${items.id}</td>
            <td>${items.name}</td>
            <td>${items.price}</td>
            <td>${items.detail}</td>
            <td>
                <a href="${pageContext.request.contextPath}/delItem.action?ids=${items.id}">删除</a>
            </td>
        </tr>
    </c:forEach>
</table>
</body>
</html>

部署运行:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1120601.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Power BI实现实时动态和用户输入的数据交互

背景&#xff1a;Power BI一般作为一个展示和分析数据的平台存在&#xff0c;即使是我们用Direct Query的mode也是受制于连接的数据库的表刷新&#xff0c;不能实现实时动态数据变化展示。 解决思路&#xff1a;当Power Apps里面输入了新的数据时&#xff0c;数据会写入到data…

[SWPUCTF 2023 秋季新生赛]——Web方向 详细Writeup

Web colorful_snake 来玩贪吃蛇~ F12查看源代码&#xff0c;可以看到this_is_real_flag函数&#xff0c;发现是unicode编码 利用网站转换得到flag 一键连接! 连连need <?php highlight_file(__FILE__); error_reporting(0); $md5_1 $_GET[md5_1]; $md5_2 $_GET[md5_2]; …

python实现客户成套订单配送策略混合遗传算法编码

以如下的论文文献为学习对象&#xff1a;2008年发表在《控制工程》的文献《客户成套订单配送策略混合遗传算法研究》 文献研究的学术意义 本文研究的目的是寻求在车队车辆数有限情况下 &#xff0c;如何合理安排每天的车辆 &#xff0c;使得总成本最小的方案。另外&#xff0…

Qt使用QListWidget实现自定义Item效果

Q&#xff1a;如何在Qt库的基础上&#xff0c;实现自定义控件呢&#xff1f; A&#xff1a;根据官方文档回答&#xff0c;就是继承需实现的控件&#xff0c;然后实现自定义功能。 以下是实现QListWidget控件的自定义item。 先看下最终效果是如何&#xff1a; listItem 主界面U…

sql高级教程-索引

文章目录 架构简介1.连接层2.服务层3.引擎层4.存储层 索引优化背景目的劣势分类基本语法索引结构和适用场景 性能分析MySq| Query Optimizerexplain 索引优化单表优化两表优化三表优化 索引失效原因 架构简介 1.连接层 最上层是一些客户端和连接服务&#xff0c;包含本地sock通…

shell的for循环与结构化

shell笔记 列表for循环不带列表for循环for循环举例1.例1 所有文件名大写替换为小写2. 例2 读取/etc/passwd文件&#xff0c;依次输出ip段3. 例3 读取/etc/hosts内容for循环&#xff0c;执行ping4. 例4 循环ip列表&#xff0c;输出对应编号5. 例5 批量添加用户 break1. 例1 brea…

python:遗传算法(Genetic Algorithm,GA)求解23个测试函数

一、遗传算法 遗传算法&#xff08;Genetic Algorithm&#xff0c;GA&#xff09;起源于对生物系统所进行的计算机模拟研究&#xff0c;是一种随机全局搜索优化方法&#xff0c;它模拟了自然选择和遗传中发生的复制、交叉(crossover)和变异(mutation)等现象&#xff0c;从任一…

css之Flex弹性布局

文章目录 &#x1f415;前言&#xff1a;&#x1f3e8;定义flex容器 display:flex&#x1f3e8;在flex容器中子组件进行排列&#x1fa82;行排列 flex-direction: row&#x1fa82;将行排列进行翻转排列 flex-direction: row-reverse&#x1f3c5;按列排列 flex-direction: col…

统计二进制中1的个数

写一个函数返回参数二进制中 1 的个数。 比如&#xff1a; 15 0000 1111 4 个 1 我们先引入一个容易理解的例子&#xff0c;怎么得到一个十进制的数各个位置上的数为多少&#xff1f; 这里我们以一个十进制的三位数 123为例&#xff0c;要想得到它的个位&#xff0c;十位&#…

kubernetes-Service

文章目录 1、前言2、基本语法2.1 Service yaml2.2 关键字段2.3 port、nodePort、targetPort、containerPort字段说明 3、Service 类型3.1 ClusterIP3.2 NodePort3.3 LoadBalancer3.4 ExternalName 4、无头服务&#xff08;Headless Services&#xff09;5、访问service参考 1、…

R文件详细介绍、瘦身方案和原理

文章目录 1. 背景2. R文件介绍2.1 R文件概念2.1.1 标识符是怎么与资源联系起来的&#xff1f; 2.2 R文件内容2.3 library module和aar的R文件内容生成规则2.4 是谁生成的R文件&#xff1f;2.5 打包之后的R文件2.6 R文件为啥大&#xff1f;这么多&#xff1f; 3. 为什么R文件可以…

RK356x U-Boot研究所(开发篇)5.1 启动SATA硬盘中的固件

平台U-Boot 版本Linux SDK 版本RK356x2017.09v1.2.3RK356x支持从SATA硬盘中启动固件,只要板卡中有预留这个接口即可。值得注意的是,这个固件不能从maskrom阶段就直接进行加载,需要从别的媒介启动(Flash、eMMC或者TF卡)后跑到U-Boot阶段,在这个U-Boot阶段再去加载SATA硬盘…

黑豹程序员-架构师学习路线图-百科:Java的第二春Spring框架

文章目录 1、 Spring的发展历史2、为什么Spring能霸屏&#xff1f;2.1、容器的设计2.2、通过四个策略2.3、三种方式 3、学习编程设计的典范 1、 Spring的发展历史 正当SUN公司的EJB在全球开始热炒时&#xff0c;正当程序员纷纷转型EJB开发时&#xff0c;正当程序员为跑通EJB程…

昇腾CANN 7.0 黑科技:大模型训练性能优化之道

目前&#xff0c;大模型凭借超强的学习能力&#xff0c;已经在搜索、推荐、智能交互、AIGC、生产流程变革、产业提效等场景表现出巨大的潜力。大模型经过海量数据的预训练&#xff0c;通常具有良好的通用性和泛化性。用户基于“大模型预训练微调”开发范式即可在实际业务场景取…

量子力学期末复习--1

量子力学解题技巧--1 基础知识 薛定谔方程 Ehrenfest 定理 不确定性原理&#xff1a;正则对易关系&#xff1a;自由粒子&#xff1a;对于自由粒子&#xff0c;分离变量解不代表物理上可实现的态。但其含时薛定谔方程的一般解仍旧是分离变量解的线性组合 典型题目 自由粒子…

029-第三代软件开发-加载本地字体库

第三代软件开发-加载本地字体库 文章目录 第三代软件开发-加载本地字体库项目介绍加载本地字体库 关键字&#xff1a; Qt、 Qml、 QFont、 QFontDatabase、 ttf 项目介绍 欢迎来到我们的 QML & C 项目&#xff01;这个项目结合了 QML&#xff08;Qt Meta-Object Langu…

深圳世有伯乐教育科技有限公司——LJ培训

今天来吐槽一波 深圳世有伯乐教育科技有限公司就是一个垃圾的培训机构&#xff0c;不&#xff0c;说是培训机构都是扭曲事实了&#xff0c;因为它根本就没有国家认可的办学许可证。光说没法让人信服&#xff0c;以下是企查查的截图&#xff1a; 世有伯乐的工商信息图片 续上&…

MPC预测控制概述和C++ 中的模型库

系列续篇&#xff1a; C 中的模型预测路径积分 (MPPI) 控制-CSDN博客 一、说明 以下文章描述了应用模型预测控制器的简单控制系统方法。本文讨论了这种类型的控制的基本机制&#xff0c;该机制适用于各种工程领域。 MPC 涉及对未来系统行为的预测&#xff08;由一组方程描述的模…

.net6部署到linux上(CentOS Linux 7)

目录 一、先在linux上配置.net环境 添加 Microsoft 包存储库 安装 SDK 安装运行时 检查 SDK 版本可使用终端查看当前安装的 .NET SDK 版本。 打开终端并运行以下命令。 二、创建.net6 mvc项目 并发布 创建项目 修改默认端口 打包发布到文件夹 运行打包项目查看项目是否…

华为OD机试 - 代表团坐车 - 动态规划(Java 2023 B卷 200分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&#…