搭建ssm项目+搭建过程中可能遇到的各种坑(idea+maven+spring+springMVC+mybatis)

目录

一、在idea上搭建一个基于maven的web项目

1.1、点击file-->new--->project

1.2、在“New Project”页面左侧选中maven选项,我们创建的是一个最简单的maven项目,需要做的是勾选图示所示的“Create From Archetype”复选框,在下面的下拉选项中我们选择“webapp”,之后点击【Next】;

1.3、在接下来的面板中,我们填写maven的坐标,“groupId”,“artifactId”,以及“version”,其中groupId是公司域名的反写,而artifactId是项目名或模块名,而version就是该项目或模块所对应的版本号。填写完之后,点击【Next】;

1.4、在接下来的面板中选择你的本地的maven的安装路径以及配置maven时设置的setting文件,选择完成后点击【Next】;

1.5、在接下来的界面中填写项目名,填写完成后点击【Finish】;

2.开始创建项目的目录结构,创建的结构如下图

2.1 这是总体的结构

2.2 这个是展开的结构

3.创建各个配置文件

3.1  web.xml

3.2   spring-config.xml

3.3  spring-config-mvc.xml

3.4   spring-config-mybatis.xml

3.5  jdbc.properties

3.6  log4j.properties

3.7  UserMapper.xml

4. pom.xml

5.  设置project structure

6.  设置tomcat

7.启动和终止tomcat服务器

在搭建项目时可能遇到的问题

1.报错内容:

分析:出现以下报错原因是因为找不到配置文件,可能是因为以下2种原因引起的:

2.报错内容

分析:这是在maven进行clean的时候报的错(clean也就是删除target)

3.报错内容

4.如下在web.xml中设置了首页但是不能正确跳转


使用的编辑器:idea+maven

使用的框架ssm(spring+springMVC+mybatis)

使用的服务器:tomcat

创建整个项目的顺序:

1、在idea上搭建一个基于maven的web项目


1.1、点击file-->new--->project

搭建ssm项目+搭建过程中可能遇到的各种坑(idea+maven+spring+springMVC+mybatis)_第1张图片

1.2、在“New Project”页面左侧选中maven选项,我们创建的是一个最简单的maven项目,需要做的是勾选图示所示的“Create From Archetype”复选框,在下面的下拉选项中我们选择“webapp”,之后点击【Next】;

搭建ssm项目+搭建过程中可能遇到的各种坑(idea+maven+spring+springMVC+mybatis)_第2张图片

1.3、在接下来的面板中,我们填写maven的坐标,“groupId”,“artifactId”,以及“version”,其中groupId是公司域名的反写,而artifactId是项目名或模块名,而version就是该项目或模块所对应的版本号。填写完之后,点击【Next】;

搭建ssm项目+搭建过程中可能遇到的各种坑(idea+maven+spring+springMVC+mybatis)_第3张图片

1.4、在接下来的面板中选择你的本地的maven的安装路径以及配置maven时设置的setting文件,选择完成后点击【Next】;

 

搭建ssm项目+搭建过程中可能遇到的各种坑(idea+maven+spring+springMVC+mybatis)_第4张图片

 

1.5、在接下来的界面中填写项目名,填写完成后点击【Finish】;

搭建ssm项目+搭建过程中可能遇到的各种坑(idea+maven+spring+springMVC+mybatis)_第5张图片

2、开始创建项目的目录结构,创建的结构如下图

2.1、 这是总体的结构

搭建ssm项目+搭建过程中可能遇到的各种坑(idea+maven+spring+springMVC+mybatis)_第6张图片

2.2 、这个是展开的结构

搭建ssm项目+搭建过程中可能遇到的各种坑(idea+maven+spring+springMVC+mybatis)_第7张图片

3、创建各个配置文件

3.1 、 web.xml


    
    Archetype Created Web Application

    
    
        contextConfigLocation
        classpath:spring-config.xml
    

    
    
        encodingFilter
        org.springframework.web.filter.CharacterEncodingFilter
        
            encoding
            UTF-8
        
    
    
        encodingFilter
        /*
    
    
   
        org.springframework.web.context.ContextLoaderListener
    
    
    
        DispatcherServlet
        org.springframework.web.servlet.DispatcherServlet
        
            contextConfigLocation
            classpath:spring-config.xml
        
        1
    
    
        DispatcherServlet
        /index.jsp
    

    
    
        DispatcherServlet
        *.do
    

    
    
        DispatcherServlet
        *.json
    

    
        index.jsp
    

3.2  、 spring-config.xml



    
    
    
    
        
            
                classpath:prop/*.properties
            
        
    

    

3.3  、spring-config-mvc.xml




    
    
    
    
    
        
            
                text/html;charset=UTF-8
            
        
    
    
    
        
            
                
                
            
        
    
    
    
        
        
        
    
    

3.4 、  spring-config-mybatis.xml




    
    
    
    
        
    
    
        
        
        
        
        
        
        
        
        
        
        
        
        
        
    
    
    
        
        
        
    
    
    
        
        
    
    
    
        
    

3.5、  jdbc.properties

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

3.6  、log4j.properties

#日志配置
log4j.rootLogger=INFO,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 = /logs/ymx.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

3.7  、UserMapper.xml




    
        
        
        
        
    
    
    
    
        insert into users(username,password) values (#{username},#{password})
    

4、pom.xml





    com.51
    job
    1.0-SNAPSHOT
    4.0.0
    war

    
            
            4.0.2.RELEASE
            
            3.2.6
            
            1.7.7
            1.2.17
        
        
            
                junit
                junit
                4.11
                test
            
            
            
                javax
                javaee-api
                7.0
            
            
            
                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.2
            
            
            
                mysql
                mysql-connector-java
                5.1.30
            
            
            
                commons-dbcp
                commons-dbcp
                1.4
            
            
            
                jstl
                jstl
                1.2
            
            
            
                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
            
            
                junit
                junit
                RELEASE
                compile
            

            
                org.aspectj
                aspectjweaver
                1.8.10
            
            
                org.aspectj
                aspectjrt
                1.8.10
            
        

        
            job



          
            
                
                    src/main/resources
                    true
                 
            
           
            
                
                    org.apache.maven.plugins
                    maven-compiler-plugin
                    
                        1.6
                        1.6
                    
                

                
                    org.apache.maven.plugins
                    maven-surefire-plugin
                    2.6
                    
                        true
                        false
                        
                            **/*Test.java
                        
                    
                

        
        

5、 设置project structure

5.1 、首先打开project structure

搭建ssm项目+搭建过程中可能遇到的各种坑(idea+maven+spring+springMVC+mybatis)_第8张图片

5.2 、设置project

搭建ssm项目+搭建过程中可能遇到的各种坑(idea+maven+spring+springMVC+mybatis)_第9张图片

5.3 、设置module的sources

搭建ssm项目+搭建过程中可能遇到的各种坑(idea+maven+spring+springMVC+mybatis)_第10张图片

5.4 、设置module的path

搭建ssm项目+搭建过程中可能遇到的各种坑(idea+maven+spring+springMVC+mybatis)_第11张图片

5.5  、设置artifacts

搭建ssm项目+搭建过程中可能遇到的各种坑(idea+maven+spring+springMVC+mybatis)_第12张图片

6、 设置tomcat

6.1 、 打开edit configuration

搭建ssm项目+搭建过程中可能遇到的各种坑(idea+maven+spring+springMVC+mybatis)_第13张图片

 

6.2 、创建本地tomcat

搭建ssm项目+搭建过程中可能遇到的各种坑(idea+maven+spring+springMVC+mybatis)_第14张图片

6.3  、设置tomcat的server

搭建ssm项目+搭建过程中可能遇到的各种坑(idea+maven+spring+springMVC+mybatis)_第15张图片

6.4  、设置tomcat的deployment

搭建ssm项目+搭建过程中可能遇到的各种坑(idea+maven+spring+springMVC+mybatis)_第16张图片

 

7、启动和终止tomcat服务器

搭建ssm项目+搭建过程中可能遇到的各种坑(idea+maven+spring+springMVC+mybatis)_第17张图片

8、在搭建项目时可能遇到的问题

8.1、报错内容:

严重: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [spring-config.xml]; nested exception is java.io.FileNotFoundException: class path resource [spring-config.xml] cannot be opened because it does not exist
	at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:343)
	at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:303)
	at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:180)
	at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:216)
	at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:187)
	at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:125)
	at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:94)
	at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:129)
	at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:540)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:454)
	at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:403)
	at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306)
	at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106)
	at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3843)
	at org.apache.catalina.core.StandardContext.start(StandardContext.java:4342)
	at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
	at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
	at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)
	at org.apache.catalina.startup.HostConfig.manageApp(HostConfig.java:1261)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:606)
	at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:297)
	at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
	at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
	at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:631)
	at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:568)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:606)
	at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:295)
	at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
	at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
	at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1487)
	at javax.management.remote.rmi.RMIConnectionImpl.access$300(RMIConnectionImpl.java:97)
	at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1328)
	at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1420)
	at javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:848)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:606)
	at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:322)
	at sun.rmi.transport.Transport$1.run(Transport.java:177)
	at sun.rmi.transport.Transport$1.run(Transport.java:174)
	at java.security.AccessController.doPrivileged(Native Method)
	at sun.rmi.transport.Transport.serviceCall(Transport.java:173)
	at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:556)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:811)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:670)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
	at java.lang.Thread.run(Thread.java:745)
Caused by: java.io.FileNotFoundException: class path resource [spring-config.xml] cannot be opened because it does not exist
	at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:158)
	at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:329)
	... 54 more

七月 29, 2019 10:23:19 上午 org.apache.catalina.core.ApplicationContext log
信息: Closing Spring root WebApplicationContext
七月 29, 2019 10:23:19 上午 org.apache.catalina.core.StandardContext listenerStop
严重: Exception sending context destroyed event to listener instance of class org.springframework.web.context.ContextLoaderListener
java.lang.IllegalStateException: BeanFactory not initialized or already closed - call 'refresh' before accessing beans via the ApplicationContext
	at org.springframework.context.support.AbstractRefreshableApplicationContext.getBeanFactory(AbstractRefreshableApplicationContext.java:170)
	at org.springframework.context.support.AbstractApplicationContext.destroyBeans(AbstractApplicationContext.java:921)
	at org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:895)
	at org.springframework.context.support.AbstractApplicationContext.close(AbstractApplicationContext.java:841)
	at org.springframework.web.context.ContextLoader.closeWebApplicationContext(ContextLoader.java:579)
	at org.springframework.web.context.ContextLoaderListener.contextDestroyed(ContextLoaderListener.java:115)
	at org.apache.catalina.core.StandardContext.listenerStop(StandardContext.java:3882)
	at org.apache.catalina.core.StandardContext.stop(StandardContext.java:4523)
	at org.apache.catalina.core.StandardContext.start(StandardContext.java:4387)
	at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
	at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
	at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)
	at org.apache.catalina.startup.HostConfig.manageApp(HostConfig.java:1261)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:606)
	at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:297)
	at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
	at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
	at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:631)
	at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:568)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:606)
	at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:295)
	at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
	at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
	at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1487)
	at javax.management.remote.rmi.RMIConnectionImpl.access$300(RMIConnectionImpl.java:97)
	at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1328)
	at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1420)
	at javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:848)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:606)
	at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:322)
	at sun.rmi.transport.Transport$1.run(Transport.java:177)
	at sun.rmi.transport.Transport$1.run(Transport.java:174)
	at java.security.AccessController.doPrivileged(Native Method)
	at sun.rmi.transport.Transport.serviceCall(Transport.java:173)
	at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:556)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:811)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:670)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
	at java.lang.Thread.run(Thread.java:745)

七月 29, 2019 10:23:28 上午 org.apache.catalina.core.ApplicationContext log
信息: ContextListener: contextInitialized()
七月 29, 2019 10:23:28 上午 org.apache.catalina.core.ApplicationContext log
信息: SessionListener: contextInitialized()

分析:出现以下报错原因是因为找不到配置文件,可能是因为以下2种原因引起的:

《1》在web.xml中是否指定context-param的值,若没有请在web.xml中添加以下代码

原因:要是不指定将默认会从WEB-INF下寻找配置文件,路径不对自然就找不到配置文件

解决:在web.xml中添加

 
        contextConfigLocation
        classpath:spring-config.xml
    

《2》查看target/打包项目名/WEB-INF/classes下是否有配置文件,若没有请在pom.xml中添加以下代码

原因:要是不指定,则配置文件(src/main/resources下的文件)不会添加到target中,自然就找不到配置文件

解决:在pom.xml中添加

 
      
          src/main/resource
          true
      
 
特别注意:
①创建的文件目录一定与pom.xml中的directory相对应

②创建的resources资源文件夹之后,右键点击resources-->Mark Directory as ---> Source Root

8.2、报错内容

Failed to execute goal org.apache.maven.plugins:maven-clean-plugin:2.5:clean (default-clean) on project job: Failed to clean project: Failed to delete D:\BaiduNetdiskDownload\JDstu\ymxjob\target\job\WEB-INF\lib\mysql-connector-java-5.1.30.jar -> [Help 1]

分析:这是在maven进行clean的时候报的错(clean也就是删除target)

原因:没有关掉运行的服务器tomcat

解决:关闭tomcat之后再clean

8.3、报错内容

 

解决:如下图,在maven 中选择跳过检测test

搭建ssm项目+搭建过程中可能遇到的各种坑(idea+maven+spring+springMVC+mybatis)_第18张图片

-Dmaven.test.skip=true

8.4、如下在web.xml中设置了首页但是不能正确跳转


        index.jsp
    

可能的原因:

《1》tomcat中server.xml的设置

解决办法:找到tomcat安装目录下conf文件夹下的server.xml配置文件中(在标签内)添加以下代码

  

其中path标识是localhost:端口号/path/首页欢迎页

docBase是项目名

《2》tomcat运行的目录不正确

解决办法:查看点击file-->project structure-->Artifacts-->output directory的路径是否是想要运行的项目

 

                                                                                                                                                                      有错误请指正,谢谢!

你可能感兴趣的:(J2EE)