2012-05-08 36 views
5

Khi tôi chuyển ứng dụng thử nghiệm của mình sang ứng dụng (?) Hiệu quả và bắt đầu thử nghiệm trên Tomcat, dịch vụ REST dựa trên Spring 3.1 của tôi đã ngừng hoạt động. Mặc dù index.jsp mặc định được hiển thị, ứng dụng của tôi (http: // myhost: myport/test-webapp/myrestservice) không thể truy cập được và tôi nhận được Tài nguyên được yêu cầu (/ test-webapp/myrestservice) không có sẵn.Mùa xuân 3.1 REST với JSON: Không hoạt động

Dưới đây là những gì tôi đã làm:

Bộ điều khiển:

package com.test.webapp.controller; 

import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.web.bind.annotation.ResponseBody; 

import com.test.webap.entity.Account; 

@Controller 
@RequestMapping("/myrestservice") 
public class AccountController{ 

@RequestMapping(method = RequestMethod.GET, produces="application/json") 
@ResponseBody 
public Account getEntity() { 
      // ... <simplified> 
    return new Account(//...); 
} 
} 

cấu hình văn Servlet:

package com.test.webapp.web; 

import javax.servlet.ServletContext; 
import javax.servlet.ServletException; 
import javax.servlet.ServletRegistration; 

import org.springframework.web.WebApplicationInitializer; 
import org.springframework.web.context.ContextLoaderListener; 
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; 
import org.springframework.web.servlet.DispatcherServlet; 
import com.test.webapp.config.AppConfig; 

public class AppInit implements WebApplicationInitializer { 

    private static final String DISPATCHER_SERVLET_NAME = "dispatcher"; 

    public void onStartup(ServletContext container) throws ServletException { 
     // Create the dispatcher servlet's Spring application context 
     AnnotationConfigWebApplicationContext dispatcherContext = new AnnotationConfigWebApplicationContext(); 
     dispatcherContext.register(AppConfig.class); 

     // Manage the lifecycle of the root application context 
     container.addListener(new ContextLoaderListener(dispatcherContext)); 

     // Register and map the dispatcher servlet 
     ServletRegistration.Dynamic dispatcher = container.addServlet(
       DISPATCHER_SERVLET_NAME, new DispatcherServlet(dispatcherContext)); 
     dispatcher.setLoadOnStartup(1); 
     dispatcher.addMapping("/"); 

    } 
} 

Cấu hình lớp:

package com.test.webapp.config; 

import org.springframework.context.annotation.ComponentScan; 
import org.springframework.context.annotation.Configuration; 

@Configuration 
@ComponentScan(basePackages = {"com.test.webapp.controller"}) 
public class AppConfig{ 
    // Nothing here. Once I start using the beans, I will put them here 
} 

Và, web.xml có không nhiều nó:

<!DOCTYPE web-app PUBLIC 
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
"http://java.sun.com/dtd/web-app_2_3.dtd" > 

<web-app> 
    <display-name>Test Web App</display-name> 
</web-app> 

Không có gì khác ngoài dự án này. Tui bỏ lỡ điều gì vậy? Dự án cũ đã được thực hiện nhiều hơn một chút giống như đăng nhập các yêu cầu JSON đến vv (mà đã bị xóa bây giờ) đã được làm việc, nhưng tôi không có nó nữa: (Vì vậy, rất nhiều người mới blues. Xin hãy giúp tôi ở đây. Cảm ơn rất nhiều! !

cập nhật Issue được giải quyết. Đánh dấu vào câu trả lời

Trả lời

2

Vấn đề giải quyết. Tôi cảm thấy rằng đây là một Servlet container 3.0 vấn đề và có thể là một cái gì đó trong cấu hình Tomcat 7 của tôi là sai lầm. Nhưng, tôi đã làm một số thay đổi nhỏ để web.xml và nó hoạt động tốt bây giờ:

<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" 
    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_3_0.xsd" 
    metadata-complete="false"> 

    <display-name>Test Web App</display-name> 
</web-app> 

Rõ ràng, tôi phải nói rõ ràng Tomcat để quét cho việc triển khai của ServletContainerInitializer và không phải mọi thứ là trong web.xml qua siêu dữ liệu thuộc tính -complete = "false"

+1

Xóa DOCTYPE, nó không hợp lệ - bạn đang nói ứng dụng đó là một ứng dụng phiên bản 2.3 và 3.0 của Servlet. – Pidster

+0

Tôi nhận ra ngay sau khi tôi đăng câu trả lời :-) Cảm ơn bạn đã bình luận. – user1323865

0

các bạn đã thử đi đến Tomcat Manager và nhìn thấy những gì đang triển khai? Nó sẽ hiển thị một danh sách các ứng dụng được triển khai. tôi đang nghĩ đến con đường đã thay đổi

+0

Tôi đã làm điều này rồi và tôi thấy/test-webapp được liệt kê ở đó. http: // myhost: myport/test-webapp/hiển thị tệp index.jsp mặc định, nhưng http: // myhost: myport/test-webapp/myrestservice kết quả trong "Không tìm thấy tài nguyên được yêu cầu (/ test-webapp/myrestservice) "lỗi trên Tomcat7. – user1323865

2

Bạn đang sử dụng phiên bản Tomcat nào trong môi trường sản xuất của mình? Có vẻ như bạn sẽ cần Tomcat 7 để có được đặc tả Servlet 3.0 khi cần thiết để hỗ trợ WebApplicationInitializer của bạn.

+0

Tôi đang ở trên Tomcat 7.0.17. Và có, trong phiên bản ứng dụng trước của tôi, tôi đã theo Spring3.0 và web.xml có các mục cấu hình bootstrapping. Nhưng, theo như tôi đã hiểu, với Spring 3.1, tôi không cần phải thực hiện cấu hình này trong web.xml - nó phải tìm thấy WebApplicationInitializer. Tôi chỉ nhớ làm thế nào web.xml của tôi đã được trước đó, và chuyển sang làm cho ứng dụng này làm việc. Nhưng với Spring 3.1, không phải là nó phải làm việc mà không có quá nhiều cấu hình trong web.xml? Cảm ơn! – user1323865

+0

Cảm ơn Joel, tôi đã sử dụng gợi ý đặc tả Servlet3.0 của bạn và tìm ra cách để làm việc. – user1323865

0

Vì bạn là người mới đến mùa xuân tôi muốn khuyên bạn hãy xem câu trả lời trước của tôi:

The requested resource (/) is not available

+0

Cảm ơn bạn.Tôi đã va vào câu trả lời của bạn trong khi tìm kiếm stackoverflow cho một câu trả lời cho probs của tôi. Trong khi tôi thêm Spring IDE từ thị trường nhật thực, tôi vẫn không thể giải quyết được vấn đề của mình. – user1323865

Các vấn đề liên quan