내 서블릿 클래스에서 Spring 컨텍스트를 가져 오는 데 문제가 있습니다. 메서드는 테스트에서 잘 작동합니다 (컨텍스트가로드 된 상태에서). 하지만 난 내 webapp에서 컨텍스트를로드 할 수없는 것 같습니다.web.xml과 Tomcat을 사용하여 Spring 컨텍스트를 올바르게로드하는 방법
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
<context:annotation-config />
<import resource="classpath*:/test-prova-spring-configuration.xml" />
</beans>
파일 테스트 PROVA-스프링의 configuration.xml 수입의 시리즈를 포함 : 이것은 내 응용 프로그램 컨텍스트 app-config.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" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>AgneseProva</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/spring/app-config.xml
</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<description></description>
<display-name>Prova</display-name>
<servlet-name>Prova</servlet-name>
<servlet-class>it.jenia.agnese.prova.Prova</servlet-class>
</servlet>
<servlet>
<description></description>
<display-name>Presenze</display-name>
<servlet-name>Presenze</servlet-name>
<servlet-class>it.jenia.agnese.prova.Presenze</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Prova</servlet-name>
<url-pattern>/Prova</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Presenze</servlet-name>
<url-pattern>/Presenze</url-pattern>
</servlet-mapping>
</web-app>
입니다 : 내가 여기에 톰캣 7을 사용하고있어 내 web.xml
파일입니다 데이터베이스 구성, 저장소 구성, 엔티티 및 서비스와 관련된 정보를 제공합니다.
package it.jenia.agnese.prova;
import it.jenia.ac.mail.rapportini.repository.CollaboratoreRepository;
import it.jenia.ac.mail.rapportini.repository.PresenzaRepository;
import it.jenia.vr.common.service.JspReporter;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
public class Presenze extends HttpServlet {
private static final long serialVersionUID = 1L;
private static Logger logger = Logger.getLogger(Presenze.class);
@Autowired
CollaboratoreRepository collaboratoreRepository;
@Autowired
PresenzaRepository presenzaRepository;
@Autowired
JspReporter jsp;
public Presenze() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String messaggiojsp = "ok";
String messaggiopr = "ok";
String messaggiocr = "ok";
if (jsp==null){
messaggiojsp = "ko";
}
request.setAttribute("messaggiojsp", messaggiojsp);
if(presenzaRepository ==null){
messaggiopr = "ko";
}
request.setAttribute("messaggiopr", messaggiopr);
if(collaboratoreRepository==null){
messaggiocr = "ko";
}
request.setAttribute("messaggiocr", messaggiocr);
request.getRequestDispatcher("/Presenze/presenze.jsp").forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
}
이 서버는 단지 상황이 완전히로드 인 경우와 같은 오류가 발생하지 않지만, autowire가 필드는 서블릿에서 널 (null)입니다
서블릿 클래스입니다. 지금까지 나는 시도했다 :
1. 서블릿을 @Service 어노테이션으로 서비스로 등록하고 패키지를 스프링 구성 파일 (test-prova-spring-configuration.xml)의 구성 요소 스캔에 추가한다. > 아무것도 변경되지 않았습니다. 필드는 null이고 Tomcat은 오류를 발생시키지 않았습니다.
2. 스프링 구성 파일에서 bean으로 서블릿을 등록하십시오. -> 아무 것도 변경되지 않았습니다. 필드는 null이고 Tomcat은 오류를 발생시키지 않았습니다.
서블릿에 코드의 그 세 줄을 3.Adding : - :
org.springframework.beans.factory.BeanCreationException : 사출
public void init(javax.servlet.ServletConfig config) throws ServletException {
SpringBeanAutowiringSupport.processInjectionBasedOnServletContext(this, config.getServletContext());
};
> 페이지가 (마침내) 오류가 발생 클래스에 대한 autowired 종속성 실패 [class it.jenia.agnese.prova.Presenze];
역 추적 :
exception
javax.servlet.ServletException: Servlet.init() for servlet Presenze threw exception
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.lang.Thread.run(Thread.java:745)
root cause
org.springframework.beans.factory.BeanCreationException: Injection of autowired dependencies failed for class [class it.jenia.agnese.prova.Presenze]; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: it.jenia.ac.mail.rapportini.repository.CollaboratoreRepository it.jenia.agnese.prova.Presenze.collaboratoreRepository; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [it.jenia.ac.mail.rapportini.repository.CollaboratoreRepository] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.processInjection(AutowiredAnnotationBeanPostProcessor.java:306)
org.springframework.web.context.support.SpringBeanAutowiringSupport.processInjectionBasedOnServletContext(SpringBeanAutowiringSupport.java:110)
it.jenia.agnese.prova.Presenze.init(Presenze.java:45)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.lang.Thread.run(Thread.java:745)
root cause
org.springframework.beans.factory.BeanCreationException: Could not autowire field: it.jenia.ac.mail.rapportini.repository.CollaboratoreRepository it.jenia.agnese.prova.Presenze.collaboratoreRepository; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [it.jenia.ac.mail.rapportini.repository.CollaboratoreRepository] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:514)
org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87)
org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.processInjection(AutowiredAnnotationBeanPostProcessor.java:303)
org.springframework.web.context.support.SpringBeanAutowiringSupport.processInjectionBasedOnServletContext(SpringBeanAutowiringSupport.java:110)
it.jenia.agnese.prova.Presenze.init(Presenze.java:45)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.lang.Thread.run(Thread.java:745)
root cause
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [it.jenia.ac.mail.rapportini.repository.CollaboratoreRepository] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:986)
org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:856)
org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:768)
org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:486)
org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87)
org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.processInjection(AutowiredAnnotationBeanPostProcessor.java:303)
org.springframework.web.context.support.SpringBeanAutowiringSupport.processInjectionBasedOnServletContext(SpringBeanAutowiringSupport.java:110)
it.jenia.agnese.prova.Presenze.init(Presenze.java:45)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.lang.Thread.run(Thread.java:745)
그러나, 요약, 문제는 서블릿 클래스의 REPO를 autowire하기 위해 콩을 찾을 수 있다는 것입니다.
나는 일종의 내 "초보자"자원을 완료하므로, 어떠한 도움이 많이 ..PS를 감상 할 수있다. o 망 구성 webapp을 가지고 있다는 것을 잊었습니다. 디렉토리 구조는 다음과 같습니다.
src
---main
------java
----------it.jenia.agnese.prova
---------------Presenze.java
------resources
------webapp
----------META-INF
--------------test-prova-spring-configuration.xml
--------------MANIFEST.MF
----------WEB-INF
--------------web.xml
--------------spring
------------------app-config.xml
----------Presenze
--------------presenze.jsp
스택 인쇄의 "정규화 된 Bean 없음"은 일반적으로 Spring Bean 구성의 긴 줄 문제의 마지막 부분입니다. 모든 것을 보여줄 수 있습니까? – BillFromHawaii
수정 완료되었지만 문제가 너무 해결되었습니다. – softwareplay