SSM框架整合

SSM框架整合

一、idea创建项目

1.创建普通的maven项目然后next

image-20210910082103269

image-20210910082313486

建完之后的第一件大事就是项目改成UTF-8编码:

image-20210910155041439

2.maven导入相关的pom依赖

pom.xml:

<dependencies>

        <!-- https://mvnrepository.com/artifact/junit/junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
        </dependency>

        <!--数据库驱动-->
        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.24</version>
        </dependency>

        <!--数据库连接池-->
        <!-- https://mvnrepository.com/artifact/com.mchange/c3p0 -->
        <dependency>
            <groupId>com.mchange</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.5.2</version>
        </dependency>

        <!--Servlet - JSP -->
        <!-- https://mvnrepository.com/artifact/javax.servlet/servlet-api -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/javax.servlet.jsp/jsp-api -->
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.2</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>

        <!--Mybatis-->
        <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.7</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>2.0.6</version>
        </dependency>

        <!--Spring-->
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.3.6</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.3.6</version>
        </dependency>

        <!--lombok偷懒神器-->
        <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.20</version>
        </dependency>

        <!--json-->
        <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.12.3</version>
        </dependency>

        <!--事务织入-->
        <!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.9.6</version>
        </dependency>

        <!--log4j日志-->
        <!-- https://mvnrepository.com/artifact/log4j/log4j -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>


    </dependencies>

如果是连Oracle数据库的话,直接把数据库驱动的依赖换掉就行了:

<!--数据库驱动-->
        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc6</artifactId>
            <version>11.2.0.3</version>
        </dependency>

3.maven资源过滤设置

pom.xml:

<!--在build中配置resources 防止我们资源导出失败的问题-->
    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>

            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>

二、连接数据库、创建配置文件

连接数据库:

image-20210910083625292

创建文件:

image-20210910084452849

创建mybatis-config.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>
    
</configuration>

创建applicationContext.xml:

<?xml version="1.0" encoding="UTF-8"?>
<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">

</beans>

applicationContext.xml是spring的配置文件,可以通过以下进行查看引入的配置文件:

image-20210910084758163

image-20210910084820295

创建database.properties:

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssmbuild?useSSL=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
jdbc.username=root
jdbc.password=填你自个的密码

其中ssmbuild是数据库名,切记要改!!!

如果是oracle数据库:

jdbc.driver=oracle.jdbc.OracleDriver
jdbc.url=jdbc:oracle:thin:@localhost:1521:XE
jdbc.username=system
jdbc.password=填你自个的

三、Mybatis层

mybatis-config.xml中增加配置:

<configuration>

    <!--交给spring去配置数据源-->
    <typeAliases>
        <!--直接扫描包-->
        <package name="com.huang.pojo"/>
    </typeAliases>
    
</configuration>

1. 创建实体类

pojo下按照数据库的表创建实体类Books:

package com.huang.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Books {
    private int bookID;
    private String bookName;
    private int bookCounts;
    private String detail;
}

其中引入了偷懒神器lombok:

@Data //相当于下图 Getter and Setter
@AllArgsConstructor //相当于下图 Constructor 有参构造
@NoArgsConstructor //相当于无参构造

'Alt'+'Insert'键呼出如下图:

image-20210910090242438

查看引入的效果:

image-20210910090857042

2.创建dao接口

在dao下创建BookMapper接口类,并增加需要的增删改查操作:

package com.huang.dao;

import com.huang.pojo.Books;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface BookMapper {
    //增加一本书
    int addBook(Books books);

    //按ID删除
    int deleteBookById(@Param("bookID") int id);

    //按ID修改
    int updateBook(Books books);

    //按ID查询
    Books selectBookById(@Param("bookID") int id);

    //查询所有
    List<Books> selectAllBook();

    //按Name查询
    Books selectBookByName(@Param("bookName") String bookName);
}

然后在dao下创建BookMapper.xml写入相关的操作sql语句:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.huang.dao.BookMapper">
    <insert id="addBook" parameterType="books">
        insert into ssmbuild.books(bookName,bookCounts,detail)
        values(#{bookName},#{bookCounts},#{detail});
    </insert>

    <delete id="deleteBookById" parameterType="int">
        delete from ssmbuild.books where bookID = #{bookID};
    </delete>
    
    <update id="updateBook" parameterType="books">
        update ssmbuild.books
        set bookName=#{bookName},bookCounts=#{bookCounts},detail=#{detail}
        where bookID=#{bookID};
    </update>

    <select id="selectBookById" resultType="books">
        select * from ssmbuild.books
        where bookID=#{bookID};
    </select>

    <select id="selectAllBook" resultType="books">
        select * from ssmbuild.books;
    </select>

    <select id="selectBookByName" resultType="books">
        select * from ssmbuild.books where bookName=#{bookName};
    </select>

</mapper>

如果是oracle数据库,相关的操作sql语句则和mysql稍微有点不同:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.huang.dao.BookMapper">
    <insert id="addBook" parameterType="books">
        insert into "books"("bookName","bookCounts","detail")
        values(#{bookName},#{bookCounts},#{detail})
    </insert>

    <delete id="deleteBookById" parameterType="int">
        delete from "books" where "bookID" = #{bookID}
    </delete>

    <update id="updateBook" parameterType="books">
        update "books"
        set "bookName"=#{bookName},"bookCounts"=#{bookCounts},"detail"=#{detail}
        where "bookID"=#{bookID}
    </update>

    <select id="selectBookById" resultType="books">
        select * from "books"
        where "bookID"=#{bookID}
    </select>

    <select id="selectAllBook" resultType="books">
        select * from "books"
    </select>

    <select id="selectBookByName" resultType="books">
        select * from "books" where "bookName"=#{bookName}
    </select>

</mapper>

然后需要把xml文件绑定到mybatis-config.xml配置文件中:

<configuration>

    <!--交给spring去配置数据源-->
    <typeAliases>
        <package name="com.huang.pojo">
    </typeAliases>

    <!--新增的xml文件需要绑定到这里面 不然无法识别-->
    <mappers>
        <mapper class="com.huang.dao.BookMapper"/>
        <!--也可以直接扫描包-->
        <!--<package name="com.huang.dao"/>-->
    </mappers>

</configuration>

如果mapper文件和接口的名字不一样,可以用resource引入

<mapper resource="com.huang.dao.BookMapper"></mapper>

3.创建业务层service

service下创建BookService接口:

package com.huang.service;

import com.huang.pojo.Books;

import java.util.List;

public interface BookService {

    //增加一本书
    int addBook(Books books);

    //按ID删除
    int deleteBookById(int id);

    //按ID修改
    int updateBook(Books books);

    //按ID查询
    Books selectBookById(int id);

    //查询所有
    List<Books> selectAllBook();

    //按Name查询
    Books selectBookByName(String bookName);
}

service下创建接口的实现类BookServiceImpl类:

image-20210910093223350

然后调用接口类,加上implements BookService'Alt'+'Enter'呼出上图所示选择框,选择Implement methods继承接口类的所有方法:

package com.huang.service;

import com.huang.pojo.Books;

import java.util.List;

public class BookServiceImpl implements BookService{
    @Override
    public int addBook(Books books) {
        return 0;
    }

    @Override
    public int deleteBookById(int id) {
        return 0;
    }

    @Override
    public int updateBook(Books books) {
        return 0;
    }

    @Override
    public Books selectBookById(int id) {
        return null;
    }

    @Override
    public List<Books> selectAllBook() {
        return null;
    }

    @Override
    public Books selectBookByName(String bookName) {
        return null;
    }
}

service要调dao层,所以要组合dao,在类里面加上:

private BookMapper bookMapper;

然后增加它的set方法:

public void setBookMapper(BookMapper bookMapper) {
        this.bookMapper = bookMapper;
}

然后就可以调用dao层,以addBook业务为例:

@Override
    public int addBook(Books books) {
        return bookMapper.addBook(books);
    }

全部改完之后,BookServiceImpl类长这个样子:

package com.huang.service;

import com.huang.dao.BookMapper;
import com.huang.pojo.Books;

import java.util.List;

public class BookServiceImpl implements BookService{

    private BookMapper bookMapper;

    public void setBookMapper(BookMapper bookMapper) {
        this.bookMapper = bookMapper;
    }

    @Override
    public int addBook(Books books) {
        return bookMapper.addBook(books);
    }

    @Override
    public int deleteBookById(int id) {
        return  bookMapper.deleteBookById(id);
    }

    @Override
    public int updateBook(Books books) {
        return  bookMapper.updateBook(books);
    }

    @Override
    public Books selectBookById(int id) {
        return  bookMapper.selectBookById(id);
    }

    @Override
    public List<Books> selectAllBook() {
        return  bookMapper.selectAllBook();
    }

    @Override
    public Books selectBookByName(String bookName) {
        return bookMapper.selectBookByName(bookName);
    }
}

四、Spring层

1. 创建spring-dao.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<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">

</beans>

前面已经创建了ApplicationContext,直接点添加:

image-20210910100710124

1.关联数据库配置文件:

<?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"
       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">

    <!--1.关联数据库配置文件-->
    <context:property-placeholder location="classpath:database.properties"/>

</beans>

2.数据库连接池:

<!--2.连接池 dbcp:半自动化操作 不能自动连接
                c3p0:自动化操作(自动化的加载配置文件 并且可以自动设置到对象中)
                druid
                hikari
     -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="${jdbc.driver}"/>
        <property name="jdbcUrl" value="${jdbc.url}"/>
        <property name="user" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>

        <!-- c3p0连接池的私有属性 -->
        <property name="maxPoolSize" value="30"/>
        <property name="minPoolSize" value="10"/>
        <!-- 关闭连接后不自动commit -->
        <property name="autoCommitOnClose" value="false"/>
        <!-- 获取连接超时时间 -->
        <property name="checkoutTimeout" value="10000"/>
        <!-- 当获取连接失败重试次数 -->
        <property name="acquireRetryAttempts" value="2"/>
    </bean>

3.sqlSessionFactory配置:

<!--3.配置sessionFactory-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"></property>
        <!--加载mybatis核心文件-->
        <property name="configLocation" value="classpath:mybatis-config.xml"/>
    </bean>

4.配置dao接口扫描包:

<!--4.扫描mapper所在的包 为mapper创建实现类-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!--注入sqlSessionFactory-->
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
        <!--扫描包:dao-->
        <property name="basePackage" value="com.huang.dao"/>
    </bean>

2. 创建spring-service.xml文件

1.扫描service下的包:

	<!--1.扫描service下的包-->
    <context:component-scan base-package="com.huang.service"/>

2.将所有业务类注入到Spring:

    <!--2.将我们的所有业务类注入到Spring 可以通过配置 或 注解实现-->
    <bean id="BookServiceImpl" class="com.huang.service.BookServiceImpl">
        <property name="bookMapper" ref="bookMapper"/>
    </bean>

如果爆红了,则applicationContext.xml中文件引入:

<?xml version="1.0" encoding="UTF-8"?>
<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">

    <import resource="spring-dao.xml"/>
    <import resource="spring-service.xml"/>

</beans>

其实这个配置可以用注解代替:

image-20210913134814850

3.声明式事务配置

<!--3.声明式事务配置-->
    <bean id="TransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <!--注入数据源-->
        <property name="dataSource" ref="dataSource"/>
    </bean>

最后spring-service.xml:

<?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/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/aop
        https://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx.xsd">

    <!--1.扫描service下的包-->
    <context:component-scan base-package="com.huang.service"/>

    <!--2.将我们的所有业务类注入到Spring 可以通过配置 或 注解实现-->
    <bean id="BookServiceImpl" class="com.huang.service.BookServiceImpl">
        <property name="bookMapper" ref="bookMapper"/>
    </bean>

    <!--3.声明式事务配置-->
    <bean id="TransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <!--注入数据源-->
        <property name="dataSource" ref="dataSource"/>
    </bean>

</beans>

五、SpringMVC层

1. 将项目变成web项目

image-20210910111633406

image-20210910111741047

image-20210910111811472

web.xml中增加:

<!--1.配置DispatchServlet: 这个是SpringMVC的核心:请求分发器 前端控制器-->
<servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!--DispatchServlet要绑定spring的配置文件-->
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
    </init-param>
    <!--启动级别:1-->
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>
<!--2.配置springMVC的乱码过滤-->
<!--encodingFilter-->
<filter>
    <filter-name>encodingFilter</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>
</filter>
<filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

<!--Session过期时间-->
<session-config>
    <session-timeout>15</session-timeout>
</session-config>

另外在web.xml中加上:

<welcome-file-list>
    <welcome-file>login.jsp</welcome-file>
</welcome-file-list>

可以指定默认打开的页面。

2. 创建spring-mvc.xml文件

spring-mvc.xml:

<?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">

    <!--1.注解驱动-->
    <mvc:annotation-driven/>

    <!--2.静态资源过滤-->
    <mvc:default-servlet-handler/>

    <!--3.扫描包:controller-->
    <context:component-scan base-package="com.huang.controller"/>

    <!--4.视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
    
</beans>

引入到总的applicationContext.xml文件中:

applicationContext.xml:

<?xml version="1.0" encoding="UTF-8"?>
<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">

    <import resource="spring-dao.xml"/>
    <import resource="spring-service.xml"/>
    <import resource="spring-mvc.xml"/>

</beans>

至此,基本的SSM框架已经全部搭建完成!!!

image-20210910134109802

六、实现业务

在框架的基础上,让controller跟jsp交互起来就行了。

1. 创建BookController文件

在controller下创建BookController文件:

package com.huang.controller;

import com.huang.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/book")
public class BookController {
    //controller 调 service 层
    @Autowired
    @Qualifier("BookServiceImpl")
    private BookService bookService;
    
}

以上的@Qualifier("BookServiceImpl")只有在 四、2.2中加了配置而不是注解才能用。

BookController.java:

@Controller
@RequestMapping("/book")
public class BookController {
    //controller 调 service 层
    @Autowired
    @Qualifier("BookServiceImpl")
    private BookService bookService;

    //查询全部书籍,并且返回到一个书籍展示页面
    @RequestMapping("/allBook")
    public String list(Model model) {
        List<Books> books = bookService.selectAllBook();
        model.addAttribute("books", books);
        return "allBook";
    }
}

2. 创建并配置jsp页面

当调用controller层/book/allBook时根据spring-mvc.xml中配置视图解析器:

<!--4.视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

我们可以知道return "allBook";会跳转到/WEB-INF/jsp/allBook.jsp

我们新建文件:

image-20210910140407596

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>书籍展示</title>
</head>
<body>
    <h1>书籍展示</h1>
</body>
</html>

于是,我们在index.jsp中:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
    <h3>
      <a href="${pageContext.request.contextPath}/book/allBook">进入书籍页面</a>
    </h3>
  </body>
</html>

点击a连接即可发出/book/allBook请求,启动tomcat9测试一下:

image-20210910141223837

image-20210910141319964

3. 遇到常见错误

然后一跑就报错:Artifact ssmbuild2:war exploded: Error during artifact deployment. See server log for details.

image-20210910142950184

解决办法:

image-20210910143648307

image-20210910165126129

然后就发现多了一个lib里面有很多jar包:

image-20210910165318591

image-20210910171822391

image-20210910165630691

然后再重新配tomcat就行:

image-20210910165740056

最后,保证这些选项,文件结构更好看:

image-20210910170928955

posted @ 2021-09-14 20:28  bwh  阅读(148)  评论(0)    收藏  举报