超详细的用IDEA整合SSM框架和profile 配置环境

      SSM作为现在最流行的开发框架,很大的提升了开发效率。一些同学在SSM基础上的整合一些更实用的开发基础框架,被用来作为快速开发的基础框架。本次实践主要是以下3个目标:

  1. 从最基础的SSM框架做起,摸索和处理SSM框架整合中可能会遇到的问题
  2. 使用IDEA和MAVEN进行整合
  3. 通过profile进行环境的配置管理

整合之前,需要对IDEA环境下,maven工程的各种目录有个初步了解,要不然过程中出现各种异常不知如何去找和应对很是头痛,特奉上干货,maven执行命令后对应target目录情况,此外:log.properties 读取时,系统是在项目根目录,不是classpath目录,这点不注意无法处理错误日志,具体见后续贴的配置文件。

超详细的用IDEA整合SSM框架和profile 配置环境_第1张图片

     整篇内容包含如下部分:

超详细的用IDEA整合SSM框架和profile 配置环境_第2张图片

 

第一部分:整合SSM框架

1.1 创建基础的Maven 工程

超详细的用IDEA整合SSM框架和profile 配置环境_第3张图片

点next 后,输入GroupId,ArtifactId

超详细的用IDEA整合SSM框架和profile 配置环境_第4张图片

一路next

超详细的用IDEA整合SSM框架和profile 配置环境_第5张图片

点 finish后

由于默认生成的,不带java 和resources 目录,因此先在main上右键创建这两个目录,

超详细的用IDEA整合SSM框架和profile 配置环境_第6张图片

然后使用在目录上右键菜单中选择

超详细的用IDEA整合SSM框架和profile 配置环境_第7张图片

这里完成后

超详细的用IDEA整合SSM框架和profile 配置环境_第8张图片

这两个目录色彩有所变化,如上图

当前的pom.xml如下




  4.0.0

  SsmBase
  SsmBase
  1.0-SNAPSHOT
  war

  SsmBase Maven Webapp
  
  http://www.example.com

  
    UTF-8
    1.7
    1.7
    
    4.1.0.RELEASE
    
    3.2.8
    
    1.7.7
    1.2.17
  

  
    
      junit
      junit
      4.11
      test
    

    
    
      org.springframework
      spring-core
      ${spring.version}
    

    
      org.springframework
      spring-web
      ${spring.version}
    
    
      org.springframework
      spring-oxm
      ${spring.version}
    
    
      org.springframework
      spring-tx
      ${spring.version}
    

    
      org.springframework
      spring-jdbc
      ${spring.version}
    

    
      org.springframework
      spring-webmvc
      ${spring.version}
    
    
      org.springframework
      spring-aop
      ${spring.version}
    

    
      org.springframework
      spring-context-support
      ${spring.version}
    

    
      org.springframework
      spring-test
      ${spring.version}
    
    
    
      org.mybatis
      mybatis
      ${mybatis.version}
    

    
    
      org.mybatis
      mybatis-spring
      1.2.4
    

    
    
      javax
      javaee-api
      7.0
    

    
    
      mysql
      mysql-connector-java
      5.1.6
    
    
    
    
    
      org.apache.commons
      commons-dbcp2
      2.1.1
    


    
    
      jstl
      jstl
      1.2
    
    
    
    
      log4j
      log4j
      ${log4j.version}
    


    
    
      com.alibaba
      fastjson
      1.1.41
    


    
      org.slf4j
      slf4j-api
      ${slf4j.version}
    

    
      org.slf4j
      slf4j-log4j12
      ${slf4j.version}
    
    
    
    
      org.codehaus.jackson
      jackson-mapper-asl
      1.9.13
    
    
    
      com.fasterxml.jackson.core
      jackson-core
      2.7.0
    
    
      com.fasterxml.jackson.core
      jackson-databind
      2.7.0
    


    
    
      commons-fileupload
      commons-fileupload
      1.3.1
    
    
      commons-io
      commons-io
      2.4
    
    
      commons-codec
      commons-codec
      1.9
    
    
      javax.servlet
      javax.servlet-api
      3.1.0
    


  

  
    SsmBase
    
      
      
        src/main/java
        
          **/*.xml
        
      
      
      
      
        src/main/resources
        
        **/*.xml
        **/*.properties
        
      
     
    

    
      
        
          maven-clean-plugin
          3.0.0
        
        
        
          maven-resources-plugin
          3.0.2
        
        
          maven-compiler-plugin
          3.7.0
        
        
          maven-surefire-plugin
          2.20.1
        
        
          maven-war-plugin
          3.2.0
        
        
          maven-install-plugin
          2.5.2
        
        
          maven-deploy-plugin
          2.8.2
        
      
    
  

  
 

配置SpringMVC

在下一步整合之前,贴一下整合后的目录结构

超详细的用IDEA整合SSM框架和profile 配置环境_第9张图片

在resources目录下,建立Spring-mvc.xml,里面内容如下:由于spring版本的变化所以很多网上的例子不能拿来直接用,需要进行修改,以下是修改后的例子




    
    

    
    
        
        
        
    

    
    
    
    
    
    
    
    
    
    
    

    
    
        
            
                text/html;charset=UTF-8
            
        
    
    
    
        
            
                 
            
        
    

    
    
        
        
        
        
        
        
        
        
    

    
    
        
            
                
                    
                    
                
            
        
        
            
                
                
            
        
    

配置web.xml,

里面含有了spring的配置内容(没有独立的spring.xml 或者application.xml)




    Archetype Created Web Application

    
    
        contextConfigLocation
        classpath*:spring-mybatis.xml
    
    
    
    
        log4jConfigLocation
        WEB-INF/classes/log.properties
    

    

    
    
        SsmBase
        org.springframework.web.servlet.DispatcherServlet
        
            contextConfigLocation
            classpath*:spring-mvc.xml
        
        1
        true
    
    
        SsmBase
        
        /
    


    
    
        

        EncodingFilter
        org.springframework.web.filter.CharacterEncodingFilter
        true
        
            encoding
            UTF-8
        
    
    
        EncodingFilter
        /*
    



    
    
    
        org.springframework.web.context.ContextLoaderListener
    
    
     
        org.springframework.web.util.IntrospectorCleanupListener
    
    
        org.springframework.web.util.Log4jConfigListener
    



    
    
        120
    

    
        /index.jsp
    

    

 

配置spring-mybatis



    
    
    

     
    
    
        
    

    
        
        
        
        
        
        
        
        
        
        
        
        
        
        
    

    
    
    
        
        
        
        
        
        
    

    
    
        
        
        
        
    

    
    
        
    

    
    

jdbc.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/devdb?characterEncoding=utf-8
username=dev
password=dev123
#定义初始连接数
initialSize=0
#定义最大连接数
maxActive=20
#定义最大空闲
maxIdle=20
#定义最小空闲
minIdle=1
#定义最长等待时间
maxWait=60000

log4j.properties#日

#日志根目录
log4j.rootLogger=debug,Console,File

#定义日志输出目的地为控制台
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.Target=System.out
#可以灵活地指定日志输出格式,下面一行是指定具体的格式
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=[%c] - %m%n

#文件大小到达指定尺寸的时候产生一个新的文件
log4j.appender.File=org.apache.log4j.RollingFileAppender
#指定输出目录, 这里指定变量后,不随启动位置变化
log4j.appender.File.File=${catalina.home}/log/ssm.log
#定义文件最大大小
log4j.appender.File.MaxFileSize = 10MB
# 输出所以日志,如果换成DEBUG表示输出DEBUG以上级别日志
log4j.appender.File.Threshold = ALL
log4j.appender.File.layout = org.apache.log4j.PatternLayout
log4j.appender.File.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n

这些文件建好后,在src/main/java目录下建立如下的java 包

超详细的用IDEA整合SSM框架和profile 配置环境_第10张图片

controller  ---放置controller

mapper   ----放置model对象操作dao类和映射xml

model    -----放置模型

service   ---- 放接口对象

另外在src 目录下,建立几个辅助目录

db   --- 用来存放库表的创建语句

generator  ---用来存在mybatis的从库表生成对象工具

好了,这些建好后,进入下一个步骤

第二部分:创建代码

创建数据库的库表

         这里我们在src/db目录下放置我们要创建的数据库表sql,本例中具体如下:

DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_name` varchar(40) NOT NULL,
  `password` varchar(255) NOT NULL,
  `role` int(4) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `t_user` VALUES ('1', '测试', '123456', '21');
INSERT INTO `t_user` VALUES ('2', 'admin', '1qaz1qaz', '1');

用MyBatis-Generator自动创建代码

通过MyBatis生成器自动生成实体类、DAO接口和Mapping映射文件。这样可以省去很多的功夫,将生成的代码copy到项目工程中即可。    在src 下建立目录generator(这步在上面已经做过的可以略过), 这里放入mybatis generator 需要包和配置文件,见下图,可以去网上自行下载。修改xml文件中关于数据库中实体的内容

超详细的用IDEA整合SSM框架和profile 配置环境_第11张图片

在本例中的xml 按如下配置:




    
    
    
        
            
        
        
        
        

        
        
            
        

        
        
            
            

            
            

            
            

            
            

        

        
        
            
        

       
        

            
          
            
            
            

            

        


        
        

配置文件中注意一下: targetProject,targetPackage的配置与工程中的目录位置进行对应。

完成后,可以在命令行执行创建命令。IDEA提供了终端窗口,打开窗口后,进入到mybatis-genertor对应的目录,然后手工输入如下指令:

java -jar mybatis-generator-core-1.3.6.jar -configfile generatorConfig.xml –overwrite

如果xml文件配置正确的话,在src/main/java目录下对应的包中就会生成相应的文件

自动生成的model

超详细的用IDEA整合SSM框架和profile 配置环境_第12张图片

代码都是自动生成的,没有改动

自动生成的mapper

这里有mybatis的xml映射文件,可以就放这里,但是在pom.xml需要注意build节点下的resources如何配置

编写service和service实现

接口类UserServiceInf如下:

package com.study.service;

import com.study.model.User;
public interface UserServiceInf {
    public User getUserById(int userId);
}

接口实现类UserServiceImpl如下:

package com.study.service;

import javax.annotation.Resource;
import com.study.mapper.UserMapper;
import com.study.model.User;
import org.springframework.stereotype.Service;

@Service("userService")
public class UserServiceImpl implements UserServiceInf {
    @Resource
    private UserMapper userDao;

    public User getUserById(int userId) {
        // TODO Auto-generated method stub
        return this.userDao.selectByPrimaryKey(userId);
    }

}

建立UserController

package com.study.controller;

import com.study.model.User;
import com.study.service.UserServiceInf;
import org.apache.commons.io.FileUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.Map;


@Controller
@ResponseBody
@RequestMapping("/user")
public class UserController2 {
    private static Logger log=LoggerFactory.getLogger(UserController2.class);
    @Resource
    private UserServiceInf userService;

    // /user/{id}
    @RequestMapping(value="/{id}",method=RequestMethod.GET)
    public @ResponseBody User getUserInJson(@PathVariable String id,Map model){
        int userId = Integer.parseInt(id);
        System.out.println("userId:"+userId);
        User user = this.userService.getUserById(userId);
        log.info(user.toString());
        return user;
    }

    // /user/{id}
    @RequestMapping(value="/jsontype/{id}",method=RequestMethod.GET)
    @ResponseBody
    public ResponseEntity  getUserInJson2(@PathVariable String id,Map model){
        int userId = Integer.parseInt(id);
        System.out.println("userId:"+userId);
        User user = this.userService.getUserById(userId);
        log.info(user.toString());
        return new ResponseEntity(user,HttpStatus.OK);
    }

    //文件上传、
    @RequestMapping(value="/upload")
    public String showUploadPage(){
        return "user_admin/file";
    }

    @RequestMapping(value="/doUpload",method=RequestMethod.POST)
    public String doUploadFile(@RequestParam("file")MultipartFile file) throws IOException{
        if (!file.isEmpty()) {
            log.info("Process file:{}",file.getOriginalFilename());
        }
        FileUtils.copyInputStreamToFile(file.getInputStream(), new File("E:\\",System.currentTimeMillis()+file.getOriginalFilename()));
        return "succes";
    }
}

编写Jsp

在webapp/WEB-INF/下建立jsp目录,在这个目录下可以存放jsp代码

超详细的用IDEA整合SSM框架和profile 配置环境_第13张图片

在WEB-INF下index.jsp是本应用的欢迎页面,目前只是打印一个简单的hello world



Hello World!

第三部分:调试

检查环境

在调试之前,首先检查配置情况,包括如下方面:

检查Settings中关于maven的jdk设置

检查project 或者 module中jdk设置和artifacts设置

超详细的用IDEA整合SSM框架和profile 配置环境_第14张图片

在run菜单下,检查

超详细的用IDEA整合SSM框架和profile 配置环境_第15张图片

在这里面主要是检查tomcat的jdk和部署内容,还有url根设置

超详细的用IDEA整合SSM框架和profile 配置环境_第16张图片

运行maven

通过maven project面板运行maven命令:

  1. maven clean 是用来将当期编译生产的target目录清除
  2. compile 用来编译代码,生产target目录和classes目录
  3. resources用来将src下的资源和配置文件,存入到target目录
  4. war.exploded 调试代码的时候,用这个方式来打包,会将target目录下生成的内容打包到target下的项目目录下,用来和tomcat一起进行联调
  5. war.war  调试完毕,用来生产发布包

第4步完成后,target项目目录下情况如图:

超详细的用IDEA整合SSM框架和profile 配置环境_第17张图片

红框内的内容会发布到tomcat

IDEA下运行tomcat

上述操作都正常的情况下,运行tomcat进行调测,在IDEA环境里面右上角,如图:

超详细的用IDEA整合SSM框架和profile 配置环境_第18张图片

超详细的用IDEA整合SSM框架和profile 配置环境_第19张图片

第四部分:测试

欢迎页面

Tomcat启动后浏览器打开显示如下内容,说明tomcat启动成功,项目首页index.jsp调用成功

超详细的用IDEA整合SSM框架和profile 配置环境_第20张图片

调用url看controller工作

超详细的用IDEA整合SSM框架和profile 配置环境_第21张图片

查看日志

检查日志,因为配置了log4j,里面配置的日志目录,所以在日志目录下可以看到日志

超详细的用IDEA整合SSM框架和profile 配置环境_第22张图片

第五部分 通过profile 控制环境

我们经常面临的是开发、测试、部署环境下配置文件有不同,因此maven提供了profile来管理这些配置文件

resources配置

以jdbc.properties 为例,数据库在测试、开发、在线系统上配置是不同的,因此建立不同的文件夹和jdbc.properties

         三个文件在本例子中以用户名和密码来区别,不同的环境对应不同的账号和密码

超详细的用IDEA整合SSM框架和profile 配置环境_第23张图片

pom.xml配置profile

在build节点前,增加profiles的设置



  
    dev
    
      dev
    
    
      true
    
  
  
    test
    
      test
    
  
  
    online
    
      online
    
  

默认是dev,且activeByDefault 设置为true。

pom.xml修改build节点

超详细的用IDEA整合SSM框架和profile 配置环境_第24张图片

验证profiles

配置完pom.xml后在IDEA环境的maven project 面板多出来一块内容

超详细的用IDEA整合SSM框架和profile 配置环境_第25张图片

我们可以测试一下,先将dev 打勾,执行maven resources命令

超详细的用IDEA整合SSM框架和profile 配置环境_第26张图片

执行完成后,在classes目录下,jdbc 确实是dev环境。Maven resources是将src目录下的资源拷贝到 target/classes目录下,war命令是将这个目录下的内容生成到项目部署目录。

超详细的用IDEA整合SSM框架和profile 配置环境_第27张图片

现在我们在面板上profile中online 打勾,再次执行 maven resources命令

超详细的用IDEA整合SSM框架和profile 配置环境_第28张图片

最后执行打包就可以根据不同的配置文件进行打包。

你可能感兴趣的:(JAVA,WEB,MAVEN,Sping,SSM)