2013-09-25 24 views
0

我试图用球衣了Struts2的spring3 Web应用程序休息与球衣Struts2的spring3不工作

我的web.xml

<servlet> 
     <servlet-name>Jersey REST Service</servlet-name> 
     <servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class> 
     <init-param> 
      <param-name>com.sun.jersey.config.property.packages</param-name> 
      <param-value>com.vxl.appanalytix.service.impl</param-value> 
     </init-param> 
     <init-param> 
      <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name> 
      <param-value>true</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>Jersey REST Service</servlet-name> 
     <url-pattern>/rest/*</url-pattern> 
    </servlet-mapping> 

暴露web服务在struts.xml中我已经加入excludePattern

<constant name="struts.action.excludePattern" value="/rest/.*" /> 

服务等级

@Path("/requirement") 
@Service("dimRequirementManager") 
public class DimRequirementManagerImpl extends GenericManagerImpl<DimRequirement, Long> implements DimRequirementManager { 
    @Autowired 
    DimRequirementDao dimRequirementDao; 
    @GET 
    @Path("count") 
    @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) 
public DimRequirement getDimRequirement(){ 
    DimRequirement dimRequirement = new DimRequirement(); 
    dimRequirement.setClientKey(123L); 
    dimRequirement.setPriority("HIGH"); 

    return dimRequirement; 
}} 

依赖

<dependency> 
      <groupId>com.sun.jersey.contribs</groupId> 
      <artifactId>jersey-spring</artifactId> 
      <version>1.17.1</version> 
      <exclusions> 
       <exclusion> 
        <groupId>org.springframework</groupId> 
        <artifactId>spring</artifactId> 
       </exclusion> 
       <exclusion> 
        <groupId>org.springframework</groupId> 
        <artifactId>spring-core</artifactId> 
       </exclusion> 
       <exclusion> 
        <groupId>org.springframework</groupId> 
        <artifactId>spring-web</artifactId> 
       </exclusion> 
       <exclusion> 
        <groupId>org.springframework</groupId> 
        <artifactId>spring-beans</artifactId> 
       </exclusion> 
       <exclusion> 
        <groupId>org.springframework</groupId> 
        <artifactId>spring-context</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 

我传递了以下网址的RESTClient实现http://localhost:8080/app-web/rest/requirement/count其返回

Status Code: 404 Not Found 
Content-Language: en 
Content-Type: text/html;charset=utf-8 
Date: Wed, 25 Sep 2013 05:47:27 GMT 
Server: Apache-Coyote/1.1 
Transfer-Encoding: chunked 

调试运行控制不会去getDimRequirement时()

+0

我不知道,但也许是'struts.xml'的问题。我发现你有''并且你正在尝试一个不符合该模式的URL,因为它没有'.'也许您可以尝试使用'<常数名称=“struts.action.excludePattern”value =“/ rest/*”/>'代替。 – idiazt

+0

我得到这个错误'有没有行动映射的命名空间[/]和行动名称[休息/要求/计数]与上下文路径[/ appanalytix-web]相关联。 - [未知的位置]' – jos

回答

0

我已经解决了这个问题。我在我的web.xml中有一个url重写过滤器。

<filter> 
    <filter-name>rewriteFilter</filter-name> 
    <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class> 
    <init-param> 
     <param-name>logLevel</param-name> 
     <param-value>commons</param-value> 
    </init-param> 
    <init-param> 
     <param-name>confReloadCheckInterval</param-name> 
     <param-value>-1</param-value> 
    </init-param> 
    </filter> 
<filter-mapping> 
    <filter-name>rewriteFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
    </filter-mapping> 

urlrewrite.xml我已经添加

<rule> 
     <from>/rest/**</from> 
     <to>/rest/$1</to> 
    </rule> 
+0

你介意添加更多的代码吗? (完整的web.xml)我有同样的问题。就我而言,我在struts2中开发了一个应用程序,现在我们希望将其他服务与Spring MVC集成。我想从看/休息中排除Struts2 ...但是在休息控制器的HttpServletRequest中,我收到一个struts2实例。我实现了你现在没有成功的秘密。谢谢 – mannuk

+0

您是否在struts.xml中添加了'。这是他们大多数人告诉我要做的 – jos

+0

既不是value =“/ rest/*”也不是“/ rest/*”。我用web.xml中的* .html替换了struts *过滤器,以使其工作,但我想使用struts逻辑来排除模式,因为有一天,一个新的servlet可能会提供html – mannuk