JAX-WS 웹 서비스 내에서 ServletContext에 어떻게 액세스 할 수 있습니까?
-
06-07-2019 - |
문제
Servlet 컨텍스트 속성으로 저장하여 서블릿과 웹 서비스 (JAX-WS) 사이에 객체를 공유하고 싶습니다. 그러나 웹 서비스에서 서블릿 컨텍스트를 어떻게 검색 할 수 있습니까?
해결책
Servlet 컨텍스트는 Web Service 컨텍스트를 사용하여 검색 할 수있는 메시지 컨텍스트를 통해 JAX-WS에 의해 제공됩니다. 다음 멤버를 삽입하면 JAX-WS가 웹 서비스 컨텍스트에 대한 참조를 웹 서비스에 주입하게됩니다.
import javax.annotation.Resource;
import javax.servlet.ServletContext;
import javax.xml.ws.WebServiceContext;
import javax.xml.ws.handler.MessageContext;
...
@Resource
private WebServiceContext context;
그런 다음 다음을 사용하여 서블릿 컨텍스트에 액세스 할 수 있습니다.
ServletContext servletContext =
(ServletContext) context.getMessageContext().get(MessageContext.SERVLET_CONTEXT);
다른 팁
Maven을 사용하는 경우이 종속성을 추가하십시오 !!!
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.4</version>
<scope>provided</scope>
</dependency>
그래서 나는 servletcontext를 얻기 위해 충돌 오류를 피하기 위해 해결했다.정보 :
그리고 수업 방법에서 나는 사용합니다
@WebService(endpointInterface = "choice.HelloWorld")
public class HelloWorldImpl implements HelloWorld {
@Resource
private WebServiceContext context;
public String sayHi(String text) {
HttpServletRequest request =(HttpServletRequest) context.getMessageContext().get(MessageContext.SERVLET_REQUEST);
System.out.println(request.getContextPath());
공유하려는 객체가 파일 인 경우 myFile.txt
아래 방법을 사용할 수 있습니다.
내가 사용하는 가장 좋은 방법은 다음과 같습니다.
Thread.currentThread().getContextClassLoader().getResource("myFile.txt").getPath()
이것은 모든 파일의 경로를 제공합니다 myFile.txt
정착하다 /WEB-INF/classes/
내부의 디렉토리 WebContent
webapp의 폴더.
Eclipse jee 환경에서는 파일을 유지해야합니다. myFile.txt
, 당신은 웹 서비스 내에서 읽고 싶을 수도 있습니다. src
폴더로 전송 될 폴더 /WEB-INF/classes/
배포자의 폴더.
제휴하지 않습니다 StackOverflow