[SPRING] 서블릿으로 Spring Ioc 설정하기
SPRING서블릿으로 Spring Ioc 설정하기
나는 봄에 새로 왔고 봄의 ioc를 내 작은 (테스트) 웹 앱에 연결하려고한다.
나는 그런 Servlet ProductServlet을 가지고있다 :
public class ProductServlet extends HttpServlet{
private static final long serialVersionUID = 1L;
private RequestHelper requestHelper;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
processRequest(request);
}
private void processRequest(HttpServletRequest request){
requestHelper.process(request);
}
public RequestHelper getRequestHelper() {
return requestHelper;
}
public void setRequestHelper(RequestHelper requestHelper) {
this.requestHelper = requestHelper;
}
}
및 내 web.xml :
<servlet>
<servlet-name>ProductServlet</servlet-name>
<servlet-class>com.epam.productshop.controller.ProductShop</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ProductServlet</servlet-name>
<url-pattern>/ProductServlet</url-pattern>
</servlet-mapping>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/spring-config.xml
</param-value>
</context-param>
또한 같은 봄 구성 xml 있습니다 :
<bean id="factory" class="com.epam.productshop.readerfactory.ReaderFactory">
<property name="file" value="/xml/products.xml" />
</bean>
<bean id="requestHelper" class="com.epam.productshop.requesthelper.RequestHelper" scope="singleton">
<property name="factory" ref="factory" />
</bean>
<bean name="ProductServlet" class="com.epam.productshop.controller.ProductServlet" scope="singleton">
<property name="requestHelper" ref="requestHelper"/>
</bean>
나는 그런 문제가있다.
서블릿 init () 중에 Spring이 requestHelper 객체를 내 서블릿에 넣길 원합니다. 하지만이 대신에 그것은 나를 nullpointer 준다.
HttpRequestHandler에서 SpringBeanAutowiringSupport.processInjectionBasedOnServletContext (this, getServletContext ())를 작성하여 내 서블릿을 구현하려고합니다. init () 메소드와 인터넷에서 볼 수있는 다른 것들에이 모든 것들이 내 문제를 해결하지 못한다.
도와주세요.
해결법
-
==============================
1.귀하의 질문에 당신은
귀하의 질문에 당신은
<bean name="ProductServlet" class="com.epam.productshop.controller.ProductServlet" scope="singleton"> <property name="requestHelper" ref="requestHelper"/> </bean>
Spring 컨테이너로 서블릿을 인스턴스화 할 수 없으며 서블릿 컨테이너로 인스턴스화됩니다. ProductServlet의 다른 인스턴스를 선언하는 것일뿐입니다.
따라서 Servlet init () 메서드가 호출 될 때 호출해야합니다.
SpringBeanAutowiringSupport.processInjectionBasedOnServletContext(this, getServletContext());`
requestHelper를 삽입하려면 @Autowired 주석 필드 또는 속성을 서블릿에 선언하십시오.
private RequestHelper requestHelper; @Autowired public void setRequestHelper(RequestHelper requestHelper){ this.requestHelper = requestHelper; }
processInjectionBasedOnServletContext의 javadoc :
-
==============================
2.다음은 해결 방법입니다.
다음은 해결 방법입니다.
public class ProductServlet extends HttpServlet { private static final long serialVersionUID = 1L; private RequestHelper requestHelper = null; private requestHelperInit(HttpServletRequest request) { if(requestHelper == null) { ApplicationContext ap = WebApplicationContextUtils.getWebApplicationContext(request.getSession().getServletContext()); requestHelper = ap.getBean(RequestHelper.class); } } }
그런 다음 doGet () 또는 doPost () 메소드의 첫 번째 문으로 requestHelperInit (request) 메소드를 호출하십시오.
솔루션을 계속 찾고 있다면, 이것이 도움이되기를 바랍니다.
-
==============================
3.너는 몇 가지 선택권이있다. 실제로 서블릿을 삽입하고 싶다면, 서블릿 컨테이너가 이미 서블릿 생성을 담당하고있는 것이 문제입니다. 인젝션은 생성 시간이기 때문에이 서블릿을 생성하는 데 약간의 어려움이 있습니다. 덜 우아한 솔루션을 사용해야합니다. 그러나이 질문은 서블릿 주입 방법을 설명합니다.
너는 몇 가지 선택권이있다. 실제로 서블릿을 삽입하고 싶다면, 서블릿 컨테이너가 이미 서블릿 생성을 담당하고있는 것이 문제입니다. 인젝션은 생성 시간이기 때문에이 서블릿을 생성하는 데 약간의 어려움이 있습니다. 덜 우아한 솔루션을 사용해야합니다. 그러나이 질문은 서블릿 주입 방법을 설명합니다.
반면에이 방법을 중단하는 것을 고려해보십시오. 웹 애플리케이션을 실제로 작성하는 경우에는 서블릿 API에 직접 코딩하는 것이 일반적입니다. 서블릿 API 위에 앉아 많은 수준의 기능을 제공하는 많은 웹 애플리케이션 프레임 워크 중 하나를 선택하는 것은 어떻습니까? 이러한 프레임 워크가 Spring과의 편리한 통합을 제공하므로 코드를 쉽게 삽입 할 수 있다는 것이 장점입니다. 예를 들어, Struts 2에는 스프링을 사용하여 프레임 워크 인프라 구성 요소를 포함하여 프레임 워크에서 생성 된 모든 객체를 삽입하는 데 사용할 수있는 플러그인이 있습니다.
from https://stackoverflow.com/questions/13461809/configurating-spring-ioc-with-servlets by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링 LDAP 2.0.1은 더 이상 사용되지 않는 OdmManager를 대체합니다. (0) | 2019.05.13 |
---|---|
[SPRING] Tomcat이 beans.xml을로드하고 읽을 때 Spring AOP XML 스키마가 제대로로드되지 않는 이유는 무엇입니까? (0) | 2019.05.13 |
[SPRING] Hibernate와 Spring을 사용하는 JPA는 Jboss에서 설정 한 여러 데이터베이스 / 데이터 소스에 접근한다. (0) | 2019.05.13 |
[SPRING] Spring MVC에서 자동 생성 ID (0) | 2019.05.13 |
[SPRING] Play-Framework 2.4 : Juice 대신 Play Framework를 사용하여 스프링 종속성 삽입 사용 (0) | 2019.05.13 |