本文将详细介绍SSM教程,包括Spring、Struts和MyBatis三个框架的配置和整合,帮助读者理解如何搭建SSM开发环境并进行项目部署。文章不仅提供了详细的配置文件和代码示例,还通过实战案例的形式展示了如何开发用户管理和商品信息管理模块。这些示例代码涵盖了前端页面和后端逻辑,帮助读者全面掌握SSM框架的应用方法。
SSM教程:Java Web开发入门指南 SSM框架简介Spring框架介绍
Spring 是一个开源的轻量级 Java 企业级应用开发框架。它最初由 Rod Johnson 设计,并在 2003 年发布了第一个版本。Spring 框架的核心是依赖注入(Dependency Injection, DI)和面向切面编程(Aspect-Oriented Programming, AOP)。
依赖注入(DI)
依赖注入是 Spring 的核心特性之一,它通过将对象之间的依赖关系从代码中解耦出来,使得依赖关系的配置可以由外部配置文件或代码来进行控制。
面向切面编程(AOP)
面向切面编程允许将通用的功能(如事务处理、日志记录等)作为切面(Aspect)来定义,然后应用到业务逻辑中,从而减少代码耦合,增强代码的可维护性和可扩展性。
Struts框架介绍
Struts 是一个成熟的 MVC(Model-View-Controller)框架,它基于 MVC 设计模式,将 Web 应用程序分为三个部分:模型(Model)、视图(View)、控制器(Controller)。
模型(Model)
模型负责处理业务逻辑,通常是一个 Java 类,它可以包含数据和行为。
视图(View)
视图负责如何展示数据,通常是一个 JSP 页面或 Freemarker 模板,它负责从模型中获取数据并将其展示给用户。
控制器(Controller)
控制器负责接收用户的请求并调用相应的模型业务逻辑,然后将结果传递给视图进行展示。
MyBatis框架介绍
MyBatis 是一个持久层框架,它提供了一种从 XML 或注解中解析 SQL 语句的方式,并将 Java 方法和 SQL 语句进行了非常透明的封装,使得 Java 开发者可以使用纯 SQL 语句来操作数据库。
XML 配置
MyBatis 支持 XML 配置文件,通过在 XML 文件中定义 SQL 语句和映射,可以灵活地处理数据库操作。
注解配置
MyBatis 还支持通过注解来配置 SQL 语句,这种方式更加简洁,易于维护。
SSM框架整合
SSM 框架是指 Spring + Struts2 + MyBatis 的整合,是当前 Java Web 开发中非常流行的一种组合。Spring 作为控制层,提供依赖注入和事务管理;Struts2 作为视图层,负责页面的展示和用户请求的处理;MyBatis 作为持久层,负责与数据库交互。
环境搭建开发环境准备
开发环境包括开发工具(如 IntelliJ IDEA、Eclipse)、运行时环境(如 JDK、Tomcat)以及构建工具(如 Maven)。
开发工具
- IntelliJ IDEA:一款专业的 Java 开发工具,支持丰富的开发插件。
- Eclipse:一款开源的 Java IDE,支持多种语言开发。
运行时环境
- JDK:Java 开发工具包,包含了 Java 运行时环境、编译器和工具。
- Tomcat:一个轻量级的 Web 服务器,可以部署 Java Web 应用程序。
构建工具
- Maven:一个项目管理和构建工具,可以管理项目的构建、报告和文档等。
Maven依赖配置
在项目中使用 Maven 管理依赖关系,可以简化项目构建过程。配置 Maven 的 pom.xml 文件来添加必要的依赖。
<dependencies>
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.10</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.10</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.10</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>5.3.10</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.3.10</version>
</dependency>
<!-- Struts2 -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.5.20</version>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-spring-plugin</artifactId>
<version>2.5.20</version>
</dependency>
<!-- MyBatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.5</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
</dependency>
<!-- MySQL JDBC Driver -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version>
</dependency>
</dependencies>
配置文件详解
applicationContext.xml
:Spring 配置文件,用于配置 Bean 的创建和依赖注入。struts.xml
:Struts2 配置文件,用于配置 Action 和拦截器等。mybatis-config.xml
:MyBatis 配置文件,用于配置数据源、映射文件等。web.xml
:配置文件,用于配置 Web 应用程序的初始化参数、过滤器等。
<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_3_1.xsd"
version="3.1">
<display-name>MyApp</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
Spring配置
Spring核心配置
Spring 的核心配置文件通常命名为 applicationContext.xml
,用于定义 Bean 的创建和依赖注入。
<beans xmlns="http://www.springframework.org/schema/beans"
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">
<!-- 配置数据源 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test"/>
<property name="username" value="root"/>
<property name="password" value="password"/>
</bean>
<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- 配置 MyBatis SqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- 配置 MyBatis MapperScanner -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.example.mapper"/>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>
<!-- 配置其他 Bean -->
<bean id="userService" class="com.example.service.UserServiceImpl">
<property name="userRepository" ref="userRepository"/>
</bean>
<bean id="userRepository" class="com.example.repository.UserRepositoryImpl">
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>
</beans>
Spring与事务管理
Spring 提供了声明式事务管理,可以在配置文件中定义事务规则。
<bean id="userService" class="com.example.service.UserServiceImpl" scope="singleton">
<property name="userRepository" ref="userRepository"/>
<aop:scoped-proxy/>
</bean>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="save*" read-only="false" isolation="DEFAULT" propagation="REQUIRED"/>
<tx:method name="delete*" read-only="false" isolation="DEFAULT" propagation="REQUIRED"/>
<tx:method name="*" read-only="true" isolation="DEFAULT" propagation="SUPPORTS"/>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="userServicePointcut" expression="execution(* com.example.service.UserServiceImpl.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="userServicePointcut"/>
</aop:config>
Spring与AOP整合
Spring 支持 AOP 通过配置文件中的 <aop:config>
标签定义切点和通知。
<aop:config>
<aop:pointcut id="logPointcut" expression="execution(* com.example.service.*.*(..))"/>
<aop:advisor advice-ref="logAdvice" pointcut-ref="logPointcut"/>
</aop:config>
<bean id="logAdvice" class="org.springframework.aop.support.NameMatchMethodPointcut">
<property name="mappedNames" value="save,delete"/>
</bean>
Struts2配置
Struts2核心配置
Struts2 的核心配置文件通常命名为 struts.xml
,用于定义 Action 和拦截器。
<struts>
<constant name="struts.devMode" value="true"/>
<package name="default" extends="struts-default">
<action name="userList" class="com.example.action.UserListAction">
<result name="success">/WEB-INF/jsp/userList.jsp</result>
</action>
</package>
</struts>
Struts2与JSP页面交互
Struts2 通过 Action 接口将请求转发到相应的 Java 类,然后将结果返回给视图层。
public class UserListAction extends ActionSupport {
private List<User> users;
public String execute() {
users = userService.getAllUsers();
return SUCCESS;
}
public List<User> getUsers() {
return users;
}
}
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>User List</title>
</head>
<body>
<h1>User List</h1>
<table>
<tr>
<th>ID</th>
<th>Name</th>
</tr>
<s:iterator value="users">
<tr>
<td><s:property value="id"/></td>
<td><s:property value="name"/></td>
</tr>
</s:iterator>
</table>
</body>
</html>
Struts2与Spring整合
Struts2 可以与 Spring 进行整合,通过 Spring 容器管理 Action 的生命周期。
<bean id="userService" class="com.example.service.UserServiceImpl" scope="singleton"/>
<bean id="userListAction" class="com.example.action.UserListAction">
<property name="userService" ref="userService"/>
</bean>
MyBatis配置
MyBatis核心配置
MyBatis 的核心配置文件通常命名为 mybatis-config.xml
,用于配置数据源和映射文件。
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test"/>
<property name="username" value="root"/>
<property name="password" value="password"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/example/mapper/UserMapper.xml"/>
</mappers>
</configuration>
MyBatis与Spring整合
通过 Spring 容器管理 MyBatis 的 SqlSessionFactory 和 Mapper。
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.example.mapper"/>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>
动态SQL与缓存机制
MyBatis 支持动态 SQL,可以通过 XML 配置文件或注解定义复杂的 SQL 逻辑。
<select id="selectUserById" parameterType="int" resultType="User">
SELECT * FROM user WHERE id = #{id}
</select>
<update id="updateUser" parameterType="User">
UPDATE user
SET name = #{name}, email = #{email}
WHERE id = #{id}
</update>
缓存机制可以在 MyBatis 中通过 <cache>
标签配置。
<cache />
实战案例
用户管理模块开发
用户管理模块包括用户列表、用户添加、用户编辑、用户删除等功能。
用户列表页面
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>User List</title>
</head>
<body>
<h1>User List</h1>
<a href="addUser.action">Add User</a>
<table>
<tr>
<th>ID</th>
<th>Name</th>
<th>Email</th>
<th>Actions</th>
</tr>
<s:iterator value="users">
<tr>
<td><s:property value="id"/></td>
<td><s:property value="name"/></td>
<td><s:property value="email"/></td>
<td>
<a href="editUser.action?id=<s:property value="id"/>">Edit</a>
<a href="deleteUser.action?id=<s:property value="id"/>">Delete</a>
</td>
</tr>
</s:iterator>
</table>
</body>
</html>
用户添加页面
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>Add User</title>
</head>
<body>
<h1>Add User</h1>
<form action="addUser.action" method="post">
<label>Name: <input type="text" name="name"/></label><br/>
<label>Email: <input type="text" name="email"/></label><br/>
<input type="submit" value="Submit"/>
</form>
</body>
</html>
用户编辑页面
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>Edit User</title>
</head>
<body>
<h1>Edit User</h1>
<form action="editUser.action" method="post">
<input type="hidden" name="id" value="<s:property value="id"/>" />
<label>Name: <input type="text" name="name" value="<s:property value="name"/>" /></label><br/>
<label>Email: <input type="text" name="email" value="<s:property value="email"/>" /></label><br/>
<input type="submit" value="Submit"/>
</form>
</body>
</html>
用户删除页面
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>Delete User</title>
</head>
<body>
<h1>Delete User</h1>
<form action="deleteUser.action" method="post">
<input type="hidden" name="id" value="<s:property value="id"/>" />
<p>Are you sure you want to delete this user?</p>
<input type="submit" value="Yes"/>
<input type="button" value="No" onclick="history.back()"/>
</form>
</body>
</html>
用户管理模块后端代码
public class UserListAction extends ActionSupport {
private List<User> users;
private UserService userService;
public UserListAction() {
userService = new UserServiceImpl();
}
public String execute() {
users = userService.getAllUsers();
return SUCCESS;
}
public List<User> getUsers() {
return users;
}
}
public class UserServiceImpl implements UserService {
private UserRepository userRepository;
public UserServiceImpl() {
userRepository = new UserRepositoryImpl();
}
public List<User> getAllUsers() {
return userRepository.findAll();
}
}
public interface UserRepository {
List<User> findAll();
}
public class UserRepositoryImpl implements UserRepository {
private SqlSessionFactory sqlSessionFactory;
public UserRepositoryImpl() {
sqlSessionFactory = SqlSessionFactoryUtil.getSqlSessionFactory();
}
public List<User> findAll() {
SqlSession session = sqlSessionFactory.openSession();
List<User> users = session.selectList("UserMapper.selectAll");
session.close();
return users;
}
}
public class UserMapper {
public List<User> selectAll() {
// SQL查询实现
return null;
}
}
商品信息管理模块开发
商品信息管理模块包括商品列表、商品添加、商品编辑、商品删除等功能。
商品列表页面
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>Product List</title>
</head>
<body>
<h1>Product List</h1>
<a href="addProduct.action">Add Product</a>
<table>
<tr>
<th>ID</th>
<th>Name</th>
<th>Price</th>
<th>Actions</th>
</tr>
<s:iterator value="products">
<tr>
<td><s:property value="id"/></td>
<td><s:property value="name"/></td>
<td><s:property value="price"/></td>
<td>
<a href="editProduct.action?id=<s:property value="id"/>">Edit</a>
<a href="deleteProduct.action?id=<s:property value="id"/>">Delete</a>
</td>
</tr>
</s:iterator>
</table>
</body>
</html>
商品添加页面
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>Add Product</title>
</head>
<body>
<h1>Add Product</h1>
<form action="addProduct.action" method="post">
<label>Name: <input type="text" name="name"/></label><br/>
<label>Price: <input type="text" name="price"/></label><br/>
<input type="submit" value="Submit"/>
</form>
</body>
</html>
商品编辑页面
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>Edit Product</title>
</head>
<body>
<h1>Edit Product</h1>
<form action="editProduct.action" method="post">
<input type="hidden" name="id" value="<s:property value="id"/>" />
<label>Name: <input type="text" name="name" value="<s:property value="name"/>" /></label><br/>
<label>Price: <input type="text" name="price" value="<s:property value="price"/>" /></label><br/>
<input type="submit" value="Submit"/>
</form>
</body>
</html>
商品删除页面
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>Delete Product</title>
</head>
<body>
<h1>Delete Product</h1>
<form action="deleteProduct.action" method="post">
<input type="hidden" name="id" value="<s:property value="id"/>" />
<p>Are you sure you want to delete this product?</p>
<input type="submit" value="Yes"/>
<input type="button" value="No" onclick="history.back()"/>
</form>
</body>
</html>
商品管理模块后端代码
public class ProductListAction extends ActionSupport {
private List<Product> products;
private ProductService productService;
public ProductListAction() {
productService = new ProductServiceImpl();
}
public String execute() {
products = productService.getAllProducts();
return SUCCESS;
}
public List<Product> getProducts() {
return products;
}
}
public class ProductServiceImpl implements ProductService {
private ProductRepository productRepository;
public ProductServiceImpl() {
productRepository = new ProductRepositoryImpl();
}
public List<Product> getAllProducts() {
return productRepository.findAll();
}
}
public interface ProductRepository {
List<Product> findAll();
}
public class ProductRepositoryImpl implements ProductRepository {
private SqlSessionFactory sqlSessionFactory;
public ProductRepositoryImpl() {
sqlSessionFactory = SqlSessionFactoryUtil.getSqlSessionFactory();
}
public List<Product> findAll() {
SqlSession session = sqlSessionFactory.openSession();
List<Product> products = session.selectList("ProductMapper.selectAll");
session.close();
return products;
}
}
public class ProductMapper {
public List<Product> selectAll() {
// SQL查询实现
return null;
}
}
SSM框架项目部署
部署 SSM 项目可以通过两种方式实现:手动部署和自动化部署。
手动部署
- 打包项目:在项目根目录下运行
mvn clean package
命令,生成 WAR 文件。 - 部署 WAR 文件:将生成的 WAR 文件拷贝到 Tomcat 的
webapps
目录下,Tomcat 会自动部署并启动应用。
自动化部署
使用 Maven 插件 maven-assembly-plugin
或 maven-war-plugin
将项目打包成 WAR 文件,并配置 Tomcat 插件 maven-tomcat-plugin
自动部署。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.3</version>
<configuration>
<warName>myapp</warName>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<url>http://localhost:8080/manager/text</url>
<server>tomcat</server>
<path>/myapp</path>
</configuration>
</plugin>
</plugins>
</build>
在 pom.xml
文件中配置 tomcat7-maven-plugin
插件,可以在 Maven 中运行 mvn tomcat7:deploy
命令自动部署应用。
这些示例代码和配置文件展示了如何使用 SSM 框架开发 Web 应用,通过这些示例可以快速上手和应用实际项目中。
共同学习,写下你的评论
评论加载中...
作者其他优质文章