当前位置: 首页 > news >正文

回头看SSM项目的创建

以mavenJavaweb项目为例

目录

1.创建项目

进入idea,new project

配置Maven路径:

2.配置文件

pom.xml文件

web.xml

ApplicationContext.xml

jdbc.properties

log4j.properties

springmvc.xml

3.Java部分

controller:控制器

service:业务逻辑接口

serviceImpl:业务逻辑实现类

dao:数据访问接口

domain:实体类,对应数据库中的表结构

3.Jsp页面


1.创建项目

进入idea,new project

配置Maven路径:

home path找maven的安装目录;

settings file找maven的conf目录下的settings.xml

Local repository是本地库,找到它的路径,同时它在settings.xml中有配置

2.配置文件

建好的项目如图:

pom.xml文件

管理依赖:

Spring Core & MVC (spring-contextspring-webmvc):提供了IoC容器、AOP、事务管理和MVC框架。

MyBatis (mybatis):核心的ORM框架。

MyBatis-Spring (mybatis-spring):关键的整合包,负责将MyBatis的生命周期融入Spring容器,使得MyBatis的SqlSessionMapper接口可以由Spring来创建和管理。

MySQL Driver (mysql-connector-java):连接MySQL数据库的必备驱动。

Druid (druid):阿里巴巴出品的高性能数据库连接池。连接池负责管理数据库连接,避免频繁创建和关闭连接带来的性能开销。

Spring JDBC & TX (spring-jdbcspring-tx):提供了JdbcTemplate和声明式事务管理的支持。

Servlet API (javax.servlet-api):编写Servlet和Web应用的基础API。

AspectJ (aspectjweaveraspectjrt):提供AOP(面向切面编程)能力,Spring的事务管理就是基于AOP实现的。

<?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.0http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.qcby</groupId><artifactId>SSMDemo1028</artifactId><version>1.0.0</version><packaging>war</packaging><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><spring.version>5.3.18</spring.version><mybatis.version>3.5.9</mybatis.version></properties><dependencies><!-- Spring核心 --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><!-- Spring MVC --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency><!-- MyBatis --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>${mybatis.version}</version></dependency><!-- MyBatis-Spring整合 --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>2.0.7</version></dependency><!-- 数据库驱动 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.28</version></dependency><!-- 连接池 --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.8</version></dependency><!-- Spring JDBC (包含事务管理) --><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>${spring.version}</version></dependency><!-- Spring TX (事务管理) --><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>${spring.version}</version></dependency><!-- Servlet API --><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version><scope>provided</scope></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.9.7</version></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjrt</artifactId><version>1.9.7</version></dependency></dependencies>
</project>

web.xml

这是Web应用的总入口,它配置了Tomcat应该如何启动和运行应用。

<context-param> 与 ContextLoaderListener:

作用:启动Spring的根Web应用上下文(Root WebApplicationContext)。

流程:当Tomcat启动时,ContextLoaderListener监听器会初始化,读取contextConfigLocation参数指定的ApplicationContext.xml文件,创建一个Spring容器。这个容器主要承载业务层和持久层的Bean(如Service, Dao, 数据源, 事务管理器等)。

DispatcherServlet 与 springmvc.xml:

作用:启动Spring MVC的子应用上下文(Servlet WebApplicationContext),专门用于MVC相关的组件。

流程:当第一个HTTP请求到达时,名为springmvc的DispatcherServlet会初始化,并加载springmvc.xml配置。这个容器是根容器的子容器,可以访问根容器中的Bean,它主要承载表现层的Bean(如Controller, 视图解析器)。DispatcherServlet是所有HTTP请求的前端控制器,负责路由。

CharacterEncodingFilter:

作用:全局字符编码过滤器。

流程:在请求到达DispatcherServlet之前,该过滤器会拦截所有请求(/*),将请求和响应的字符编码强制设置为UTF-8,解决中文乱码问题。

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 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/javaeehttp://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"><!-- 配置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><!-- 配置Spring MVC前端控制器 --><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><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>springmvc</servlet-name><url-pattern>/</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><param-name>forceEncoding</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>

ApplicationContext.xml

这是Spring框架的核心配置文件,负责管理业务逻辑、数据源和事务。

<context:component-scan base-package="com.qcby.service" />:

告诉Spring去扫描com.qcby.service包及其子包,将所有带有@Component, @Service等注解的类自动创建为Bean并纳入容器管理。

dataSource Bean (DruidDataSource):

配置数据库连接池。这里有一个潜在问题:driverClassName和url的值是硬编码的,通常使用jdbc.properties文件来配置,通过<context:property-placeholder>引入。

sessionFactory Bean (SqlSessionFactoryBean):

这是MyBatis与Spring整合的关键Bean。

它注入了数据源dataSource。

它通过mapperLocations属性指定了MyBatis的SQL映射文件(mapper/*.xml)的位置。

mapperScannerConfigurer Bean (MapperScannerConfigurer):

这是另一个关键整合组件。

它会自动扫描com.qcby.dao包,为其中每一个MyBatis的Mapper接口生成一个实现类的Bean,并将其注册到Spring容器中。这样,就可以在Service中直接使用@Autowired来注入Mapper接口,而无需编写其实现类。

事务配置 (transactionManager, <tx:advice>, <aop:config>)

transactionManager:定义事务管理器,它需要依赖数据源。

<tx:advice>:定义事务的增强 advice,即“事务应该如何运作”。这里配置了以find开头的方法为只读,其他所有方法都使用默认事务。

<aop:config>:定义切面,即“将上述事务增强应用到哪些地方”。这里通过AOP表达式指定,将事务增强应用到com.qcby.service包下所有以ServiceImpl结尾的类的所有公共方法上。

<?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"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsd"><!--配置文件+注解方式--><context:component-scan base-package="com.qcby.service" /><!--配置druid连接池--><!--配置开源连接池 Druid连接池 --><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver" /><property name="url" value="jdbc:mysql:///gan_da_shi_zu" /><property name="username" value="root" /><property name="password" value="root" /></bean><!--Spring框架整合mybatis框架--><bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean" ><!--注入连接池对象--><property name="dataSource" ref="dataSource" /><!--加载映射配置文件--><property name="mapperLocations" value="classpath:mapper/*.xml" /></bean><!--把dao对象存入到IOC容器中--><bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="sqlSessionFactory" ref="sessionFactory" /><!--扫码dao所在的包,把包中接口的代码对象存入到IOC容器中--><property name="basePackage" value="com.qcby.dao" /></bean><!--平台事务管理器--><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource" /></bean><!--配置事务的通知--><tx:advice id="txAdvice" transaction-manager="transactionManager"><tx:attributes><tx:method name="find*" read-only="true"/><tx:method name="*" /></tx:attributes></tx:advice><!--配置事务的增强--><aop:config><aop:advisor advice-ref="txAdvice" pointcut="execution(public * com.qcby.service.*ServiceImpl.*(..))" /></aop:config></beans>

jdbc.properties

这是一个键值对属性文件,用于将易变的数据库配置与Spring主配置解耦。

它定义了驱动、URL、用户名和密码。

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/322?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
jdbc.username=root
jdbc.password=root

log4j.properties

用于配置Log4j 1.x版本的日志行为。

它设置了日志的输出目的地(控制台stdout和文件file)。

设置了日志的输出格式 (ConversionPattern)。

设置了日志的级别 (INFO)和特定包(com.xxx.dao)的级别(DEBUG),这在调试MyBatis生成的SQL时非常有用。

设置了日志文件的滚动策略(单个文件最大10MB,最多备份10个)。

# 日志级别
log4j.rootLogger=INFO, stdout, file# 控制台输出
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n# 文件输出
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=logs/ssm.log
log4j.appender.file.MaxFileSize=10MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n# MyBatis日志
log4j.logger.com.xxx.dao=DEBUG

springmvc.xml

这个文件专门配置Web层(MVC)的相关行为。

<context:component-scan base-package="com.qcby.controller">:

专门扫描com.qcby.controller包,将带有@Controller注解的类注册为Web层的Bean。

viewResolver Bean (InternalResourceViewResolver):

视图解析器。当Controller返回一个字符串如"success"时,它会将其解析为具体的物理视图路径:/static/pages/success.jsp。

<mvc:annotation-driven />:

至关重要的配置。它注册了Spring MVC所必需的一系列处理器和适配器,使得@Controller, @RequestMapping, @ResponseBody等注解能够正常工作。它还默认配置了JSON转换(如果Jackson在classpath中)。

(注释掉的)<mvc:resources />:

如果启用,用于处理静态资源(CSS, JS, 图片)。它告诉Spring MVC,对于特定路径的请求(如/css/**)直接到文件系统目录(如/css/)下查找资源,而不要交给Controller处理。

总结:这个文件让Spring MVC能够找到Controller、解析视图,并处理静态资源。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><!-- 扫描controller的注解,别的不扫描 --><context:component-scan base-package="com.qcby.controller"></context:component-scan><!-- 配置视图解析器 --><bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"><!-- JSP文件所在的目录 --><property name="prefix" value="/static/pages/" /><!-- 文件的后缀名 --><property name="suffix" value=".jsp" /></bean><!--静态资源不过滤<mvc:resources location="/css/" mapping="/css/**" />  -->
<!--    <mvc:resources location="/static/image/" mapping="/images/**" />-->
<!--    <mvc:resources location="/static/js/" mapping="/js/**" />--><!-- 开启对SpringMVC注解的支持 --><mvc:annotation-driven /></beans>

3.Java部分

controller:控制器

作用:接收HTTP请求,调用Service,返回响应。

package com.qcby.controller;import com.qcby.domain.Admin;
import com.qcby.service.AdminService;
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 java.util.List;@Controller          // 标记为Spring MVC控制器
@RequestMapping("/admin")  // 根路径映射
public class AdminController {@Autowired      // 依赖注入Serviceprivate AdminService adminService;@RequestMapping("/select")  // 具体路径映射:/admin/selectpublic void select(){List<Admin> admins = adminService.findAll();System.out.println("查询逻辑......");for(Admin ad : admins){System.out.println(ad);  // 在控制台输出}}
}

service:业务逻辑接口

作用:定义业务逻辑的方法声明

package com.qcby.service;import com.qcby.domain.Admin;import java.util.List;public interface AdminService {List<Admin> findAll();
}

serviceImpl:业务逻辑实现类

作用:实现具体的业务逻辑,协调多个DAO操作。

package com.qcby.service.impl;import com.qcby.dao.AdminDao;
import com.qcby.domain.Admin;
import com.qcby.service.AdminService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;@Service  // 正确的注解位置 - 标记为Spring管理的Bean
public class AdminServiceImpl implements AdminService {@Autowired  // 依赖注入 - Spring自动注入AdminDao的实现private AdminDao adminDao;@Overridepublic List<Admin> findAll() {return adminDao.findAll();  // 直接调用DAO层}
}

@Service:告诉Spring这个类是业务逻辑组件,要创建Bean并管理

@Autowired自动注入AdminDao的实例(由MyBatis-Spring整合包自动生成)

这里只是简单转发,实际项目中会包含复杂的业务逻辑

dao:数据访问接口

作用:定义数据库操作的方法声明。

这是一个接口,只有方法声明没有实现

MyBatis会通过动态代理自动生成这个接口的实现类

方法名findAll对应Mapper XML文件中的SQL语句ID

package com.qcby.dao;import com.qcby.domain.Admin;import java.util.List;public interface AdminDao {List<Admin> findAll();
}

domain:实体类,对应数据库中的表结构

package com.qcby.domain;public class Admin {private String name;private String password;public Admin(String name, String password) {this.name = name;this.password = password;}public Admin(){}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}@Overridepublic String toString() {return "admin{" +"name='" + name + '\'' +", password='" + password + '\'' +'}';}
}

4.Jsp页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<body>
<h2><%= "Hello World!" %></h2>
<button id="select">查询</button>
</body>
<script>$(document).ready(function(){$("#select").click(function(){$.ajax({url:"admin/select",type:"get",success:function(){console.log("查询成功")},error:function(){console.log("查询失败")}})})})
</script>
</html>

这里就是简单接了按钮和绑定了事件,调用select接口,只是打印到了控制台:

http://www.dtcms.com/a/540516.html

相关文章:

  • 《赋能AI解锁Coze智能体搭建核心技能(1)--- 初识coze》
  • 大模型面试题:请讲一下GPT系列模型是如何演进的?
  • 分享5款软件让电脑更方便
  • 做网站建设公司赚钱浙江省建设厅网站地址
  • 内容补充--高精度空转(Xenium、CosMx)空间距离分析
  • 20.12 ChatPPT图像识别实战:多模态整合实现42%生成效率提升,800ms极速生成方案揭秘
  • sof 是运行在linux内核里 还是运行在DSP里面
  • 网站做edi认证有用没千库网登录入口
  • 【Leetcode hot 100】215.数组中的第K个最大元素
  • Leetcode每日一练--44
  • Leetcode 3728. Stable Subarrays With Equal Boundary and Interior Sum
  • 江科大stm32 | OLED显示汉字
  • vue3前端解析excel文件
  • 5.1.5 大数据方法论与实践指南-数据仓库存储格式选择
  • 网站空间1g多少钱怎么做网站加盟
  • 学校网站怎么做推广上海网站建站多少钱
  • php网站开发心得体会漯河市网站建设
  • 打工人日报#20251028
  • 手写前端脚手架cli
  • 《内蒙古自治区本级政务信息化运行维护项目预算支出方案编制规范和预算支出标准(试行)》(内财预〔2024〕194号)标准解读
  • 在 Spring Boot 项目中使用分页插件的两种常见方式
  • MapReduce运行实例
  • “透彻式学习”与“渗透式学习”
  • 惠洋科技H5528K 100V高耐压2.5A 支持24V30V36V48V60V72V80V降压6V9V12V车灯供电恒流芯片IC 高低亮
  • Spring Boot3零基础教程,Actuator 导入,笔记82
  • 如何用PyQt5实现一个简易计算器应用
  • Spring Boot 事务管理深度解析
  • 【系统分析师】高分论文:软件的系统测试及应用(电子商务门户网站系统)
  • 尚硅谷React扩展笔记
  • 8.模板和string(下)