超级详细配置SSM (Intellij idea + Maven + Spring + SpringMVC + MyBatis + c3p0 )

时间2018/12/31,使用的包都是最新的和用的人最多的QAQ。

Maven仓库查找包的地址

https://mvnrepository.com/

在经历了70多个小时的奋斗后(花了60个小时学习了下SSM框架和Maven仓库),终于搭建成功了,这一篇将超级详细的讲诉如何Maven环境下搭建Spring,SpringMvc,MyBatis

最后对他们进行整合(整合这一块我整了10多个小时,终于整出来了( ̄﹏ ̄;))

附上项目地址:

里面包含一个c3p0配置的和druid配置的,其中c3p0配置的就是下面教程里配置的最终结果

想偷懒的可以直接去下载

https://github.com/296326173/SSM/tree/master

本来是不打算写的,但是自己配置这个东西走的路程太过坎坷,还是想分享出来让别人少走点弯路,因为去网上看其他博客的SSM配置,没有一个成功的,可能和我无脑拷贝有关系吧QAQ。所以,我将详细的说每一个配置,告诉你哪里需要修改成你自己的路径

这里先将配置C3P0的数据库连接池,下一篇继续更改为Druid连接池(这东西挺好整出来的,就是很配置的多了点)。

第一次写这个东西,不知道如何做树形图,以后知道了再修改吧。懒得百度了。QAQQQQQQ

所以这一篇将会超级长,超级详细。(不要管前后又没逻辑关系QAQ,紧张(/▽\))


有基础的下面的可以不看(主要给像我一样什么都不懂看的,可以直接跳哒)

先上结果图,让你们心里有个底

先来解释下目录结构(这个很重要),这里目录结构太长了,一张图截图不下来QAQQQQQ

这里可以先不写代码啦,最后加进来测试就好了,最后我还会再说明一次的,这里主要是便于理解(这里长长的一段只是解释,还没开始)

  • untils    工具包类,主要内容是放了一个获取项目根路径的类(要写这个的原因是,我刚刚配置的时候项目路径都写错,根本不会QAQ,有了这个写的就方便很多了,简化了项目路径的格式),其他的工具类你们自行添加
    /**
     * @author: 航航
     * @Description:
     * 不匹配任何路径,跟随服务器启动而启动
     * 在上下文中存储了一个RootPath的值,值为根路径,使用方式  ${RootPath}
     * @Date: 11:33 2018/12/29 33
     */
    @WebServlet(urlPatterns = {},loadOnStartup = 2)
    public class WebPathInitServlet extends HttpServlet {
        @Override
        public void init(ServletConfig config) throws ServletException {
            config.getServletContext().setAttribute("RootPath",config.getServletContext().getContextPath());
            super.init(config);
        }
    }
  • controller   核心控制层,可以把他理解为一个写Servlet的包,但是这里不写Servlet,写SpringMvc提供的Servlet框架(先简单的这么理解)好理解为主(我也不知道对错QAQ,应该没问题)
    /**
     * @author: 航航
     * @Description:
     * @Date: 20:36 2018/12/30 36
     */
    @Controller
    public class GirlController {
        @Autowired
        private GirlService girlService;
    
        @RequestMapping("/queryGirl")
        public String  queryGirl(Model model) throws Exception{
            Girl girl = girlService.selectGirl();
            model.addAttribute("girl",girl);
            return "success";
        }
    }

     

  • mapper 这里主要放置 Sql语句的定义,比如
    //GirlMapper
    @Repository
    public interface GirlMapper {
        Girl queryById(long id);
    }

     

  • pojo 又称entity 放置一些Bean(简单的理解也就是java的类啦) 前面的Gril类就是写在这里面的
    //Girl类
    public class Girl {
        int id;
        String password;
        String account;
        //这里要写上get和set方法哦,别忘记了,Idea的快捷键是alt+insert就可以快速插入
        //如果填写了有参构造方法,一定要添加一个无参的构造方法!!!!
    }

     

  • service  服务层 ,这个层下还有一个serviceImpl的包,图片里折叠了  这层主要调用mapper层里的方法,把数据返回给controller层(不懂没关系QAQ,我也只懂了一点点,反正看到代码就明白怎么用啦)
    //这里是service包的内容  GirlService接口
    @Repository
    public interface GirlService {
        Girl selectGirl() throws Exception;
    }
    
    //下面是serviceImpl包里的实现  GirlServiceImp
    @Service
    class GirlServiceImp implements GirlService {
        @Autowired
        private GirlMapper girlMapper;
    
        @Override
        public Girl selectGirl() throws Exception {
            return girlMapper.queryById(1);
        }
    }
  • dao 有了mapper层应该不用这个东西了,但是我固执的把他留下来了,不舍得删了,内心有一种声音,他应该是有用的。
  • resources 资源目录文件,默认的路径是classpath: 也就是说,后面出现classpath:即使访问这个路径啦
  • resoureces/mapper  这里存放的是mapper的sql查询语句,以后将一次把这个包下的所有内容引用进来,这样看起来比较清晰啦,当然啦这个可以不用写的,直接使用idea 里的mybatis 的插件就可以生成的啦(插件最后来讲)
<!--GirlMapper.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="com.hang.mapper.GirlMapper">
    <select id="queryById" resultType="com.hang.pojo.Girl">
        SELECT * from user WHERE id = #{id};
    </select>
</mapper>
  • resources/spring  设置这个目录还是为了开发方便,主要目的是,把所有的spring的XML配置(虽然现在大家都用注解配置了)都写在这里面,在spring-mybatis.xml中把他们都引入进来,这样方便维护。(目录里你看到有文件,但是没有核心内容,主要还是为了让IDEA检测不报错加的)一下是引入的代码
    <!--导入spring文件夹下的所有spring-*.xml的文件-->
    <import resource="classpath:spring/spring-*.xml"/>

     

  • applicationContext.xml 这个文件是第一步配置Spring的时候使用的,后面整合SSM后,这个文件就可以删除了
  • dispatcher-servlet.xml 这个是SpringMvc的配置文件(很重要!!!)
  • jdbc.properties 这个是数据库的配置文件
  • log4j.properties 这个是日志的配置文件
  • mybatis-config.xml 这个是Mybatis的配置文件,后面整合SSM后将可以删除
  • spring-mybatis.xml 这个超级重要(整合了mybatis-config.xml 和applicationContext.xml )不是单纯的拷贝,还添加了额外的内容,这里的内容包括了Spring和Mybatis的配置

继续解释目录结构

  • webapp 这是一个web的根目录(不知道这样解释有没有问题),他的访问路径是'/'
  • static 静态资源文件目录,路径为 “/static”
  • js JavaScript静态资源文件目录,路径为/static/js
  • images 放置图片资源文件的目录,路径为/static/images
  • css 放置CSS样式的目录,路径为/static/css
  • WEB-INF 路径/WEB-INF
  • views 路径/WEB-INF/views ,这个目录下放置jsp文件,为Controller层提供跳转的页面
  • web.xml 路径/WEB-INF/web.xml 这个是核心配置文件
  • index.jsp 主页
  • Test 这个目录主要是为了使用junit测试
  • resources 测试资源文件(反正标准这样,我几乎不用QAQ)

好啦解释完啦,解下来先配置Spring(这里才是正文)

首先新建项目,这里我用的是JDK11,勾选骨架,选择maven项目webapp,选择下一步

下一步

点击Finish就完成啦

右下角会出现这2框框,第一个告诉你框架构建完成,第二个询问你是否要导入Maven包,import changes 是导入,Enable Auto-Import 表示自动导入(我一般选这个,建议选这个)。

目录结构如下,你会发现少了很多重要内容,所以我们补全他们

点击File,选择那个Project Structre...(也可以用快捷键)

其中main/java目录为Sources

main/resources目录为Resources

Test/java 目录Tests

Test/resources 目录为Test Resources

接下来打开pom.xml(以下内容都在pom.xml里面),修改junit版本为4.12,编译版本为1.8(你们可以不修改,我喜欢用最新的QAQ),并且添加Spring SpringMvc和Mybatis等等依赖包(一次性加完,省的麻烦哦)

根据这段代码修改一下你的pom.xml里面的内容

<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>
    <!--Spring的版本号-->
    <spring.version>5.1.3.RELEASE</spring.version>
    <!--Mybatis的版本号-->
    <mybatis.version>3.4.6</mybatis.version>
    <jstl.version>1.2</jstl.version>
    <slf4j.version>1.7.25</slf4j.version>
</properties>

把这一段代码放到

<dependencies> 内容在这里 </dependencies>
<dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <!-- java ee -->
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-api</artifactId>
            <version>8.0</version>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.2</version>
        </dependency>
        <!-- JSON -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.7</version>
        </dependency>
        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-mapper-asl</artifactId>
            <version>1.9.13</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.9.7</version>
        </dependency>
        <!-- Mysql -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.13</version>
        </dependency>
        <!--日志包-->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <!--<dependency>-->
            <!--<groupId>org.slf4j</groupId>-->
            <!--<artifactId>slf4j-api</artifactId>-->
            <!--<version>${slf4j.version}</version>-->
        <!--</dependency>-->
        <!--<dependency>-->
            <!--<groupId>org.slf4j</groupId>-->
            <!--<artifactId>slf4j-log4j12</artifactId>-->
            <!--<version>${slf4j.version}</version>-->
        <!--</dependency>-->
        <!--数据库连接池 https://mvnrepository.com/artifact/com.mchange/c3p0 -->
        <dependency>
            <groupId>com.mchange</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.5.2</version>
        </dependency>
        <!-- MyBatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>${mybatis.version}</version>
        </dependency>
        <!--Mybatis整合Spring https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.3.2</version>
        </dependency>
        <!-- Spring -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!-- JSP相关 -->
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>${jstl.version}</version>
        </dependency>
        <!--文件上传和下载-->
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.3</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.6</version>
        </dependency>
        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
            <version>1.10</version>
        </dependency>

终极版本(建议根据上面的内容自行修改啦,很简单的,注意标签哦)

<?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>com.hang</groupId>
  <artifactId>WebRoot_SSM</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <name>WebRoot_SSM Maven Webapp</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <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>
    <!--Spring的版本号-->
    <spring.version>5.1.3.RELEASE</spring.version>
    <!--Mybatis的版本号-->
    <mybatis.version>3.4.6</mybatis.version>
    <jstl.version>1.2</jstl.version>
    <slf4j.version>1.7.25</slf4j.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
    <!-- java ee -->
    <dependency>
      <groupId>javax</groupId>
      <artifactId>javaee-api</artifactId>
      <version>8.0</version>
    </dependency>
    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
      <version>1.2.2</version>
    </dependency>
    <!-- JSON -->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.9.7</version>
    </dependency>
    <dependency>
      <groupId>org.codehaus.jackson</groupId>
      <artifactId>jackson-mapper-asl</artifactId>
      <version>1.9.13</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.9.7</version>
    </dependency>
    <!-- Mysql -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.13</version>
    </dependency>
    <!--日志包-->
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.17</version>
    </dependency>
    <!--<dependency>-->
    <!--<groupId>org.slf4j</groupId>-->
    <!--<artifactId>slf4j-api</artifactId>-->
    <!--<version>${slf4j.version}</version>-->
    <!--</dependency>-->
    <!--<dependency>-->
    <!--<groupId>org.slf4j</groupId>-->
    <!--<artifactId>slf4j-log4j12</artifactId>-->
    <!--<version>${slf4j.version}</version>-->
    <!--</dependency>-->
    <!--数据库连接池 https://mvnrepository.com/artifact/com.mchange/c3p0 -->
    <dependency>
      <groupId>com.mchange</groupId>
      <artifactId>c3p0</artifactId>
      <version>0.9.5.2</version>
    </dependency>
    <!-- MyBatis -->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>${mybatis.version}</version>
    </dependency>
    <!--Mybatis整合Spring https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>1.3.2</version>
    </dependency>
    <!-- Spring -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <!-- JSP相关 -->
    <dependency>
      <groupId>jstl</groupId>
      <artifactId>jstl</artifactId>
      <version>${jstl.version}</version>
    </dependency>
    <!--文件上传和下载-->
    <dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.3.3</version>
    </dependency>
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>2.6</version>
    </dependency>
    <dependency>
      <groupId>commons-codec</groupId>
      <artifactId>commons-codec</artifactId>
      <version>1.10</version>
    </dependency>
  </dependencies>

  <build>
    <finalName>WebRoot_SSM</finalName>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>3.2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>

这时候再次点击Crtl+Alt-Shift+S(我用啦快捷键啦)

把Spring模块去掉,点击OK

接下来右键WEBROOT_SSM,选择Add Framework Support...

勾选Spring,SpringMvc,和创建Spring-Config.xml,点击OK

然后观察目录结构,发现多了2个文件

其中applicationContext.xml 是spring的配置文件 (如果没有额外配置,Spring会在/WEB-INF下找applicationContext.xml文件,但是我们的配置是放在resources目录下的,所以后面我们移动 后要额外配置它)

dispatcher-servlet.xml 是springMvc的配置文件

所以下一步你也猜到了,就是移动他们到resources目录下啦,由此,目录结构大致(Test里面的还没填,java里面的还没填)搞定了,接下来就是在配置文件里写内容了

所以把还没新建的目录建立起来咯

在java目录下新建包

com.hang.pojp

com.hang.dao

com.hang.mapper

com.hang.service.serviceImpl

com.hang.controller

com.hang.utils

解下来是填写applicationContext.xml 的内容,写完会发现<import resource="classpath:spring/spring-*.xml"/>报错,是因为resources/spring里的没有spring-*.xml的文件(这里我要求我的小伙伴开发的时候新建的spring配置文件格式为spring-*.xml)

所以就这么填写了,如果想要不报错,就在resources/spring目录下新建一个spring-任意名字.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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd">
    <!--这是一个Spring的配置文件-->

    <!--开启注解扫描,扫描所有的com包下的所有包-->
    <context:component-scan base-package="com"/>
    <!--导入spring文件夹下的所有spring-*.xml的文件-->
    <import resource="classpath:spring/spring-*.xml"/>
</beans>

spring-girl.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>

 接下来打开web.xml(重头戏)

上面一处修改的目的是让程序找到applicationContext.xml文件

下面一处可以不修改,像我这样我萌新就修改为“/”就可以了。这里表示所有请求要走Controller包下的DispatcherServlet。

还需要在<web-app>标签里添加一点点内容

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

完整的内容

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<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">
  <display-name>Archetype Created Web Application</display-name>
    <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>
    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

解下来编写一个Girl的类(注意get,set,toString方法必须有,无参构造必须有)

@Component("girl")
public class Girl {
    Integer id;
    String account;
    String password;
    public void Hello(){
        System.out.println("Spring测试成功啦.....");
    }
    //这里你需要自己添加get,set,和toString方法,代码太长我就不黏贴进去了
}

解下来在Test/java目录下新建com.hang.Test的类

类中填入如下内容:

public class Test {
    @org.junit.Test
    public void testSpring(){
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        Girl girl = (Girl) applicationContext.getBean("girl");
        girl.Hello();
    }
}

 执行控制台出现“Spring测试成功啦.....”表示spring成功

总结:注意事项

1.spring默认找/WEB-INF目录下的applicationContext.xml,我们更改了这个文件的位置,需要在web.xml里配置他的位置。

2. 没有啦(( ̄▽ ̄)"),spring配置是最简单的啦


Mybatis的配置

废话不多说,直接开干(写了4个小时了,写的有点烦躁QAQ,逐渐不安::>_<::)

下次心情好了继续慢慢的改的更加详细

在resources下新建jdbc.properties,内容如下

注意:数据库的url,driver,username,passowrd的内容是你需要修改成自己的

#数据库地址
url=jdbc:mysql://192.168.80.130:3306/example?useUnicode=true&characterEncoding=UTF-8
#数据库驱动
driver=com.mysql.jdbc.Driver
#账号
username=root
#密码
password=123456
#最大连接数
c3p0.maxPoolSize=30
#最小连接数
c3p0.minPoolSize=10
#关闭连接后不自动commit
c3p0.autoCommitOnClose=false
#获取连接超时时间
c3p0.checkoutTimeout=10000
#当获取连接失败重试次数
c3p0.acquireRetryAttempts=2

在resources下新建mybatis-config.xml文件,内容如下,导入后你会发现有个报错的地方

<mappers>
        <!--这里是导入resources/mapper包下的文件-->
        <mapper resource="mapper/GirlMapper.xml"></mapper>
    </mappers>

主要原因是,mapper下没有GirlMapper.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>
    <properties resource="jdbc.properties"></properties>
    <!--类型别名-->
    <settings>
        <!--开启驼峰命名-->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
        <setting name="jdbcTypeForNull" value="NULL"></setting>
        <setting name="lazyLoadingEnabled" value="true"></setting>
        <setting name="aggressiveLazyLoading" value="false"></setting>
        <!--开启二级缓存-->
        <setting name="cacheEnabled" value="true"></setting>
    </settings>
    <typeAliases>
        <!--直接注册整个包,包下的所有类都生效,默认规则写类名-->
        <package name="com.hang.pojo"></package>
    </typeAliases>
    <environments default="mysqlConnect">
        <environment id="mysqlConnect">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="UNPOOLED">
                <property name="url" value="${url}"></property>
                <property name="driver" value="${driver}"></property>
                <property name="username" value="${username}"></property>
                <property name="password" value="${password}"></property>
            </dataSource>
        </environment>
    </environments>


    <mappers>
        <!--这里是导入resources/mapper包下的文件-->
        <mapper resource="mapper/GirlMapper.xml"></mapper>
    </mappers>
</configuration>

在com.hang.mapper下创建一个接口GirlMapper

内容如下,你会发现他会报错,他要求你写上sql语句,那么接下来就在GirlMapper.xml文件里写上sql语句

@Repository
public interface GirlMapper {
    Girl queryById(Integer id);
}

在resources/mapper创建一个GirlMapper.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="com.hang.mapper.GirlMapper">
    <select id="queryById" resultType="com.hang.pojo.Girl">
        SELECT * from user WHERE id = #{id};
    </select>
</mapper>

到现在为止,我们的目录结构为

完成一大半了,继续,我们在resources下新建mybatis-config.xml文件,填写内容如下

简单的介绍下,mapper标签里引入其他mybatis.xml文件主要是为了以后我们获取数据库连接对象只使用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>
    <!--引入这个数据库配置文件-->
    <properties resource="jdbc.properties"></properties>
    <!--类型别名-->
    <settings>
        <!--开启驼峰命名-->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
        <setting name="jdbcTypeForNull" value="NULL"></setting>
        <setting name="lazyLoadingEnabled" value="true"></setting>
        <setting name="aggressiveLazyLoading" value="false"></setting>
        <!--开启二级缓存-->
        <setting name="cacheEnabled" value="true"></setting>
    </settings>
    <typeAliases>
        <!--直接注册整个包,包下的所有类都生效,默认规则写类名-->
        <package name="com.hang.pojo"></package>
    </typeAliases>
    <environments default="mysqlConnect">
        <environment id="mysqlConnect">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="UNPOOLED">
                <property name="url" value="${url}"></property>
                <property name="driver" value="${driver}"></property>
                <property name="username" value="${username}"></property>
                <property name="password" value="${password}"></property>
            </dataSource>
        </environment>
    </environments>
    <!--包含GirlMapper.xml这个文件,测试时候我们只引入mybatis-config.xml这个文件使用-->
    <mappers>
        <mapper resource="mapper/GirlMapper.xml"></mapper>
    </mappers>
</configuration>

接下来我们准备测试环节

首先先新建表

注意,这里的字段名字要和girl类里的字段名字对应(前面和我一样的就不会报错的啦)

create table user
(
  account  varchar(255) not null,
  password varchar(255) null,
  id       int auto_increment
    primary key,
  constraint user_account_uindex
    unique (account)
);

insert into user values ('admin1','123456',1);

解下来在Test/com.hang.Test类下新建一个函数

    @org.junit.Test
    public void testSpringMvc(){
        String resource = "mybatis-config.xml";
        InputStream in = null;
        try {
            in = Resources.getResourceAsStream(resource);
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
            SqlSession sqlSession = sqlSessionFactory.openSession();
            GirlMapper mapper = sqlSession.getMapper(GirlMapper.class);
            Girl girl = mapper.queryById(1);
            System.out.println(girl);
            sqlSession.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

输出结果为Girl{id=1, account='admin1', password='123456'} 表示成功啦(注意:我的Girl类是有toString和get,set方法的,前往别拉下了,还有无参构造器一定要有)

总结:

一定要清楚思路,我们的思维是,在mybatis-config.xml里包含其他所有的resources/mapper/下的xml文件,这写文件是sql语句,通过加载mybatis-config.xml即可使用他们。所以我们使用了代码

String resource = "mybatis-config.xml";

in = Resources.getResourceAsStream(resource);
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);

来加载他们

最后,一定不要忘记,在mapper下每多写一个XXX.xml的文件,一定要在mybatis-config.xml的

<mappers>
    <mapper resource="mapper/GirlMapper.xml"></mapper>
</mappers>

这里面再配置一个(原因是我不知道如何写让他自动扫描mapper/下的所有配置文件。只会一个个写QAQQQQQQ)


SpringMVC

好啦终于到最后了,写的我脑阔疼::>_<::

在上面的基础上我们接着配置。先上目前的目录结构图

好啦,开始动手干活啦O(∩_∩)O

现在终于要开始编写dispatcher-servlet.xml这个文件啦,这个是一个springMvc的配置文件,动手!

直接上内容:开始解释

由于我们前面web.xml配置

<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

把所有的请求都拦截下来了,所以我们要选择放行一些,比如jsp页面里包含CSS文件的连接,这些静态资源要放行

所以。。。。   注意,他们要同时出现。

<!--屏蔽静态资源文件的扫描,防止静态资源被SpringMvc解析-->
    <mvc:default-servlet-handler/>
    <!-- 添加注解驱动 -->
    <mvc:annotation-driven/>

表示去/WEB-INF/views/目录下找.jsp后缀的文件。主要是给后面controller层跳转页面使用。后面会再提这里的QAQ

<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>

<?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
       http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    <!--这是一个SpringMvc的文件-->
    <!--屏蔽静态资源文件的扫描,防止静态资源被SpringMvc解析-->
    <mvc:default-servlet-handler/>
    <!-- 添加注解驱动 -->
    <mvc:annotation-driven/>
    <!--扫描/WEB-INF/views/下的jsp文件,配置视图解析器-->
    <bean id="defaultViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
        <property name="prefix" value="/WEB-INF/views/"/><!--设置JSP文件的目录位置-->
        <property name="suffix" value=".jsp"/><!--选择.jsp后缀的文件-->
        <property name="exposeContextBeansAsAttributes" value="true"/>
    </bean>
    <!-- 自动扫描装配,扫描controller下的包,扫描后即可提供注解 -->
    <context:component-scan base-package="com.hang.controller"/>
    <!--验证器-
    <mvc:annotation-driven validator="validtor">
        <mvc:message-converters>
            <bean class="org.springframework.http.converter.StringHttpMessageConverter"/>
            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
        </mvc:message-converters>
    </mvc:annotation-driven>-->
    <!--避免IE执行AJAX时,返回JSON出现下载文件 -->
    <bean id="mappingJacksonHttpMessageConverter"
          class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
        <property name="supportedMediaTypes">
            <list>
                <value>text/html;charset=UTF-8</value>
            </list>
        </property>
    </bean>
    <!-- 文件上传配置 -->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!-- 默认编码 -->
        <property name="defaultEncoding" value="UTF-8"/>
        <!-- 上传文件大小限制为31M,31*1024*1024 -->
        <property name="maxUploadSize" value="32505856"/>
        <!-- 内存中的最大值 -->
        <property name="maxInMemorySize" value="4096"/>
    </bean>

</beans>

这里突然发现项目忘记建立静态资源文件夹了,没事补上

在webapp下新建文件夹static,下面再建3个文件夹js.css.images

目录结构图如下

接下来我们要让web项目找到这个dispatcher-servlet.xml配置文件

在web.xml的servlet里添加

<init-param>
            <!--配置dispatcher-servlet.xml作为mvc的配置文件-->
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:dispatcher-servlet.xml</param-value>
 </init-param>

所以现在的web.xml的配置文件如下

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<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">
  <display-name>Archetype Created Web Application</display-name>
    <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>
    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <!--配置dispatcher-servlet.xml作为mvc的配置文件-->
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:dispatcher-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

接下来准备测试啦

在com.hang.controller里新建一个java类A,内容如下

@Controller
public class A  {
    @RequestMapping("/a")
    public String testMvc(){
        System.out.println("跳转success.jsp");
        return "success";
    }
}

看到return success语句了没??他的意思是要去找一个success的页面,去哪里找呢???

还记得我们前面配置的吗

<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>

就是去views的文件找一个后缀为.jsp的页面

所以我们去views下新建一个页面,名字为success.jsp(严格按照名字办事,不可以另外取一个和retrun “success”中的success名字不同的)

<%--
  Created by IntelliJ IDEA.
  User: 29632
  Date: 2018/12/31
  Time: 16:19
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
成功啦
</body>
</html>

 

准备工作就绪

好了现在要部署tomcat了。

OK后启动就好啦,自动就进入首页了

我们接下来就地址栏后面加上一个a,结果如下

好啦,到目前为止,三打框架都已经配置完成,就差整合了


最后的整合SSM

重头戏来了,欸写的我累死了QAQ,心塞塞

新建一个文件在resources下spring-mybatis.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: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
       http://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/tx
       http://www.springframework.org/schema/tx/spring-tx.xsd">
    <!--这是spring和mybatis的整合文件-->

    <!--开启注解扫描,扫描所有的com包下的所有包-->
    <context:component-scan base-package="com"/>
    <!--导入spring文件夹下的所有spring-*.xml的文件-->
    <import resource="classpath:spring/spring-*.xml"/>
    <!--导入mapper文件夹下的所有*.xml的文件-->
    <!--<import resource="classpath:mapper/GirlMapper.xml"/>-->
    <!--导入数据库配置文件,这里不可以使用这种方式-->
    <!--<context:property-placeholder location="classpath:jdbc.properties"/>-->
    <!--导入数据库配置文件-->
    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location" value="classpath:jdbc.properties"/>
    </bean>
    <!-- 数据库连接池c3p0 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close" >
        <property name="driverClass" value="${driver}"/>
        <property name="jdbcUrl" value="${url}"/>
        <property name="user" value="${username}"/>
        <property name="password" value="${password}"/>
        <property name="maxPoolSize" value="${c3p0.maxPoolSize}"/>
        <property name="minPoolSize" value="${c3p0.minPoolSize}"/>
        <property name="autoCommitOnClose" value="${c3p0.autoCommitOnClose}"/>
        <property name="checkoutTimeout" value="${c3p0.checkoutTimeout}"/>
        <property name="acquireRetryAttempts" value="${c3p0.acquireRetryAttempts}"/>
    </bean>
    <!-- 配置SqlSessionFactory对象 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 注入数据库连接池 -->
        <property name="dataSource" ref="dataSource"/>
        <!-- 扫描model包 使用别名 -->
        <property name="typeAliasesPackage" value="com.hang.pojo"/>
        <!-- 扫描sql配置文件:mapper需要的xml文件 -->
        <property name="mapperLocations" value="classpath:mapper/*.xml"/>
    </bean>
    <!--&lt;!&ndash; 配置扫描Dao接口包,动态实现Dao接口,注入到spring容器中 &ndash;&gt;-->
    <!--<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">-->
        <!--&lt;!&ndash; 注入sqlSessionFactory &ndash;&gt;-->
        <!--<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>-->
        <!--&lt;!&ndash; 给出需要扫描Dao接口包 &ndash;&gt;-->
        <!--<property name="basePackage" value="com.hang.dao"/>-->
    <!--</bean>-->

    <!-- 配置扫描mapper接口包,动态实现mapper接口,注入到spring容器中 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!-- 注入sqlSessionFactory -->
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
        <!-- 给出需要扫描mapper接口包 -->
        <property name="basePackage" value="com.hang.mapper"/>
    </bean>
    <!-- 配置事务管理器 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <!-- 注入数据库连接池 -->
        <property name="dataSource" ref="dataSource"/>
    </bean>
    <!-- 配置基于注解的声明式事务 -->
    <tx:annotation-driven transaction-manager="transactionManager"/>

</beans>

然后我们要加载这个配置文件.

在web.xml里修改内容,把applicationContext的配置换成我们现在Spring-Mybatis.xml的整合文件

 


    <context-param>
        <param-name>contextConfigLocation</param-name>
        <!--这里本来填applicationContext.xml的-->
        <param-value>classpath:spring-mybatis.xml</param-value>
    </context-param>

最后最后附上结果

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<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">
  <display-name>Archetype Created Web Application</display-name>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring-mybatis.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <!--配置dispatcher-servlet.xml作为mvc的配置文件-->
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:dispatcher-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

spring提供了一个编码的过滤器,我们把它添加上,也是添加在web.xml里

最后web.xml的内容如下

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<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">
  <display-name>Archetype Created Web Application</display-name>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring-mybatis.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <!--配置dispatcher-servlet.xml作为mvc的配置文件-->
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:dispatcher-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>forceRequestEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
        <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>
</web-app>

现在就全部整合完成啦,开心,准备测试

在service包下新建一个GirlService接口,内容如下

@Controller
public class GirlController {
    @Autowired
    private GirlService girlService;

    @RequestMapping("/queryGirl")
    public String  queryGirl(Model model) throws Exception{
        Girl girl = girlService.selectGirl();
        model.addAttribute("girl",girl);
        return "success";
    }
}

在serviceImpl包下新建一个GirlServiceImp类,内容如下

@Service
class GirlServiceImp implements GirlService {
    @Autowired
    private GirlMapper girlMapper;

    @Override
    public Girl selectGirl() throws Exception {
        return girlMapper.queryById(1);
    }
}

在controller包新建一个GirlController类,内容如下

@Controller
public class GirlController {
    @Autowired
    private GirlService girlService;

    @RequestMapping("/queryGirl")
    public String  queryGirl(Model model) throws Exception{
        Girl girl = girlService.selectGirl();
        model.addAttribute("girl",girl);
        return "success";
    }
}

在utils包下新建一个类,主要功能是为了方便写项目的路径(通过RootPath即可获取)

@WebServlet(urlPatterns = {},loadOnStartup = 2)
public class WebPathInitServlet extends HttpServlet {
    @Override
    public void init(ServletConfig config) throws ServletException {
        config.getServletContext().setAttribute("RootPath",config.getServletContext().getContextPath());
        super.init(config);
    }
}

来看看现在的项目结构图

最后修改index.jsp里的内容

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>测试SpringMvc</title>
</head>
<body>
<a href="${RootPath}/queryGirl">测试SSM</a>
</body>
</html>

修改success.jsp的内容

<%@ page import="com.hang.pojo.Girl" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    Girl girl = (Girl) request.getAttribute("girl");
%>
<html>
<head>
    <title>测试成功</title>
</head>
<body>
success
<%=girl%>
</body>
</html>

开启tomcat,点击测试SSM

至此,全部结束,草草的写完了,写了6个小时,实在不想写了,要是看的人多,需要的多的话,我就继续修改的更加完整点。

最后附上项目,一个是配置好的c3p0的SSM,一个是配置好的druid 的SSM

累了,午饭都没吃,饿死了QAQQQQQQQ,╯︿╰

Log4j的下次再加,写不动了,下次接着写

 

  • 8
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值