IDEA Maven-SSM项目搭建 详细步奏

一、个人编写步奏,容易上手。分享一下,觉得实用的话可以收藏

1.创建maven项目选择模板 webapp项目

2.创建好后导入jar包

3.只创建java、resources包(webapp包已经含有)

4.然后在resources包下创建applicationContent.xml

按照我给的applicationContext.xml文件的步奏写下去

需要什么去补什么

例如:

  4.1  需要配置文件 然后去创建文件

   <!--    1.1 引入配置文件-->
      <context:property-placeholder location="classpath:jdbc.properties"/>

  4.2  需要 com.yangyu.entity 包则去创建包 

    需要 mybatis-config.xml 则去创建

    需要 classpath:mapper/**.xml 则去创建mapper包和 **.xml文件   classpath指的是resources的路径

  <!--    1.3 sqlSessionFactory-->
      <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
          <!--        1.3.1 注入数据源-->
          <property name="dataSource" ref="dataSource"/>
          <!--        1.3.2 配置类别名 mapper.xml文件 不必写实体类全路径-->
          <property name="typeAliasesPackage" value="com.yangyu.entity"/>
          <!--        1.3.3 引入mybatis-config.xml 配置文件-->
          <property name="configLocation" value="classpath:mybatis-config.xml"/>
          <!--        1.3.3 注入mapper.xml文件-->
          <property name="mapperLocations" value="classpath:mapper/**.xml"/>
      </bean>  
  4.3 等等等等......
  4.4 是不是觉得很简单 只需要记住applicationContext.xml的配置步奏 就差不多把这个项目搭建完了

5.配置web.xml
6.需要什么补齐什么,就差不多完了

二、实现

1.jar包导入    配置pom.xml

    <properties>
        <!--        控制spring的版本-->
        <spring.version>5.1.8.RELEASE</spring.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
<!-- Spring -->
        <!-- 1)包含Spring 框架基本的核心工具类。Spring 其它组件要都要使用到这个包里的类,是其它组件的基本核心 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!-- 2)这个jar 文件是所有应用都要用到的,它包含访问配置文件、创建和管理bean 以及进行Inversion of Control
                / Dependency Injection(IoC/DI)操作相关的所有类。如果应用只需基本的IoC/DI 支持,引入spring-core.jar
                及spring-beans.jar 文件就可以了。 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!-- 3)这个jar 文件为Spring 核心提供了大量扩展。可以找到使用Spring ApplicationContext特性时所需的全部类,JDNI
            所需的全部类,instrumentation组件以及校验Validation 方面的相关类。 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!-- 4) 这个jar 文件包含对Spring 对JDBC 数据访问进行封装的所有类。 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!-- 5) 为JDBC、Hibernate、JDO、JPA等提供的一致的声明式和编程式事务管理。 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!-- 6)Spring web 包含Web应用开发时,用到Spring框架时所需的核心类,包括自动载入WebApplicationContext特性的类、Struts与JSF集成类、文件上传的支持类、Filter类和大量工具辅助类。 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!-- 7)包含SpringMVC框架相关的所有类。 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!-- 8)Spring test 对JUNIT等测试框架的简单封装 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring.version}</version>
            <scope>test</scope>
        </dependency>

<!-- DAO: MyBatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.1</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>2.0.1</version>
        </dependency>

        <!-- Mysql 数据库 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
        </dependency>

        <!-- jdbc连接池 -->
        <dependency>
            <groupId>com.mchange</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.5.4</version>
        </dependency>

        <!--servlet-api  使用HttpServletRequest等对象-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
        </dependency>

        <!--jstl-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>

        <!-- json解析 -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.9</version>
        </dependency>

        <!-- 文件上传 -->
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.2</version>
        </dependency>

        <!-- 日志文件 -->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.3</version>
        </dependency>
    </dependencies>

2.创建相对应的目录

2.1 在src/main下主要有以下几个文件夹

2.1.1 java用来存放java代码

2.1.2 resources 用来存放配置文件 

2.1.3 webapp 用来存放jsp/html页面 和 静态文件(也可以放在resources下,路径配置不同,个人习惯放在webapp下),

  里面还有个很重要的文件web.xml 项目启动就会运行该文件,在里面配置applicationContext.xml才可以在项目启动的时候加载

2.2   java  存放java代码

2.2.1 com.yangyu.entity  存放实体类 也就是和数据库字段对应的类 用于操作数据库

2.2.2 com.yangyu.dao 存放dao接口 放置操作数据库的方法 在mapper.xml中实现(后面有讲解)

2.2.3 com.yangyu.service 存放service接口 主要用来做一些事务处理

2.2.4 com.yangyu.service.impl  自然是实现service的方法啦

2.2.5 com.yangyu.controller  http请求处理,访问网站会进入这里

2.2.6 com.yangyu.interceptors 用来处理拦截器拦截后的操作

包名:

 

entity:存放实体类 也就是和数据库字段对应的类 javaBean

dao: 

@Repository 持久层组件,用于标注数据访问组件,即DAO组件

service: 存放service接口 主要用来做一些事务处理(简单配置不做事务,操作数据才做事务处理)

service.impl

@Service 标识该层为业务逻辑层

controller: 

@Controller 标记该类是一个SpringMvc Controller对象

@RequestMapping注解的方法是处理请求的处理器。 可以简单的理解为是访问地址的配置

interceptors : 

extends HandlerInterceptorAdapter 拦截器需要基础的类
preHandle() 方法是进行处理器拦截用的,顾名思义,该方法将在Controller处理之前进行调用。
简单实现一下,相关的还有postHandle afterCompletion,有意的可以去找度娘

2.3  resources 用来存放配置文件 

2.3.1 mapper包:存放mapper.xml文件 操作数据库

2.3.2 applicationContext.xml:配置全局属性,项目启动时就需去加载

2.3.3 jdbc.properties: 存放连接数据库的属性

2.3.4 logback.xml: 日志文件(随便配置一下,需要详细说明的话,评论区留言,内容有点多)

2.3.5 mybatis-config.xml:mybatis全局属性配置(有需要就配啦,看情况来)

mapper.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.yangyu.dao.UserMapper">
<!--由于在applicationContext.xml中配置了typeAliasesPackage 所以 resultType不需要写全路径-->
  <select id="queryUserAll" resultType="User"> select * from user </select> 
</mapper>

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-4.2.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx-4.2.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    <!--    DAO-->
    <!--    1.1 引入配置文件-->
    <context:property-placeholder location="classpath:jdbc.properties"/>
    <!--    1.2 配置datasource-->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <!--        1.2.1 配置数据库连接属性-->
        <property name="driverClass" value="${jdbc_driver}"/>
        <property name="jdbcUrl" value="${jdbc_url}"/>
        <property name="user" value="${jdbc_user}"/>
        <property name="password" value="${jdbc_password}"/>
        <!--        1.2.2 配置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="5"/>
        <!-- 每30秒检查一次空闲连接,加快释放连接。-->
        <property name="idleConnectionTestPeriod" value="30"/>

    </bean>
    <!--    1.3 sqlSessionFactory-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--        1.3.1 注入数据源-->
        <property name="dataSource" ref="dataSource"/>
        <!--        1.3.2 配置类别名 mapper.xml文件 不必写实体类全路径-->
        <property name="typeAliasesPackage" value="com.yangyu.entity"/>
        <!--        1.3.3 引入mybatis-config.xml 配置文件-->
        <property name="configLocation" value="classpath:mybatis-config.xml"/>
        <!--        1.3.3 注入mapper.xml文件-->
        <property name="mapperLocations" value="classpath:mapper/**.xml"/>
    </bean>
    <!--    1.4 配置Dao接口和mapper.xml的关系-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!--        1.4.1指定Dao接口-->
        <property name="basePackage" value="com.yangyu.dao"/>
        <!--        1.4.2注入sqlSessionFactory-->
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
    </bean>

    <!--    Service-->
    <!--    2.1 注解扫描-->
    <context:component-scan base-package="com.yangyu.service"/>
    <!--    2.2 事务管理-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>
    <!--    2.3 注解式事务管理-->
    <tx:annotation-driven transaction-manager="transactionManager"/>


    <!--    Controller-->
    <!--    3.1 注解扫描-->
    <context:component-scan base-package="com.yangyu.controller"/>
    <!--    3.2 静态资源引入-->
    <mvc:resources mapping="/statics/**" location="/statics/"/>
    <!--    3.3 自动装载-->
    <mvc:annotation-driven/>
    <mvc:default-servlet-handler/>
    <!--    3.4 视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
    <!--    3.5 文件上传管理器-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="defaultEncoding" value="utf-8"></property>
        <!-- 1024 * 1024 * 20 = 20M -->
        <property name="maxUploadSize" value="20971520"></property>
        <property name="maxInMemorySize" value="20971520"></property>
    </bean>
    <!--    3.6 拦截器(不做这方面的讲解)-->
    <mvc:interceptors>
        <mvc:interceptor>
            <!--            3.6.1拦截的路径-->
            <mvc:mapping path="/user/**"/>
            <!--            3.6.2不需要拦截的内容,直接通过 个人随意写的,让你们了解一下-->
            <mvc:exclude-mapping path="/user/asd" />
            <!--            3.6.3拦截后给什么类去处理  class:类的全路径-->
            <bean class="com.yangyu.interceptors.UserInterceptors"/>
        </mvc:interceptor>
    </mvc:interceptors>

</beans>

jdbc.properties

jdbc_driver=com.mysql.jdbc.Driver
jdbc_url=jdbc:mysql://127.0.0.1:3306/demo
jdbc_user=root
jdbc_password=root

 logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
    <!-- 定义参数常量 -->
    <!-- TRACE<DEBUG<INFO<WARN<ERROR -->
    <!-- logger.trace("msg") logger.debug... -->
    <property name="log.level" value="debug" />
    <property name="log.maxHistory" value="30" />
  <!-- 日志存放位置--> <property name="log.filePath" value="D:/logs/"/> <property name="log.pattern" value="%d{MM-dd-yyyy HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n" /> <!-- 控制台输出日志格式 --> <appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>${log.pattern}</pattern> </encoder> </appender> <!-- DEBUG --> <appender name="debugAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 文件路径 --> <file>${log.filePath}/debug.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 文件名称 --> <fileNamePattern>${log.filePath}/debug/debug.%d{yyyy-MM-dd}.log.gz </fileNamePattern> <!-- 文件最大保存历史数量 --> <maxHistory>${log.maxHistory}</maxHistory> </rollingPolicy> <encoder> <pattern>${log.pattern}</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>DEBUG</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!-- INFO --> <appender name="infoAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 文件路径 --> <file>${log.filePath}/info.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 文件名称 --> <fileNamePattern>${log.filePath}/info/info.%d{yyyy-MM-dd}.log.gz </fileNamePattern> <!-- 文件最大保存历史数量 --> <maxHistory>${log.maxHistory}</maxHistory> </rollingPolicy> <encoder> <pattern>${log.pattern}</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>INFO</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!-- ERROR --> <appender name="errorAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 文件路径 --> <file>${log.filePath}/erorr.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 文件名称 --> <fileNamePattern>${log.filePath}/error/error.%d{yyyy-MM-dd}.log.gz </fileNamePattern> <!-- 文件最大保存历史数量 --> <maxHistory>${log.maxHistory}</maxHistory> </rollingPolicy> <encoder> <pattern>${log.pattern}</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <logger name="com.yangyu.o2o" level="${log.level}" additivity="true"> <appender-ref ref="debugAppender"/> <appender-ref ref="infoAppender"/> <appender-ref ref="errorAppender"/> </logger> <root level="info"> <appender-ref ref="consoleAppender"/> </root> </configuration>

 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>
    <settings>
        <!--        获取自增主键 当进行数据插入时可以通过在mapper.xml的insert方法中设置 
            useGeneratedKeys="true",在数据插入成功,传入的对象会自动获取自增ID值--> <setting name="useGeneratedKeys" value="true"/> <!-- 驼峰命名 列 数据库字段user_id 对应 实体类属性userId--> <setting name="mapUnderscoreToCamelCase" value="true"/> <!-- 列标签替换别名--> <setting name="useColumnLabel" value="true"/> </settings> </configuration>

2.3 webapp  放静态文件

2.3.1 statics 下存放的就是一些css/js文件啦

2.3.2 WEB-INF 存放页面啦 由于放置在WEB-INF里不能直接访问 所以要配置视图解析(applicationContext.xml 已经配置)

web.xml

可以用来配置字符编码过滤器

也可以用来配置Kaptcha图片验证码(在网上找到不合心就可以用这个哦,自己配置属性,这里不做介绍  ๑乛◡乛๑)

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
         http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

    <display-name>Archetype Created Web Application</display-name>

    <!--  字符编码过滤器-->
    <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>
 
  <!-- 拦截匹配的请求,Servlet拦截匹配规则要自己定义(“/”代表所有请求),把拦截下来的请求分发到目标Controller(需要把applicationContext.xml配置进来否则没有效果) -->
  <servlet>
   <servlet-name>DispatcherServlet</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>
  </servlet>
  <servlet-mapping>
   <servlet-name>DispatcherServlet</servlet-name>
   <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

userdata.jsp

使用EL表达式 需要配置page指令(也可以在web.xml中配置全局的就不用每个jsp文件都配置一遍啦)
  isELIgnored="false"
使用标签库需要配置 taglib指令
  prefix声明前缀(可以任意声明) 通过该声明去调用标签库
  
uri 指定要引入的标签库
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<table>
    <rt>
        <td>姓名</td>
        <td>年龄</td>
        <td>性别</td>
    </rt>
    <c:forEach items="${userList}" var="user">
        <tr>
            <rd>${user.name}</rd>
            <rd>${user.age}</rd>
            <rd>${user.sex}</rd>
        </tr>
    </c:forEach>
</table>
</body>
</html>

使用的是mysql

最后配置tomcat 就可以启动项目了

结果如下:

1.先被拦截才访问的controller

  (洋洋 花花 海洋 的输出是在UserController中定义的 )

2.游览器展示效果

猜你喜欢

转载自www.cnblogs.com/yangyufu/p/maven-ssm.html