zoukankan      html  css  js  c++  java
  • IDEA——SSM配置笔记(附带Illegal access: this web application instance has been stopped already. Could not load [].解决方案)

    • 首先简单理解Spring容器和SpringMVC的关系
      • web.xml中spring的核心ContextLoaderListener初始化的上下文和springmvc的核心DispatcherServlet初始化的上下文关系:
      • Spring容器和SpringMVC容器虽然是父容器与子容器的关系,但二者之间具有一定的独立性。具体来说,两个容器基于各自的配置文件分别进行初始化,只有在子容器找不到对应的Bean时,才回去父容器中去找并加载。
      • 此外,一般地,SpringMVC容器只管理Controller,剩下的Service、Repository 和 Component 由Spring容器去管理,不建议两个容器上在管理Bean上发生交叉。

      2. 环境搭建

                   

                    工程目录如下:

        然后就是部署Tomcat的web运行环境,注意web.xml,applicationContext.xml,spring-mvc.xml中关于路径的配置都是相对于classpath或WEB-INF配置的,因为实际生产环境中可能只有项目运行代码,并没有源文件,运行时需要到web项目下加载文件。

          •  web.xml
             1 <?xml version="1.0" encoding="UTF-8"?>
             2 <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             4          xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
             5          version="4.0">
             6 
             7     <welcome-file-list>
             8         <welcome-file>index.jsp</welcome-file>
             9     </welcome-file-list>
            10 
            11     <!--    用于加载Spring      -->
            12     <listener>
            13         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
            14     </listener>
            15     <listener>
            16         <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
            17     </listener>
            18 
            19     <!--    配置applicationContext.xml文件位置    -->
            20     <context-param>
            21         <param-name>contextConfigLocation</param-name>
            22         <param-value>classpath:config/spring/applicationContext.xml</param-value>
            23     </context-param>
            24 
            25     <!--    加载log4j2    -->
            26     <listener>
            27         <listener-class>org.apache.logging.log4j.web.Log4jServletContextListener</listener-class>
            28     </listener>
            29 
            30     <!--    配置log4j2.xml文件位置    -->
            31     <context-param>
            32         <param-name>log4jConfiguration</param-name>
            33         <param-value>classpath:config/log/log4j2.xml</param-value>
            34     </context-param>
            35 
            36     <filter>
            37         <filter-name>encodingFilter</filter-name>
            38         <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
            39         <init-param>
            40             <param-name>encoding</param-name>
            41             <param-value>UTF-8</param-value>
            42         </init-param>
            43         <init-param>
            44             <param-name>forceEncoding</param-name>
            45             <param-value>true</param-value>
            46         </init-param>
            47     </filter>
            48     <filter-mapping>
            49         <filter-name>encodingFilter</filter-name>
            50         <url-pattern>/*</url-pattern>
            51     </filter-mapping>
            52 
            53     <!--    前端控制器配置     -->
            54     <servlet>
            55         <servlet-name>dispatcher</servlet-name>
            56         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            57         <init-param>
            58             <param-name>contextConfigLocation</param-name>
            59             <param-value>classpath:config/spring/spring-mvc.xml</param-value>
            60         </init-param>
            61         <load-on-startup>1</load-on-startup>
            62     </servlet>
            63     <servlet-mapping>
            64         <servlet-name>dispatcher</servlet-name>
            65         <url-pattern>/</url-pattern>
            66     </servlet-mapping>
            67 
            68     <!--    配置session过期时间(以分为单位)    -->
            69     <session-config>
            70         <session-timeout>30</session-timeout>
            71     </session-config>
            72 </web-app>
            View Code
          •    applicationContext.xml(applicationContext.xml文件内容如下,主要是配置dataSource (数据源)、事务管理、对dataSource 数据源进行事务管理、事务通知、事务 aop 配置等)
          •  1 <?xml version="1.0" encoding="UTF-8"?>
             2 <beans xmlns="http://www.springframework.org/schema/beans"
             3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             4        xmlns:aop="http://www.springframework.org/schema/aop"
             5        xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
             6        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
             7                            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
             8                            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
             9                            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
            10 
            11     <description>Spring Configuration</description>
            12 
            13     <context:component-scan base-package="cn.itcast.ssm.service"/>
            14     <context:component-scan base-package="cn.itcast.ssm.mapper"/>
            15 
            16     <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"/>
            17 
            18     <!--    dao层    -->
            19     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            20         <!--   注意在web环境下配置文件位置应设置为WEB-INF中相应的路径      -->
            21         <property name="configLocation" value="classpath:config/mybatis/mybatis-config.xml"/>
            22         <property name="dataSource" ref="dataSource"/>
            23     </bean>
            24     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
            25         <property name="basePackage" value="cn.itcast.ssm.mapper"/>
            26         <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
            27     </bean>
            28 
            29     <!--    service层    -->
            30     <bean id="itemsService" class="cn.itcast.ssm.service.impl.ItemsServiceImpl"/>
            31 
            32     <!--    事务配置    -->
            33     <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            34         <property name="dataSource" ref="dataSource"/>
            35     </bean>
            36     <tx:advice id="txAdvice" transaction-manager="txManager">
            37         <tx:attributes>
            38             <tx:method name="insert*" propagation="REQUIRED"/>
            39             <tx:method name="save*" propagation="REQUIRED"/>
            40             <tx:method name="delete*" propagation="REQUIRED"/>
            41             <tx:method name="update*" propagation="REQUIRED"/>
            42             <tx:method name="retrieve*" propagation="SUPPORTS" read-only="true"/>
            43             <tx:method name="select*" propagation="SUPPORTS" read-only="true"/>
            44             <tx:method name="find*" propagation="SUPPORTS" read-only="true"/>
            45         </tx:attributes>
            46     </tx:advice>
            47     <aop:config>
            48         <aop:pointcut id="pointcut1" expression="execution(* cn.itcast.ssm.service..*(..))"/>
            49         <aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut1"/>
            50     </aop:config>
            51 </beans>
            View Code
          •    spring-mvc.xml(主要是web层,如controller层和视图层的配置)
             1 <?xml version="1.0" encoding="UTF-8"?>
             2 <beans xmlns="http://www.springframework.org/schema/beans"
             3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             4        xmlns:mvc="http://www.springframework.org/schema/mvc"
             5        xmlns:context="http://www.springframework.org/schema/context"
             6        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
             7                            http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
             8                            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
             9 
            10     <context:component-scan base-package="cn.itcast.ssm.controller"/>
            11 
            12     <!--    配置视图解析器     -->
            13     <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            14         <property name="prefix" value="/WEB-INF/jsp/"/>
            15         <property name="suffix" value=".jsp"/>
            16     </bean>
            17 </beans>
            View Code

        

        另外,在项目中配置log4j(log4j2)日志是很重要的,对于程序出错时查错,找错,调试有很大帮助,对于上面所提到的(注意web.xml,applicationContext.xml,spring-mvc.xml中关于路径的配置都是相对于classpath或WEB-INF配置的,因为实际生产环境中可能只有项目运行代码,并没有源文件,运行时需要到web项目下加载文件),如果配置的路径不是相对于classpath或者WEB-INF,没配置日志本人实现时抛出如下异常,由于信息量少,很难找出错误所在:

    18-Jun-2019 09:26:36.836 信息 [Abandoned connection cleanup thread] org.apache.catalina.loader.WebappClassLoaderBase.checkStateForResourceLoading Illegal access: this web application instance has been stopped already. Could not load []. The following stack trace is thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access.
     java.lang.IllegalStateException: Illegal access: this web application instance has been stopped already. Could not load []. The following stack trace is thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access.
    	at org.apache.catalina.loader.WebappClassLoaderBase.checkStateForResourceLoading(WebappClassLoaderBase.java:1348)
    	at org.apache.catalina.loader.WebappClassLoaderBase.getResource(WebappClassLoaderBase.java:1007)
    	at com.mysql.cj.jdbc.AbandonedConnectionCleanupThread.checkContextClassLoaders(AbandonedConnectionCleanupThread.java:96)
    	at com.mysql.cj.jdbc.AbandonedConnectionCleanupThread.run(AbandonedConnectionCleanupThread.java:69)
    	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    	at java.base/java.lang.Thread.run(Thread.java:834)

      在加了log4j2日志后,显示:

    Caused by: java.io.FileNotFoundException: Could not open ServletContext resource [/config/mybatis/mybatis-config.xml]
    	at org.springframework.web.context.support.ServletContextResource.getInputStream(ServletContextResource.java:141)
    	at org.mybatis.spring.SqlSessionFactoryBean.buildSqlSessionFactory(SqlSessionFactoryBean.java:406)
    	at org.mybatis.spring.SqlSessionFactoryBean.afterPropertiesSet(SqlSessionFactoryBean.java:380)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1692)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1630)
    	... 81 more

      

      从而得知找不到相应配置文件,原因在于配置是相对于src的,而不是相对于classpath,修正后即可正常运行。

      可见,项目中加入日志是很有帮助的。

  • 相关阅读:
    解决beego运行程序报错问题:stderr: go: github.com/astaxie/beego@v1.12.1: missing go.sum entry
    Flutter-填平菜鸟和高手之间的沟壑
    百度地图的脑残设计,附上代码,为后来的码农们...
    迅捷Flutter图片浏览软件
    青峰Flutter视频播放软件
    Element UI 自定义Validator
    在C#中如何URL编码和解码
    Postman新手入门
    安装SSDT2017
    layer.prompt 输入值为空的时候点击confirm不能继续
  • 原文地址:https://www.cnblogs.com/Hr666/p/11043540.html
Copyright © 2011-2022 走看看