考虑一个简单的servlet:
// MyServlet.java
protected void doGet(HttpServletRequest request, HttpServletResponse response)
{
UtilClass.doSomething(getServletContext().getRealPath(SOME_FILE));
}
实用程序类对文件执行了一些操作:
// UtilClass.java
public String doSomething(String filePath)
{
File f = new File(filePath);
String s = readWhateverFrom(f);
return s;
}
我现在将doSomething()
函数移植到在Tomcat和 Axis2 下运行的Web服务。我如何移植它以便我仍然可以访问上下文并访问servlet下的文件?
答案 0 :(得分:2)
你应该得到你的(jax-ws)MessageContext
。这取决于您的配置,但可能使用
@Resource
private WebServiceContext wsCtx;
并在您的方法中:
MessageContext messageContext = wsCtx.getMessageContext()
ServletContext ctx = (ServletContext)
messageContext.getProperty(MessageContext.SERVLET_CONTEXT);
编辑:似乎Axis2(以及Axis)支持以下内容:
HttpServlet servlet = (HttpServlet)
MessageContext.getCurrentContext().getProperty(HTTPConstants.MC_HTTP_SERVLET);
ServletContext ctx = servlet.getServletContext();
使用以下导入:
import org.apache.axis2.context.MessageContext;
import org.apache.axis2.transport.http.HTTPConstants;
答案 1 :(得分:0)
听起来像Servlet Filter
和ThreadLocal
的工作。 Axis也在Servlet Context中运行。因此,您所要做的就是实现自定义javax.servlet.Filter
,将ServletRequest
填充到ThreadLocal
中,您可以在其中从实用程序类中访问它。您可以从ServletContext
获取FilterConfig
。