结构如下:
只列一个web.xml:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>onlinestore</display-name> <!--spring 配置文件 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value> classpath*:*.xml </param-value> </context-param> <!--log4j启动的监听器 --> <listener> <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> </listener> <!--如果不设,默认为web.root,但最好设置,以免项目间冲突 --> <context-param> <param-name>webAppRootKey</param-name> <param-value>onlinestore.root</param-value> </context-param> <context-param> <param-name>log4jConfigLocation</param-name> <param-value>/WEB-INF/classes/log4j.properties</param-value> </context-param> <!--spring的启动监听器--> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <servlet> <servlet-name>CXFServlet</servlet-name> <servlet-class> org.apache.cxf.transport.servlet.CXFServlet </servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>CXFServlet</servlet-name> <url-pattern>/ws/*</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> </web-app>
全部的配置文件就不列了 这边记录一下问题
1.
org.springframework.beans.factory.BeanNotOfRequiredTypeException
用@Resource进行注入 名字没有问题 其他的类里都没问题 只发生在了service层的类里 如下:
@Resource private MemberServiceImpl memberServiceImpl;
后来发现是AOP进行声明式事务管理 里面的proxy-target-class没有设置(默认为false 表示使用JDK的代理(基于接口)) 因为我以上的注入是基于实现类注入的 所以会报这个错误
改正方法:1.改为MemberService memberServiceImpl;(如果改成memberService在Resource上要写明name)
2.设置proxy-target-class为true(CGLIB实现 基于继承)
这个问题更多可见:
http://ekisstherain.iteye.com/blog/1569236
2.
org.springframework.beans.MethodInvocationException: Property 'systemPropertiesModeName' threw exception; nested exception is org.springframework.core.ConstantException: Field 'SYSTEM_PROPERTIES_MODE_ENVIRONMENT' not found in class [org.springframework.beans.factory.config.PropertyPlaceholderConfigurer]
额 这个错误就是关于资源文件的 这个..源于我把log4j.properties放在了classpath下 然后又使用了:
<context:property-placeholder location="classpath*:*.properties"/>
没有debug进去查看 估计就是解析错误了什么的 换成以下的就好了(老方式):
<bean id="springConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" lazy-init="false"> <property name="locations"> <list> <value>classpath:db.properties</value> <value>classpath:hiber.properties</value> </list> </property> <property name="ignoreUnresolvablePlaceholders" value="true"></property> </bean>
3.
log4j:ERROR setFile(null,true) call failed.
java.io.FileNotFoundException: \WEB-INF\log4j.log
这个是鄙人看到web.xml里写的是这个:
<context-param> <param-name>log4jConfigLocation</param-name> <param-value>/WEB-INF/classes/log4j.properties</param-value> </context-param>
然后在web-inf建了个classes文件夹 又放了进去的关系.....
不动就可以了... ...会被编译进去的(主要用eclipse 不会在项目里生成classes文件夹(会在临时空间里)就弄错了)
具体看这里: