SSM开发框架部署

owofile Lv5

SSM开发框架部署

SSM是一个常用于Java Web应用程序开发的开发框架,它由Spring、Spring MVC和MyBatis三个不同的框架组成,每个框架负责不同的任务,以提高应用程序的开发效率和可维护性。

以下是SSM开发框架的简要介绍和原理:

  1. Spring
    • 介绍:Spring是一个轻量级的Java框架,用于管理应用程序中的组件(如对象、服务、事务等)。
    • 原理:Spring使用控制反转(IoC)和依赖注入(DI)原则,通过容器管理应用程序的对象。它将应用程序中的各个组件配置为Spring Bean,并将它们注入到需要它们的地方。这种松散耦合的设计有助于测试和维护。
  2. Spring MVC
    • 介绍:Spring MVC是Spring框架的一部分,用于构建Web应用程序的MVC模式。
    • 原理:Spring MVC采用前端控制器模式,一个DispatcherServlet负责接收所有HTTP请求。请求被分派到相应的控制器,控制器处理请求并返回相应的视图。视图通常是JSP、HTML或JSON等。这种分层结构有助于将应用程序的不同部分分离开来,提高可维护性。
  3. MyBatis
    • 介绍:MyBatis是一个用于持久化数据库数据的框架,它提供了一种将Java对象映射到数据库表的方式。
    • 原理:MyBatis使用XML或注解来配置SQL查询语句,并提供了一个SQLSessionFactory来管理数据库连接。开发者可以编写SQL语句,将它们映射到Java对象,然后使用MyBatis执行这些SQL查询。MyBatis还支持事务管理和缓存,以提高数据库访问性能。

整合原理

  • 这三个框架通常一起使用,Spring作为应用程序的核心容器,负责管理Bean,包括MyBatis的Mapper接口和Spring MVC的控制器。
  • Spring MVC用于处理Web请求,控制器从请求中获取数据,然后调用服务层,服务层再调用MyBatis进行数据库操作。
  • MyBatis用于数据库访问,它可以与Spring集成以受益于Spring的事务管理和依赖注入功能。

通过整合这三个框架,开发者可以构建功能强大的Java Web应用程序,具有良好的分层结构和高度的可维护性。此外,整合后的应用程序也易于测试和扩展。

Spring MVC常用注解:

Spring MVC是一个基于Java的Web框架,它使用MVC(Model-View-Controller)模式来帮助开发人员创建Web应用程序。在Spring MVC中,常用的注解包括以下几种:

  1. @Controller:用于标记一个类作为Spring MVC控制器,将处理来自客户端的请求并返回一个响应。
  2. @RequestMapping:用于将一个特定的URL映射到控制器中的一个方法上,以便处理该URL的请求。@RequestMapping注解可以用于类级别和方法级别。
  3. @GetMapping、@PostMapping、@PutMapping、@DeleteMapping、@PatchMapping:这些注解是@RequestMapping的快捷方式,用于映射HTTP GET、POST、PUT、DELETE、PATCH请求到控制器中的方法。
  4. @PathVariable:用于从URL中获取路径变量,并将其作为参数传递给控制器方法。
  5. @RequestParam:用于从请求参数中获取值,并将其作为参数传递给控制器方法。
  6. @RequestBody:用于从请求体中获取JSON或XML数据,并将其作为参数传递给控制器方法。
  7. @ResponseBody:用于将控制器方法的返回值直接写入HTTP响应体中,而不是将其转发给视图解析器。
  8. @ControllerAdvice:用于将全局异常处理方法绑定到控制器上,以便统一处理应用程序中发生的异常。
  9. @RestController:用于将多个控制器方法映射到RESTful API中,以便更简洁地编写基于REST的Web应用程序。
  10. @RequestParamMap:用于从请求参数中获取键值对,并将其作为Map传递给控制器方法。

除了上述常用的注解之外,Spring MVC还提供了其他一些注解,如@ExceptionHandler、@InitBinder等,用于处理异常和自定义数据绑定等操作。

部署步骤

配置applicationContext.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<?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:mvc="http://www.springframework.org/schema/mvc"
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/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<!-- 设置数据库信息-->
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
<property name="url"
value="jdbc:mysql://127.0.0.1:3306/cvs\_db?useUnicode=true&amp;characterEncoding=utf8&amp;useSSL=false&amp;serverTimezone=UTC&amp;zeroDateTimeBehavior=convertToNull"/>
<property name="username" value="root"></property>
<property name="password" value="123"></property>
</bean>
<!-- name是在地址栏的访问路径名 class是访问的JAVA地址-->
<!-- <bean name="/hello" class="com.bdqn.controller.HelloController"></bean>-->
<!-- 开启注解 tip:开始MVC注解扫描-->
<mvc:annotation-driven></mvc:annotation-driven>
<!-- 扫描注解 tip:扫描bdqn整个目录下的注解-->
<context:component-scan base-package="com.bdqn"></context:component-scan>
<!-- 视图解析器 用来方法返回跳转页面 扫描目录下的文件 自动匹配后缀 渲染视图跳转-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 前缀扫描目录-->
<property name="prefix" value="/WEB-INF/jsp/"></property>
<!-- 文件后缀名-->
<property name="suffix" value=".jsp"></property>
</bean>
<!-- 配置 SqlSessionFactoryBean tip:Mybatis框架 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 引用数据源-->
<property name="dataSource" ref="dataSource"></property>
<!-- 引用MyBatis配置文件中的配置-->
<!-- 扫描目录下所有的mybatis框架的xml-->
<property name="mapperLocations">
<list>
<value>classpath:com/bdqn/dao/\*.xml</value>
</list>
</property>
<property name="typeAliasesPackage" value="com.bdqn.pojo"></property>
</bean>
<!-- 配置DAO-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.bdqn.dao"></property>
</bean>
</beans>
web.xml配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<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:applicationContext.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<!-- 所有的请求都会经过mvc 所以用 / -->
<url-pattern>/</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>/WEB-INF/jsp/index.jsp</welcome-file>
</welcome-file-list>
<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>
导包

将所需lib包配置在WEB-INF里 tip:配套文件的SSM整合导包

目录设置

在src文件夹里 按照上方的自动扫描路径 应该创建 com.dbqn 然后配置四个文件夹 分别是 controller(前端控制器) 、dao(实现类)、pojo(实体类)、service(服务器端)。

src文件夹里,你可以按照如下方式组织项目结构:

  1. com.dbqn(或你的包名)是根包。你可以选择一个适合你的应用的包名。
  2. 在根包下创建子包:
    • controller:用于存放前端控制器类,这些类处理HTTP请求和响应,通常使用Spring MVC。
    • dao:用于存放数据访问对象(DAO)的实现类,这些类通常与数据库交互,可以使用MyBatis等持久层框架。
    • pojo:用于存放实体类,这些类表示应用程序中的数据对象。
    • service:用于存放服务器端的业务逻辑类,通常用于处理业务规则和数据操作,可以使用Spring服务层组件。

项目结构示例:

1
2
3
4
5
6
7
src
└── com
└── dbqn
├── controller
├── dao
├── pojo
└── service

这个项目结构可以根据你的具体需求和喜好进行调整,但按照这种约定可以使项目更易于管理和维护,也符合通用的Java项目组织标准。

然后在web包里 按照上方配置文件 需要 jsp文件夹和已经导入好包的lib文件夹,框架会自动扫描jsp文件夹里的文件,然后自动渲染展示。这也代表所有的jsp页面都将写在这里,所以需要把自动生成的index页面也移动到jsp文件夹里,这样在启动的时候会找不到启动开始的页面,所以在配置文件web.xml里面需要添加一段更改开始启动页面的地址

1
2
3
<welcome-file-list>
<welcome-file>/WEB-INF/jsp/index.jsp</welcome-file>
</welcome-file-list>

最上方的配置文件已经添加完成直接copy就可以

使用

前端控制器(Controller)的注解配置

在创建完所有的包洛后需要进行一些简单的注释配置 在前端控制器(Controller)里需要添加注解**@Controller**并且在里面使用映射器@Resource 接受服务器端返回的方法

1
2
3
4
5
@Controller
public class UserController {
@Resource
private UserService userService;
}

在前端控制器(Controller)中,通常使用Spring框架,你需要进行以下配置:

  1. 添加 @Controller 注解:使用 @Controller 注解来标识一个类为控制器。这表明该类将处理HTTP请求。
  2. 使用 @Autowired@Resource:使用这些注解来注入服务(Service)或其他组件到控制器中,而不是“接受服务器端返回的方法”。你通常将业务逻辑放在服务(Service)类中。

修正后的描述如下:

在前端控制器(Controller)里,需要添加 @Controller 注解并注入服务,例如:

1
2
3
4
5
6
7
8
9
import org.springframework.stereotype.Controller;
import org.springframework.beans.factory.annotation.Autowired;
@Controller
public class MyController {
@Autowired
private MyService myService;
// 定义处理HTTP请求的方法
// ...
}

在这个示例中,MyController 类被标识为控制器,并使用 @Autowired 注解注入了 MyService 服务。服务类中包含了服务器端的业务逻辑。请注意,通常不使用 @Resource 注解来注入服务,而是使用 @Autowired 或其他Spring注解。

服务器端实现类(ServiceImpl)的注解配置

在服务端里需要添加@Service注解并注入服务@Resource

1
2
3
4
5
@Service
public class UserServiceImpl implements UserService {
@Resource
private UserMapper userMapper;
}
Dao类编写

在dao包中,需要创建一个接口类和对应的XML文件。接口类应该定义与数据访问相关的方法。一旦接口方法定义完成,你可以使用MyBatis框架来生成XML文件,并在XML文件中编写SQL语句以便执行数据库操作并返回相应的数据。

pojo类编写

在POJO(Plain Old Java Object)中创建一个Java文件以表示实体类。实体类的属性构造函数应根据你要实现的功能进行编写。通常包括以下内容:

  • 属性:定义类的属性,这些属性对应于数据库表中的字段。
  • 无参构造函数:提供一个无参构造函数,用于创建对象实例。
  • 有参构造函数:提供有参构造函数,以便可以根据需要初始化对象。
  • Getter和Setter方法:为每个属性提供Getter(获取属性值)和Setter(设置属性值)方法,以便可以访问和修改对象的属性。
编写逻辑功能

到此所有配置全部完成最后你需要根据你的业务需求去编写相关逻辑,使用SSM框架减轻了很多重复代码的编写,只需要编写核心逻辑代码就可以运行页面,使用MVC系统让代码间的耦合度降低更适合抽象的编写代码,比如你要编写一个查询User的功能那么你的编写逻辑和顺序就是

建立一个User实体类在pojo,然后创建User前端控制器,创建UserDao编写查询方法然后生成XML文件,编写Service服务类返回查询结果,在前端控制器调用Service的查询方法并且返回结果使用List返回结果输出到Jsp页面,在Jsp页面遍历数据展示渲染

Spring MVC框架文件上传

Spring MVC框架下文件上传的步骤如下:

  1. 前端使用form表单,设置enctype=”multipart/form-data”属性。这个属性必须的,以二进制流的方式来处理表单数据,这种编码方式会把文件域指定文件的内容也封装到请求参数中,不会对字符编码。
  2. 在Spring MVC的配置文件web.xml中,配置文件上传的路径。
  3. 在Spring MVC中创建一个Controller,里面定义一个处理文件上传的方法。
  4. 处理文件上传的方法会获取到前端传过来的文件,然后进行相应的处理。

这就是基本的步骤,当然在具体实现的时候可能需要考虑其他的一些细节,比如文件的存储位置、文件的安全性等问题。

导包

要使用MVC框架文件上传,首先需要导包

commons-fileupload-1.2.2.jar

commons-io-2.4.jar

commons-lang-2.6.jar

可以在配套文件/SSM整合导包/文件上传的包找到相应的文件

applicationContext.xml配置

在使用前还需要配置相关的参数

1
2
3
4
5
<!-- 配置MutipartResolver解析器,用于上传文件,使用Spring的CommonsMultipartResolver-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="500000"></property>
<property name="defaultEncoding" value="UTF-8"></property>
</bean>

里面的两个参数分别是maxUploadSize 值是上传的文件大小封顶 defaultEncoding 值是文件编码

jsp页面传值和前端控制器(Controller)接收

在jsp页面使用form表单提交文件和其他信息在控制器进行接收,这是jsp页面实例

1
2
3
4
5
6
<p>上传头像</p>
<form method="POST" action="upload" enctype="multipart/form-data">
<input type="file" name="attachs">
<input type="text" name="id">
<button type="submit">Update</button>
</form>

tip:注意,一定要在form里有**enctype=”multipart/form-data”**否则就无法传值到控制器里,因为没有流向

在前端控制器可以这样接收

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
@PostMapping("/uploaddate")
public String handleFileUpload(@RequestParam("attachs") MultipartFile file, @RequestParam("id") String id) {
// 处理上传的文件
String filePath = null;
if (!file.isEmpty()) {
try {
// 获取上传的文件名
String fileName = file.getOriginalFilename();
System.out.println("上传的文件名称:" + fileName);
// 创建目标文件路径
filePath = "path/to/save/" + id;
// 创建目标文件夹(如果不存在)
new File(filePath).mkdirs();
// 保存上传的文件到目标路径
file.transferTo(new File(filePath + File.separator + fileName));
// 处理文件上传成功的逻辑
// ...
} catch (IOException e) {
// 文件上传失败的逻辑
System.out.println("上传失败");
e.printStackTrace();
// 返回错误信息给用户
return "error";
}
} else {
// 文件为空
System.out.println("文件空");
}
// 文件上传成功
userService.Addimage(Integer.parseInt(id),filePath);
return "success";
}

重点在于,使用**@RequestParam(“attachs”) MultipartFile file这个注解方法参数就可以获取到前端页面传的文件,然后使用调用相应的get方法其他方法就可以实现保存或者读取文件信息**的操作

以下的图表展示了MultipartFile file的所有方法调用还有解释

方法 解释
getInputStream() 该方法返回一个InputStream,用于读取上传的文件数据。这是由于MultipartFile继承自InputStreamSource接口,封装了getInputStream方法。通过这个方法,可以将文件转换为输入流形式进行传输。使用此方法时,可能会抛出IOException异常。
getName() 此方法获取上传文件的参数名称。在SpringBoot后台中,这个名称是通过@Param注解定义的。
getOriginalFileName() 此方法返回上传文件的完整名称,包括文件名和扩展名。
getContentType() 此方法获取上传文件的类型,注意是文件的类型,而不是文件的扩展名。
getSize() 此方法返回上传文件的大小,单位是字节。
isEmpty() 此方法判断上传的文件是否为空,如果为空则表示没有上传任何文件。
transferTo(File dest) 此方法将接收到的文件传输到给定的目标路径。使用此方法时,可能会抛出IOException、IllegalStateException异常。
文件保存位置

文件保存的位置在创建的tomcat构建文件里 默认是bin文件下面。

  • Title: SSM开发框架部署
  • Author: owofile
  • Created at : 2022-10-03 11:22:40
  • Updated at : 2025-04-11 21:18:25
  • Link: https://owofile.github.io/blog/2022/10/03/SSM开发框架/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments