zoukankan      html  css  js  c++  java
  • IDEA(一) 使用IDEA搭建SSM框架项目

    1. 新建项目

    IDEA中新建Maven项目,使用Maven Archetype原型:maven-archetype-webapp

    新建项目结构为:

    image-20200403062942661

    2. 新建包目录

    • 新建Java代码目录:src.main.java

      src.main.java下新建分层模型package,带上项目的groupId(仅供参考)

      • common:存放全局变量,公共枚举等

      • base:存放基础组件,如工具类,过滤器,配置类等

      • controller:控制层

      • vo:前端传输过来的对象,如封装的请求

      • bo:业务对象,可能是多个dto/entity的整合

      • service:业务层

        • intf:接口

        • impl:实现

      • dao:数据库访问层

        • intf:接口(MyBatis中为xxxMapper.java)
        • impl:实现(MyBatis中自动生成实现类)
      • dto:数据传输对象,存放多表联合对象

      • entity:实体,对应数据库表

    • 新建资源目录:src.main.resources

    3. 按需引入pom

    新建工程后,不建议一次性引入所有的依赖,而是在需要的时候逐步引入,这样虽然会踩很多坑,但是可以熟悉每个依赖的作用,防止以后踩更大的坑。

    新建工程后,第一次需要引入的依赖有:

    • Servlet API

      Java Web的应用服务器会带有Servlet API,所以这个依赖的scope设成provided

      <dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>javax.servlet-api</artifactId>
          <version>${servlet.version}</version>
          <scope>provided</scope>
      </dependency>
      
    • Spring Web Mvc

      Spring Web依赖,包括Spring MVC,IDEA会把Spring Web Mvc所依赖的其他Spring模块也引入,有:aop、beans、context、core、expression、web,其余的模块不用引,但是为了扩展性,还是引入比较好。

      <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-webmvc</artifactId>
          <version>${spring.version}</version>
      </dependency>
      

    4. 配置web.xml

    4.1 配置ContextLoaderListener

    ContextLoaderListener是ServletContext监听器,用于创建容器对象,并且将ApplicationContext对象放到Application域中,并指定spring核心配置文件。

    关于ContextLoaderListener的具体作用及源码,会另写文章分析。

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring.xml</param-value>
    </context-param>
    
    4.2 配置DispatcherServlet

    DispatcherServlet是前端控制器,配置中指定Spring MVC的配置文件。

    关于DispatcherServlet的具体作用及源码,会另写文章分析。

    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring-mvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    
    4.3 处理中文乱码问题

    配置CharacterEncodingFilter过滤器处理中文乱码问题,要放到所有过滤器之前。

    <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>
    
    4.4 整合Restful风格请求

    配置HiddenHttpMethodFilter过滤器,将get/post请求转换为标准的http方法,使得支持GET、POST、PUT与DELETE请求。

    <filter>
        <filter-name>HiddenHttpMethodFilter</filter-name>
        <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>HiddenHttpMethodFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    

    5. 配置Spring配置文件

    Spring配置文件路径是配置在web.xml ContextLoaderListener中。

    初始的Spring配置文件需要配置包扫描,将满足条件的Java Bean注入到Spring容器中,由Spring进行管理。

    <!--  设置包扫描,不扫描Controller  -->
    <context:component-scan base-package="com.lyldelove">
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>
    

    6. 配置Spring MVC配置文件

    Spring MVC配置文件路径是配置在web.xml DispatcherServlet中。

    初始的Spring MVC配置文件需要配置以下3项:

    • 包扫描。扫描所有Controller
    • 开启基于注解驱动的mvc。开启后可使用Spring MVC的高级功能
    • 配置默认的静态资源处理器
    • 配置视图解析器
    <!--  设置包扫描,扫描所有的Controller  -->
    <context:component-scan base-package="com.lyldelove" use-default-filters="false">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>
    
    <!--  开启基于注解驱动的mvc,开启后可使用Spring MVC的高级功能  -->
    <mvc:annotation-driven/>
    
    <!--  配置默认的静态资源处理器  -->
    <mvc:default-servlet-handler/>
    
    <!--  配置视图解析器  -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--配置解析前后缀-->
        <property name="prefix" value="/WEB-INF/views/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
    

    静态资源的处理,还可以通过<mvc:resources />来解析配置

    7. 引入前端JS/CSS

    前端所需的js/css等静态文件,一般放在webapp目录下

    8. 日志框架整合

    在整合其他框架的过程中,项目可能会有很多异常/报错,我们需要通过日志来查找问题。

    日志框架需要日志门面及日志实现,我们采用slf4j做日志门面,log4j做日志实现,看如何整合。

    引入依赖:

    <!--  日志,slf4j做日志门面,log4j做日志实现  -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>${slf4j.version}</version>
    </dependency>
    

    引入slf4j-log4j12后,IDEA会自动引入slf4j-api和log4j的依赖,不需要再显示引入

    log4j会自动扫描src/main/resources目录下的log4j.xmllog4j.properties,我们把配置文件放在此目录下。

    #log4j.properties
    
    #日志输出级别
    log4j.rootLogger=debug,stdout,D,E
    
    #设置stdout的日志输出控制台
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    #输出日志到控制台的方式,默认为System.out
    log4j.appender.stdout.Target = System.out
    #设置使用灵活布局
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    #灵活定义输出格式
    log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} -[%p]  method:[%c (%rms)] - %m%n
    

    9. 数据源整合

    以Druid为例,需要引入Spring JDBCDruid的依赖,同时数据库连接信息最好单独出一个配置文件来管理,再在Spring配置文件中引入外部的配置文件。

    依赖:

    <!--  Spring jdbc  -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>${spring.version}</version>
    </dependency>
    
    <!--  数据源Druid  -->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>${druid.version}</version>
    </dependency>
    

    注意:要记得引入Spring jdbc的依赖,否则后面出问题会很难找(有日志还好找一点,所以最好日志框架的整合放到最前面)。

    Spring配置:

    <!--  加载外部配置文件  -->
    <context:property-placeholder location="classpath:jdbc.properties"/>
    
    <!--  配置Druid数据源  -->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.user}"/>
        <property name="password" value="${jdbc.password}"/>
    
        <!--  指定连接池中最大的活跃连接数  -->
        <property name="maxActive" value="20"/>
        <!--  指定启动连接池时,初始建立的连接数量  -->
        <property name="initialSize" value="1"/>
        <!--  指定连接池等待连接返回的最大等待时间,毫秒单位.  -->
        <property name="maxWait" value="60000"/>
        <!--  指定必须保持连接的最小值(For DBCP and Tomcat connection pools)  -->
        <property name="minIdle" value="1"/>
    </bean>
    

    10. MyBatis + MySql整合

    依赖:

    <!--  Spring jdbc  -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>${spring.version}</version>
    </dependency>
    
    <!--  MyBatis  -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>${mybatis.version}</version>
    </dependency>
    
    <!--  MyBatis整合spring  -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis-spring</artifactId>
        <version>${mybatis.spring.version}</version>
    </dependency>
    
    <!--  MySQL驱动  -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>${mysql.version}</version>
    </dependency>
    

    Spring配置文件中配置MyBatis:

    需要配置下面2项:

    • 配置sqlSessionFactory
    • 配置映射扫描器
    <!--  配置MyBatis sqlSessionFactory  -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <!--  指定MyBatis 的 XML 配置文件路径  -->
        <property name="configLocation" value="classpath:mybatis.xml"/>
        <!--  指定映射器 XML 文件路径  -->
        <property name="mapperLocations" value="classpath:mapper/**/*.xml"/>
    </bean>
    
    <!--  扫描MyBatis映射器  -->
    <bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.lyldelove.dao"/>
    </bean>
    

    MyBatis配置文件:

    在Spring配置文件sqlSessionFactory配置项中配置了MyBatis的配置文件,MyBatis的配置文件中,需要配置骆驼命名法则,还可以配置别名。

    <settings>
        <!--  其余骆驼命名法则,是的数据库字段可以对应JavaBean属性  -->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
    
    <!--  起别名,这样在Mapper.xml文件中,resultType就可以简写,默认规则是JavaBean类名首字母小写  -->
    <typeAliases>
        <package name="com.lyldelove.entity.system"/>
    </typeAliases>
    

    11. 需要深入挖掘的点

    • ContextLoaderListener作用及源码分析
    • DispatcherServlet作用及源码分析
    • Filter过滤器工作原理
    • Spring/Spring MVC配置文件解析及相关配置项的作用和源码分析
    • 日志框架深入,配置项
    • 日志框架是如何整合进来的,实现原理
    • 什么是数据源
  • 相关阅读:
    【Java EE 学习 21 上】【其它类型的监听器】【使用HttpSessionActivationListener监听session的活化和钝化】
    【Java EE 学习 20】【使用过滤器实现登陆验证、权限认证】【观察者模式和监听器(使用监听器实现统计在线IP、登录IP 、踢人功能)】
    【Java EE 学习 19】【使用过滤器实现全站压缩】【使用ThreadLocal模式解决跨DAO事务回滚问题】
    【stut 逆置正整数】
    【JAVA使用XPath、DOM4J解析XML文件,实现对XML文件的CRUD操作】
    【JAVA与DOM4J实现对XML文档的CRUD操作】
    【JAVA解析XML文件实现CRUD操作】
    【JAVA与XML、dtd约束、Schema约束】
    【JAVA正则表达式综合练习】
    【JAVA正则表达式】
  • 原文地址:https://www.cnblogs.com/lyldelove/p/12624256.html
Copyright © 2011-2022 走看看