1、什么是SSM框架
- SSM框架是Spring、Spring MVC 和MyBatis框架的整合,是標(biāo)準(zhǔn)的MVC模式
- 標(biāo)準(zhǔn)的SSM框架有四層,分別是dao層(mapper),service層,controller層和View層
- 使用spring實(shí)現(xiàn)業(yè)務(wù)對(duì)象管理,使用spring MVC負(fù)責(zé)請(qǐng)求的轉(zhuǎn)發(fā)和視圖管理,mybatis作為數(shù)據(jù)對(duì)象的持久化引擎
1.1、持久層
持久層,也就是我們常說(shuō)的dao層或者mapper層
作用:主要是做數(shù)據(jù)持久層的工作,負(fù)責(zé)與數(shù)據(jù)庫(kù)進(jìn)行聯(lián)絡(luò)的一些任務(wù)都封裝在此
- Dao層首先設(shè)計(jì)的是接口,然后再Spring的配置文件中定義接口的實(shí)現(xiàn)類
- 然后可以在模塊中進(jìn)行接口的調(diào)用來(lái)進(jìn)行數(shù)據(jù)業(yè)務(wù)的處理(不在關(guān)心接口的實(shí)現(xiàn)類是哪個(gè)類)
- 數(shù)據(jù)源的配置以及有關(guān)數(shù)據(jù)庫(kù)連接的參數(shù)都在Spring的配置文件中進(jìn)行配置
1.2、業(yè)務(wù)層
業(yè)務(wù)層,也就是我們常說(shuō)的service層
作用:Service層主要負(fù)責(zé)業(yè)務(wù)模塊的邏輯應(yīng)用設(shè)計(jì)
- 先設(shè)計(jì)接口然后再設(shè)計(jì)實(shí)類,然后再在Spring的配置文件中配置其實(shí)現(xiàn)的關(guān)聯(lián)
- 業(yè)務(wù)邏輯層的實(shí)現(xiàn)具體要調(diào)用到自己已經(jīng)定義好的Dao的接口上,這樣就可以在應(yīng)用中調(diào)用Service接口來(lái)進(jìn)行業(yè)務(wù)處理
- 建立好Dao之后再建立service層,service層又要在controller層之下,因?yàn)榧纫{(diào)用Dao層的接口又要提供接口給controller層,每個(gè)模型都有一個(gè)service接口,每個(gè)接口分別封裝各自的業(yè)務(wù)處理的方法
1.3、表現(xiàn)層
表現(xiàn)層,也就是我們常說(shuō)的Controller層
作用:負(fù)責(zé)具體的業(yè)務(wù)模塊流程的控制
- 配置也同樣是在Spring的配置文件里面進(jìn)行
- 調(diào)用Service層提供的接口來(lái)控制業(yè)務(wù)流程
- 業(yè)務(wù)流程的不同會(huì)有不同的控制器,在具體的開發(fā)中可以將我們的流程進(jìn)行抽象的歸納,設(shè)計(jì)出可以重復(fù)利用的子單元流程模塊
1.4、View層
作用:主要和控制層緊密結(jié)合,主要負(fù)責(zé)前臺(tái)jsp頁(yè)面的表示
各層之間的關(guān)系:
1.5、SpringMVC執(zhí)行流程
復(fù)雜版:
1、 用戶發(fā)送請(qǐng)求至前端控制器DispatcherServlet
2、 DispatcherServlet收到請(qǐng)求調(diào)用HandlerMapping處理器映射器
3、 處理器映射器找到具體的處理器(可以根據(jù)xml配置、注解進(jìn)行查找),生成處理器對(duì)象及處理器攔截器(如果有則生成)一并返回給DispatcherServlet
4、 DispatcherServlet調(diào)用HandlerAdapter處理器適配器
5、 HandlerAdapter經(jīng)過(guò)適配調(diào)用具體的處理器(Controller,也叫后端控制器)
6、 Controller執(zhí)行完成返回ModelAndView
7、 HandlerAdapter將controller執(zhí)行結(jié)果ModelAndView返回給DispatcherServlet
8、 DispatcherServlet將ModelAndView傳給ViewReslover視圖解析器
9、 ViewReslover解析后返回具體View
10、DispatcherServlet根據(jù)View進(jìn)行渲染視圖(即將模型數(shù)據(jù)填充至視圖中)
11、 DispatcherServlet響應(yīng)用戶
簡(jiǎn)單版:
1.客戶端發(fā)送請(qǐng)求到DispacherServlet(分發(fā)器)
2.由DispacherServlet控制器查詢HanderMapping,找到處理請(qǐng)求的Controller
3.Controller調(diào)用業(yè)務(wù)邏輯處理后,返回ModelAndView
4.DispacherSerclet查詢視圖解析器,找到ModelAndView指定的視圖
5.視圖負(fù)責(zé)將結(jié)果顯示到客戶端
1.6、MyBatis
- MyBatis是對(duì)jdbc的封裝,它讓數(shù)據(jù)庫(kù)底層操作變的透明
- MyBatis的操作都是圍繞一個(gè)SqlSessionFactory實(shí)例展開的
- MyBatis通過(guò)配置文件關(guān)聯(lián)到各實(shí)體類的Mapper文件,Mapper文件中配置了每個(gè)類對(duì)數(shù)據(jù)庫(kù)所需進(jìn)行的sql語(yǔ)句映射
- 在每次與數(shù)據(jù)庫(kù)交互時(shí),通過(guò)SqlSessionFactory拿到一個(gè)SqlSession,再執(zhí)行sql命令
- 所以,MyBatis的核心是SqlSession
2、SSM實(shí)戰(zhàn)搭建
搭建思路如下:
2.1、創(chuàng)建工程
新建完成后工程目錄結(jié)構(gòu)如下:
然后替換web.xml中的內(nèi)容如下:
<?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">
</web-app>
2.2、添加依賴
在pom.xml中添加依賴,如下:
<?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.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.itsource</groupId>
<artifactId>SSMTest</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>SSMTest Maven Webapp</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<!--spring-webmvc-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.15.RELEASE</version>
</dependency>
<!--mybatis依賴-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<!--mybatis和spring整合的依賴-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
</dependency>
<!--mysql驅(qū)動(dòng)-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
<!--druid連接池依賴-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.1</version>
</dependency>
<!--lombok依賴-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
</dependency>
<!--jackson java對(duì)象轉(zhuǎn)換為json對(duì)象 @ResponseBody-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.2.2</version>
</dependency>
<!--servlet-api依賴-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.15.RELEASE</version>
</dependency>
<!--sql日志-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.30</version>
</dependency>
</dependencies>
</project>
2.3、配置spring.xml文件
在main目錄下,新建java和resources目錄,如下:(如果有就不需要新建了)
然后在resources目錄下新建spring.xml,內(nèi)容如下:
<?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:mvc="http://www.springframework.org/schema/mvc"
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">
<!--包掃描-->
<context:component-scan base-package="cn.itsource" />
<!-- 聲明視圖解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
<!--靜態(tài)資源放行-->
<mvc:default-servlet-handler />
<!-- 聲明springmvc注解驅(qū)動(dòng) -->
<mvc:annotation-driven />
<!--數(shù)據(jù)源配置-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/ssmtest?serverTimezone=Asia/Shanghai"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
<!--初始化連接數(shù)量:根據(jù)你項(xiàng)目的并發(fā)進(jìn)行評(píng)估-->
<!--最少連接池的個(gè)數(shù)-->
<property name="minIdle" value="5"/>
<!--初始的連接池的個(gè)數(shù)-->
<property name="initialSize" value="5"/>
<!--最大的連接個(gè)數(shù)-->
<property name="maxActive" value="10"/>
<!--超過(guò)的最大連接池個(gè)數(shù),等待時(shí)間 單位是毫秒-->
<property name="maxWait" value="3000"/>
</bean>
<bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!--設(shè)置數(shù)據(jù)源-->
<property name="dataSource" ref="dataSource" />
<!--設(shè)置mybatis映射文件的路徑-->
<property name="mapperLocations" value="classpath:mapper/*.xml" />
</bean>
<!--為dao接口生成代理實(shí)現(xiàn)類-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="cn.itsource.dao" />
</bean>
</beans>
2.4、配置web.xml文件
web.xml內(nèi)容如下:
<?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">
<!--servlet-->
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- 聲明字符集過(guò)濾器 -->
<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>forceRequestEncoding</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>forceResponseEncoding</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>
2.5、log4j.properties
在resources目錄下新建log4j.properties文件,內(nèi)容如下:
log4j.rootLogger=DEBUG, Console
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
2.6、準(zhǔn)備表
在本地MySQL服務(wù)器中新建數(shù)據(jù)庫(kù)【ssmtest】,然后新建表【t_user】,建表語(yǔ)句如下:
DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user` (
`id` bigint(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵ID',
`username` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '姓名',
`sex` varchar(2) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '性別',
`age` int(3) NULL DEFAULT NULL COMMENT '年齡',
`intro` varchar(12) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '個(gè)人簡(jiǎn)介',
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_user_username`(`username`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '用戶信息表' ROW_FORMAT = DYNAMIC;
2.7、實(shí)體類
package cn.itsource.entity;
import lombok.Data;
/**
* <p>用戶信息表對(duì)應(yīng)實(shí)體類</p>
*
* @author 波波老師(微信 : javabobo0513)
*/
@Data
public class User {
private Long id;
private String username;
private String sex;
private Integer age;
private String intro;
}
2.8、mapper
在dao包下新建UserMapper類,代碼:
package cn.itsource.dao;
import cn.itsource.entity.User;
import java.util.List;
/**
* <p>UserMapper</p>
*
* @author 波波老師(微信 : javabobo0513)
*/
public interface UserMapper {
//保存用戶信息到數(shù)據(jù)庫(kù)
int saveUser(User user);
//查詢數(shù)據(jù)庫(kù)中所有用戶信息
List<User> selectAllUser();
}
在resources下的mapper文件夾中新建UserMapper.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="cn.itsource.dao.UserMapper">
<!-- 使用 insert、update、delete、select 標(biāo)簽編寫sql語(yǔ)句 -->
<!--保存用戶信息到數(shù)據(jù)庫(kù)-->
<insert id="saveUser">
insert into t_user(username, sex, age, intro) values (#{username}, #{sex}, #{age}, #{intro})
</insert>
<!--查詢所有用戶信息-->
<select id="selectAllUser" resultType="cn.itsource.entity.User">
select id, username, sex, age, intro from t_user order by id desc
</select>
</mapper>
2.9、service
在service包下新建UserService類:代碼如下:
package cn.itsource.service;
import cn.itsource.entity.User;
import java.util.List;
/**
* <p>UserService</p>
*
* @author 波波老師(微信 : javabobo0513)
*/
public interface UserService {
//保存用戶信息到數(shù)據(jù)庫(kù)
int saveUser(User user);
//查詢數(shù)據(jù)庫(kù)中所有用戶信息
List<User> selectAllUser();
}
然后在service包下新建impl包,其下新建UserServiceImpl類,代碼如下:
package cn.itsource.service.impl;
import cn.itsource.dao.UserMapper;
import cn.itsource.entity.User;
import cn.itsource.service.UserService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
/**
* <p>UserServiceImpl</p>
*
* @author 波波老師(微信 : javabobo0513)
*/
@Service
public class UserServiceImpl implements UserService {
//注入 UserMapper 對(duì)象
@Resource
private UserMapper userMapper;
@Override
public int saveUser(User user) {
return userMapper.saveUser(user);
}
@Override
public List<User> selectAllUser() {
return userMapper.selectAllUser();
}
}
2.10、controller
在controller包下新建UserController類,代碼如下:
package cn.itsource.controller;
import cn.itsource.entity.User;
import cn.itsource.service.UserService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;
import javax.annotation.Resource;
import java.util.List;
/**
* <p>UserController</p>
*
* @author 波波老師(微信 : javabobo0513)
*/
@RestController
@RequestMapping("/user")
public class UserController {
@Resource
private UserService userService;
/**
* 新增用戶
* @param user
* @return
*/
@PostMapping("/saveUser")
public ModelAndView saveUser(User user){
ModelAndView mv = new ModelAndView();
int saveCount = userService.saveUser(user);
if(saveCount > 0){
mv.addObject("msg", "新增用戶成功");
mv.setViewName("success");
}else{
mv.addObject("msg", "新增用戶失敗");
mv.setViewName("fail");
}
return mv;
}
/**
* 查詢所有用戶信息
* @param user
* @return
*/
@GetMapping("/selectAllUser")
public List<User> selectAllUser(User user){
List<User> userList = userService.selectAllUser();
return userList;
}
}
2.11、前端頁(yè)面
1、index.html
首先改造webapp目錄下的index.html文件,內(nèi)容如下:
<%@ page contentType="text/html;charset=utf-8" language="java" %>
<%
String basePath=request.getScheme() + "://" + request.getServerName()
+ ":" + request.getServerPort() + request.getContextPath() + "/";
%>
<html>
<head>
<base href="<%=basePath%>">
<title>SSM實(shí)戰(zhàn)案例</title>
</head>
<body>
<div align="center">
<p>SSM整合小案例</p>
<table>
<tr>
<td><a href="addUser.jsp">注冊(cè)用戶</a></td>
<td><br/></td>
<td><a href="queryUser.jsp">查詢用戶</a></td>
</tr>
</table>
</div>
</body>
</html>
效果如下:
2、addUser.jsp
在webapp目錄下新建文件addUser.jsp,用來(lái)新增用戶,代碼如下:
<%@ page contentType="text/html;charset=utf-8" language="java"%>
<html>
<head>
<title>注冊(cè)用戶</title>
</head>
<body>
<div align="center">
<p>注冊(cè)用戶</p>
<form action="user/saveUser" method="post">
<table>
<tr>
<td>姓名:</td>
<td><input type="text" name="username"></td>
</tr>
<tr>
<td>年齡:</td>
<td><input type="text" name="age"></td>
</tr>
<tr>
<td>性別:</td>
<td><input type="text" name="sex"></td>
</tr>
<tr>
<td>簡(jiǎn)介:</td>
<td><input type="text" name="intro"></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="注冊(cè)"></td>
</tr>
</table>
</form>
</div>
</body>
</html>
效果如下:
3、queryUser.jsp
在webapp目錄下新建文件queryUser.jsp,用來(lái)查詢所有用戶,代碼如下:
<%@ page contentType="text/html;charset=utf-8" language="java" %>
<%
String basePath=request.getScheme() + "://" + request.getServerName()
+ ":" + request.getServerPort() + request.getContextPath() + "/";
%>
<html>
<head>
<base href="<%=basePath%>">
<title>查詢學(xué)生</title>
<%--<script type="text/javascript" src="js/jquery-3.6.0.js"></script>--%>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script type="text/javascript">
$(function () {
$("#myBtn").on("click",function () {
$.ajax({
url: "user/selectAllUser",
dataType: "json",
success: function (resp) {
$("#userInfo").empty();
$.each(resp, function (i,n) {
$("#userInfo").append("<tr><td>" + n.id + "</td>" +
"<td>" + n.username + "</td>" +
"<td>" + n.age + "</td>" +
"<td>" + n.sex + "</td>" +
"<td>" + n.intro + "</td></tr>");
})
}
})
})
})
</script>
<style>
.tdStyle{
width: 100px;
}
</style>
</head>
<body>
<div align="center">
<p>用戶列表 <button id="myBtn">獲取用戶信息</button></p>
<table>
<thead>
<tr>
<td class='tdStyle'>id</td>
<td class='tdStyle'>姓名</td>
<td class='tdStyle'>年齡</td>
<td class='tdStyle'>性別</td>
<td class='tdStyle'>簡(jiǎn)介</td>
</tr>
</thead>
<tbody id="userInfo">
</tbody>
</table>
</div>
</body>
</html>
效果如下:
4、success.jsp和fail.jsp
在webapp - WEB-INF目錄下新建success.jsp和fail.jsp文件,內(nèi)容分別如下:
success.jsp:
<%@ page contentType="text/html;charset=utf-8" language="java" %>
<html>
<head>
<title>success</title>
</head>
<body>
<h3>結(jié)果:${msg}</h3>
</body>
</html>
效果:
fail.jsp:
<%@ page contentType="text/html;charset=utf-8" language="java" %>
<html>
<head>
<title>fail</title>
</head>
<body>
<h3>結(jié)果:${msg}</h3>
</body>
</html>
2.12、項(xiàng)目結(jié)構(gòu)
目前項(xiàng)目結(jié)構(gòu)如下:
2.13、部署
1、tomcat準(zhǔn)備
本地部署到tomcat,首先需要你本地有tomcat服務(wù)器,下載地址:
鏈接:https://pan.baidu.com/s/1VpRboSME8R64yhXE4MwxiA
提取碼:nr43
下載下來(lái)后,直接解壓即可,如下:
我這里使用的tomcat版本是:8.5.75
2、IDEA配置Tomcat
按照下面步驟一步一步做就可以在IDEA中配置好tomcat了
然后開始部署:
然后:
就成這樣了:
3、運(yùn)行
啟動(dòng)成功后,會(huì)自動(dòng)打開頁(yè)面,如下:
到此,我們的SSM項(xiàng)目就部署完畢,可以正常使用了
4、Tomcat亂碼問(wèn)題
上面我們可以看到,Tomcat啟動(dòng)后,控制臺(tái)打印的日志出現(xiàn)了亂碼,按照下面方式做即可
打開tomcat安裝目錄下conf下的logging.properties文件:
將該配置文件中的UTF-8全部改成GBK
然后再重啟一下Tomcat,就會(huì)發(fā)現(xiàn)已經(jīng)沒(méi)有亂碼了:
如果按照上面設(shè)置后還沒(méi)有好的話,就繼續(xù)設(shè)置:
查看下IDEA的字集是不是UTF-8,確認(rèn)一下,不是的話,改成UTF-8:
打開IDEA的安裝目錄下的bin目錄,打開里面的idea64.exe.vmoptions文件:
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-414314.html
添加內(nèi)容:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-414314.html
-Dfile.encoding=UTF-8
-Dconsole.encoding=UTF-8
到了這里,關(guān)于SSM項(xiàng)目搭建保姆級(jí)教程的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!