简体   繁体   中英

gwt application and spring MVC return error 404

I have a gwt Application with spring core 4 framework. In the server part i added a RestController to produce a web service for other application. I used Java configuration for this but now when i run the application in the embedded server Jetty the gwt application run perfectly but not the web Service(error 404) and when i run the war in jboss 7.1.1 the Rest WebService works perfectly but not the gwt application(error 404).

this is my new configuration :

    @RestController
    @RequestMapping(value = "/historiquedlo", produces = "application/hal+json", consumes = { "text/plain","text/html","application/*" })
    @Transactional
    public class WsHistoriqueDlo {

        /**
         * En dur dans PCD
         */
        private static final String DEFAULT_CODE_PRODUIT_DL = "L20";

        @Autowired
        private EntityManager entityManager;

        /**
         * Méthode avec 4 paramètres : Code produit par défaut L20
         * 
         * @param siren
         * @param debut
         *            : ISO Date Format yyyy-MM-dd, e.g. "2000-10-31".
         * @param sirenGroupe
         * @param sirenTeteGroupe
         * @return ResponseEntity<Resources<HistoriqueDlo>>
         */
        @RequestMapping(value = "/{siren}/{debut}", method = RequestMethod.GET)
        public ResponseEntity<Resource<InfoHistoriqueDlo>> findHistoriqueDlo(@PathVariable("siren") final String siren,
                @PathVariable("debut") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) final String debut,
                @RequestParam(name="sirenGroupe", required=false) final String sirenGroupe,
                @RequestParam(name="sirenTeteGroupe", required=false) final String sirenTeteGroupe) { 
.
.
.}  
public class SoftWebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
 @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[] { SoftWebConfig.class };
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return null;
    }

    @Override
    protected String[] getServletMappings() {
         return new String[]{"/*","/ws/*"};     }

}

and for the SoftWebConfig i used this configuration:

@Configuration
@Import(SoftDBConfig.class)
@EnableScheduling
@EnableWebMvc
@EnableHypermediaSupport(type = { HypermediaType.HAL })
@ComponentScan(basePackages = { "com.rcibanque.socle.server.*", "com.rcibanque.sof.server.*",
        "com.rcibanque.socle.server.ws.*" })
public class SoftWebConfig implements SchedulingConfigurer {

    @Override
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
        taskRegistrar.setScheduler(taskExecutor());
    }

    @Bean(name = "TOPCAR-EXECUTOR", destroyMethod = "shutdown")
    public Executor taskExecutor() {
        return Executors.newScheduledThreadPool(1);
    }

}

My web.xml is like this :

> <?xml version="1.0" encoding="UTF-8"?> <web-app
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
>               http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"  version="2.5" xmlns="http://java.sun.com/xml/ns/javaee">
> 
>   <display-name>rci_sof</display-name>
>   
> 
>   <!-- Servlet de démarrage de l'application -->  <servlet>
>       <servlet-name>AppContextInitializerServlet</servlet-name>
>       <servlet-class>com.rcibanque.sof.server.servlet.SofContextInitializerServlet</servlet-class>
>       <load-on-startup>1</load-on-startup>    </servlet>
> 
>   <!-- Services RPC -->   <servlet>
>       <servlet-name>dataServiceRPC</servlet-name>
>       <servlet-class>com.rcibanque.sof.server.service.data.SofDataServiceImpl</servlet-class>
>   </servlet>  <servlet-mapping>
>       <servlet-name>dataServiceRPC</servlet-name>
>       <url-pattern>/rci_sof/dataService.rpc</url-pattern>
>   </servlet-mapping>  <servlet-mapping>
>       <servlet-name>dataServiceRPC</servlet-name>
>       <url-pattern>/rci_admin/dataService.rpc</url-pattern>
>   </servlet-mapping>
> 
>   <servlet>       <servlet-name>dataModuleServiceRPC</servlet-name>
>       <servlet-class>com.rcibanque.sof.server.service.data.SofDataModuleServiceImpl</servlet-class>
>   </servlet>  <servlet-mapping>
>       <servlet-name>dataModuleServiceRPC</servlet-name>
>       <url-pattern>/rci_sof/dataModuleService.rpc</url-pattern>
>   </servlet-mapping>  <servlet-mapping>
>       <servlet-name>dataModuleServiceRPC</servlet-name>
>       <url-pattern>/rci_admin/dataModuleService.rpc</url-pattern>
>   </servlet-mapping>
> 
>   <servlet>       <servlet-name>tariffingServiceRPC</servlet-name>
>       <servlet-class>com.rcibanque.sof.server.service.tariffing.TariffingServiceImpl</servlet-class>
>   </servlet>  <servlet-mapping>
>       <servlet-name>tariffingServiceRPC</servlet-name>
>       <url-pattern>/rci_sof/tariffingService.rpc</url-pattern>
>   </servlet-mapping>  <servlet-mapping>
>       <servlet-name>tariffingServiceRPC</servlet-name>
>       <url-pattern>/rci_admin/tariffingService.rpc</url-pattern>
>   </servlet-mapping>
> 
>   <!-- RPC Chart -->  <servlet>       <servlet-name>chartRPC</servlet-name>
>       <servlet-class>com.rcibanque.sof.server.chart.ChartGeneratorImpl</servlet-class>
>   </servlet>  <servlet-mapping>       <servlet-name>chartRPC</servlet-name>
>       <url-pattern>/rci_sof/chart.rpc</url-pattern>   </servlet-mapping>
> 
>   <!-- RPC Print Report -->   <servlet>
>       <servlet-name>printReportRPC</servlet-name>
>       <servlet-class>com.rcibanque.sof.server.print.report.SofPrintReportImpl</servlet-class>
>   </servlet>  <servlet-mapping>
>       <servlet-name>printReportRPC</servlet-name>
>       <url-pattern>/rci_sof/printReport.rpc</url-pattern>
>   </servlet-mapping>
> 
>   <!-- RPC Mail -->   <servlet>
>       <servlet-name>messagingServiceRPC</servlet-name>
>       <servlet-class>com.rcibanque.sof.server.print.messaging.SofMessagingServiceImpl</servlet-class>
>   </servlet>  <servlet-mapping>
>       <servlet-name>messagingServiceRPC</servlet-name>
>       <url-pattern>/rci_sof/messagingService.rpc</url-pattern>
>   </servlet-mapping>
> 
>   <!-- RPC TOPCAR -->     <servlet>
>       <servlet-name>topCarServiceRPC</servlet-name>
>       <servlet-class>com.rcibanque.sof.server.service.topcar.TopCarService</servlet-class>    </servlet>  <servlet-mapping>
>       <servlet-name>topCarServiceRPC</servlet-name>
>       <url-pattern>/rci_sof/topCarService.rpc</url-pattern>
>   </servlet-mapping>  <servlet-mapping>
>       <servlet-name>topCarServiceRPC</servlet-name>
>       <url-pattern>/rci_admin/topCarService.rpc</url-pattern>
>   </servlet-mapping>
> 
>   <!-- RPC Fiscalité CO2 -->  <servlet>
>       <servlet-name>fiscaliteCO2</servlet-name>
>       <servlet-class>com.rcibanque.socle.server.service.data.FiscaliteCO2Service</servlet-class>
>   </servlet>  <servlet-mapping>
>       <servlet-name>fiscaliteCO2</servlet-name>
>       <url-pattern>/rci_sof/fiscaliteCO2Service.rpc</url-pattern>
>   </servlet-mapping>  <servlet-mapping>
>       <servlet-name>fiscaliteCO2</servlet-name>
>       <url-pattern>/rci_admin/fiscaliteCO2Service.rpc</url-pattern>
>   </servlet-mapping>
> 
>   <!-- RPC Offre -->  <servlet>
>       <servlet-name>offreServiceRPC</servlet-name>
>       <servlet-class>com.rcibanque.sof.server.service.offre.OffreServiceRPCImpl</servlet-class>
>   </servlet>  <servlet-mapping>
>       <servlet-name>offreServiceRPC</servlet-name>
>       <url-pattern>/rci_sof/offreService.rpc</url-pattern>
>   </servlet-mapping>
> 
>   <!-- Servlets -->   <servlet>
>       <servlet-name>displayChartServlet</servlet-name>
>       <servlet-class>org.jfree.chart.servlet.DisplayChart</servlet-class>
>   </servlet>  <servlet-mapping>
>       <servlet-name>displayChartServlet</servlet-name>
>       <url-pattern>/rci_sof/displayChart</url-pattern>    </servlet-mapping>
> 
>   <servlet>       <servlet-name>downloadServlet</servlet-name>
>       <servlet-class>com.rcibanque.socle.server.servlet.DownloadServlet</servlet-class>
>   </servlet>  <servlet-mapping>
>       <servlet-name>downloadServlet</servlet-name>
>       <url-pattern>*.pdf</url-pattern>    </servlet-mapping>
>   <servlet-mapping>       <servlet-name>downloadServlet</servlet-name>
>       <url-pattern>*.xls</url-pattern>    </servlet-mapping>
>   <servlet-mapping>       <servlet-name>downloadServlet</servlet-name>
>       <url-pattern>*.txt</url-pattern>    </servlet-mapping>
>   <servlet-mapping>       <servlet-name>downloadServlet</servlet-name>
>       <url-pattern>*.csv</url-pattern>    </servlet-mapping>
> 
>   <servlet>       <servlet-name>topcarDownloadServlet</servlet-name>
>       <servlet-class>com.rcibanque.socle.server.servlet.TopcarDownloadServlet</servlet-class>
>   </servlet>  <servlet-mapping>
>       <servlet-name>topcarDownloadServlet</servlet-name>
>       <url-pattern>/rci_sof/download</url-pattern>    </servlet-mapping>
>   <servlet>       <servlet-name>uploadServlet</servlet-name>
>       <servlet-class>com.rcibanque.socle.server.servlet.UploadServlet</servlet-class>
>   </servlet>  <servlet-mapping>
>       <servlet-name>uploadServlet</servlet-name>
>       <url-pattern>/rci_sof/upload</url-pattern>  </servlet-mapping>
>   <servlet-mapping>       <servlet-name>uploadServlet</servlet-name>
>       <url-pattern>/rci_admin/upload</url-pattern>    </servlet-mapping>
>   <servlet>       <servlet-name>uploadTopcarServlet</servlet-name>
>       <servlet-class>com.rcibanque.socle.server.servlet.UploadTopcarServlet</servlet-class>
>   </servlet>  <servlet-mapping>
>       <servlet-name>uploadTopcarServlet</servlet-name>
>       <url-pattern>/rci_sof/uploadTopcar</url-pattern>    </servlet-mapping>
> 
> 
>   <!-- Filtre de gestion des caches -->   <filter>
>       <filter-name>gwtCacheControlFilter</filter-name>
>       <filter-class>com.rcibanque.socle.server.filter.GWTCacheControlFilter</filter-class>
>   </filter>   <filter-mapping>
>       <filter-name>gwtCacheControlFilter</filter-name>
>       <url-pattern>/*</url-pattern>   </filter-mapping>
> 
>   <!-- Default page to serve -->  <welcome-file-list>
>       <welcome-file>Index.html</welcome-file>     </welcome-file-list>
> 
>   <!-- Timeout QC32499 session connexion timeout <session-config>
> <session-timeout>300</session-timeout>        </session-config> -->
> 
> </web-app>

I used http://localhost:8080/rci_sof/Index.html for the gwt application and for the web Service i use this Url: http://localhost:8080/rci_sof/ws/historiquedlo/30365637500209/L20/2018-06-20?sirenGroupe=950425694&sirenTeteGroupe=447938036 .

Thank you .

You can initialize your application either using a web.xml file
OR
using the AbstractAnnotationConfigDispatcherServletInitializer.class (from servlet version 3.0+).
Currently you are providing both, and only one will work.

The easiest way is probably to initialize the dispatcher servlet in your web.xml and remove the SoftWebInitializer.class .

Add this to your web.xml(use the correct path for your SoftWebConfig): All spring controllers will now have the base url localhost:8080/ws

  <servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
    <init-param>
      <param-name>contextClass</param-name>
      <param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
    </init-param>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>XXXXX.XXXXX.SoftWebConfig</param-value>
    </init-param>
  </servlet>

<servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>/ws/*</url-pattern>
</servlet-mapping>

Using the spring WebApplicationInitializer instead of an web.xml file only works in a servlet version 3.0+ but your web.xml currently specifies version 2.5.
So to actually use the AbstractAnnotationConfigDispatcherServletInitializer you would have to remove your web.xml file and migrate everything to your new Initializer file.
Also a webserver that supports servlet version 3.0 and higher is required. Jetty would require at least version 8 .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM