分享

在基于CXF的webservice中访问HttpServletRequest的方法

 风_宇星 2014-04-29

基于CXF开发webservice,想在webservice实现类中获得HttpServletRequest对象,用了几种方式,用@Resources标签或者@Context标签都不行。@Context标签下对象为null,@Resource标签虽然注入了org.apache.cxf.jaxws.context.WebServiceContextImplWebServiceContext 对象,但是该对象内部值为null,什么也取不到。

 

后面用了个笨办法,在web.xml中增加一个filter

 

Xml代码  收藏代码
  1. <filter>  
  2.     <filter-name>ContextServlet</filter-name>  
  3.     <filter-class>xxx.filter.ContextServlet</filter-class>  
  4. </filter>  
  5. <filter-mapping>  
  6.     <filter-name>ContextServlet</filter-name>  
  7.     <url-pattern>/services/*</url-pattern>  
  8. </filter-mapping>  

 

 

在filter中访问HttpServletRequest,将需要获得的值保存在ThreadLocal中

 

Java代码  收藏代码
  1. public static ThreadLocal<String> path = new ThreadLocal<String>();  
  2.     @Override  
  3.     public void destroy() {  
  4.         path.remove();        
  5.     }  
  6.   
  7.     @Override  
  8.     public void doFilter(ServletRequest arg0, ServletResponse arg1,  
  9.             FilterChain arg2) throws IOException, ServletException {  
  10.         HttpServletRequest request=(HttpServletRequest)arg0;          
  11.         String path = request.getContextPath();  
  12.         basePath.set(path);  
  13.         arg2.doFilter(arg0, arg1);  
  14.     }  

 

这样,在webservice的实现类中只要用 ContextServlet.path.get()就可以获得当前HttpServletRequest对中的变量。 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约