2015-01-22 33 views
11

Tôi đã thử nghiệm Spring Boot với Tomcat được nhúng trong khoảng một tháng nay để xây dựng một API REST. Mọi thứ đều hoạt động tốt. Bây giờ chúng ta muốn triển khai API trong một môi trường phát triển riêng biệt có một vài ứng dụng (không phải Spring) khác đang chạy trên một thùng chứa Tomcat.Khởi động mùa xuân Triển khai trong Tomcat cung cấp 404 nhưng hoạt động độc lập

Tôi đã thực hiện các thay đổi được chỉ định trong Converting a Spring Boot JAR Application to a WAR using MavenSpring Boot Docs.

Triển khai diễn ra suôn sẻ (nhật ký không sao, không có lỗi) và xem xét quản lý Tomcat tôi thấy ứng dụng của mình đã được triển khai. Tuy nhiên, khi tôi cố gắng truy cập http://localhost:8080/sophia/users trong curl, tôi nhận được 404.

Bất kỳ trợ giúp nào được đánh giá cao.

UPDATE:

Dưới đây là các bản ghi của tôi:

Netbeans:

NetBeans: Triển khai trên Apache Tomcat 8.0.17 chế độ hồ sơ: false chế độ debug: false lực redeploy: đúng

Triển khai tại chỗ tại /home/bugz/workspace/pdcore/sophiaserver/target/sophia-server-1.0.0-SNAP SHOT

triển khai đang tiến hành ...

triển khai config = Tập tin% 3A% 2Ftmp% 2Fcontext1845402702541504208.xml & path =/sophia

OK - Triển khai ứng dụng tại bối cảnh path/sophia

Bắt đầu đang tiến hành ...

bắt đầu path =/sophia

OK? - Bắt đầu ứng dụng tại CONTEX t path/sophia

Tomcat:

INFO 10: 47: 52: 703 org.springframework.boot.context.embedded.ServletRegistrationBean - Mapping servlet: 'DispatcherServlet' tới [/ sophia/* ]

INFO 10: 47: 54: 042 org.springframework.boot.SpringApplication - Bắt đầu ứng dụng trong 8,285 giây (JVM chạy cho 12087,301)

22-Jan-2015 10: 47: 54,060 INFO [http- nio-8080-exec-99] org.apache.catalina.startup.HostConfig.deployDescrip tor Triển khai bộ mô tả cấu hình /home/bugz/workspace/server/apache-tomcat-8.0.17/conf/Catalina/localhost/sophia.xml đã hoàn thành trong 12,091 ms

Và trong sophia.xml cho Catalina localhost:

<?xml version="1.0" encoding="UTF-8"?> 
<Context antiJARLocking="true" docBase="/home/bugz/workspace/pdcore/sophiaserver/target/sophia-server-1.0.0-SNAPSHOT" path="/sophia"/> 

tôi đã cố gắng truy cập vào

  1. http://localhost:8080/sophia/users
  2. http://localhost:8080/sophia-server-1.0.0-SNAPSHOT/users (tên của WAR)

Đầu tiên trả về 404 nhưng với thông tin CORS từ hạt lọc CORS của tôi. Sự trở lại thứ hai 404 mà không có thông tin CORS (cho biết ứng dụng đã khởi động và được cấu hình nhưng dường như tôi không có quyền truy cập vào Bộ điều khiển).

+0

Kiểm tra tệp nhật ký của bạn, bạn có chắc chắn rằng ứng dụng được triển khai tại URL cụ thể đó không ... –

+0

@M. Deinum, tôi đã thêm các bản ghi mà tôi đang nhận được. Bộ điều khiển được ánh xạ và dường như đang triển khai ngữ cảnh như mong đợi (/ sophia). – xelamitchell

+0

Ứng dụng của bạn được ánh xạ tới '/ sophia', bên cạnh' DispatcherServlet' của bạn được ánh xạ tới '/ sophia/*', làm cho URL gọi là '/ sophia/sophia/users'. Khi chạy dưới dạng jar, nó được triển khai khi ứng dụng gốc được ánh xạ tới '/' ... –

Trả lời

17

Khi chạy một ứng dụng, đường dẫn đến cuộc gọi bao gồm một vài phần.

Đầu tiên là URL cơ sở mà trên đó ứng dụng được triển khai, trong trường hợp của bạn là /sophia.

Thứ hai là ánh xạ servlet của DispatcherServlet trong trường hợp của bạn là /sohpia/*.

Thứ ba là ánh xạ của bộ điều khiển bên trong DispatcherServlet, trong ví dụ của bạn là /users.

Tất cả những thứ đó được kết hợp tạo URL /sophia/sophia/users.

Sự khác biệt giữa việc triển khai dưới dạng WAR là bạn đã bao gồm một URL riêng để triển khai, khi chạy dưới dạng jar, theo mặc định, được triển khai thành / (gốc).

Bạn có thể sửa chữa nó bằng cách đặt /sophia như server.context-path trong application.properties và lập bản đồ DispatcherServlet để /* hay /. Điều đó sẽ trong cả hai tình huống cung cấp cho bạn URL bạn muốn (và dự kiến).

4

kiểm tra java -version có nghĩa là nếu bạn tuân thủ chiến tranh trong java 8 và tomcat đang chạy trên java 7 thì nó không hoạt động.

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