Triển khai ứng dụng Spring MVC trên Oracle WebLogic Server
Công ty Vĩnh Cửu tuyển dụng lập trình viên Java

1- Mục tiêu của tài liệu

Trong tài liệu này tôi sẽ hướng dẫn bạn triển khai một ứng dụng Spring MVC trên Oracle WebLogic Server. Tài liệu được viết dựa trên:
  • Spring MVC 4.x

  • Oracle WebLogic Server 12c (12.2.1.1.0).

Đảm bảo rằng bạn đã cài đặt WebLogic Server, nếu chưa cài bạn có thể xem hướng dẫn tại:
Trong tài liệu này tôi sẽ đóng gói một ứng dụng Spring MVC, được viết trên Eclipse và triển khai nó trên WebLogic Server.

Chú ý rằng nếu bạn triển khai Spring MVC lên các server khác như Tomcat, Glassfish bạn không cần phải thay đổi gì trên Source code của bạn. Tuy nhiên nếu triển khai trên WebLogic bạn cần thêm một số file cấu hình vào source code trước khi đóng gói.
Tôi sẽ triển khai ứng dụng "Hello World Spring MVC" lên WebLogic. Ứng dụng này bạn có thể xem tại:
Hoặc download Source Code:

2- Thêm các cấu hình vào Project

Đây là hình ảnh của Project sau khi hoàn thành:
Thêm weblogic.xml vào WEB-INF. Trong file weblogic.xml bạn cần phải cấu hình contextPath (context-root) cho ứng dụng. Ở đây tôi đặt là /springmvc. Bạn có thể đặt là / nếu muốn sử dụng contextPath rỗng.
/WEB-INF/weblogic.xml
<?xml version='1.0' encoding='UTF-8'?>
<weblogic-web-app>
    <context-root>/springmvc</context-root>
    <container-descriptor>
        <show-archived-real-path-enabled>true</show-archived-real-path-enabled>
    </container-descriptor>
</weblogic-web-app>

3- Đóng gói ứng dụng

Maven Clean:
Maven Install:
File war đã được tạo ra trong thư mục 'target' của project.

4- Triển khai trên Weblogic

Chú ý: Nếu bạn gặp lỗi tại một trong các bước triển khai, hãy xem phụ lục ở phía cuối tài liệu.
Ứng dụng của bạn đã được triển khai nên WebLogic, và nó đang có trạng thái "prepared" (Đã được chuẩn bị). Bạn cần phải làm thêm một bước nữa là kích hoạt nó.
Mở khóa lại để thay đổi:
Start ứng dụng:
Ứng dụng của bạn đã được kích hoạt thành công.

Test ứng dụng:

5- Gỡ bỏ triển khai

Trường hợp bạn muốn triển khai lại, hoặc gỡ bỏ triển khai (undeloy) trước tiên bạn cần phải stop ứng dụng.

6- Một số lỗi khi triển khai

Nếu trong khi triển khai trên WebLogic bạn nhận được lỗi như dưới đây:
java.io.FileNotFoundException:
Could not open ServletContext resource [/WEB-INF/SpringDispatcher-servlet.xml]
Nguyên nhân lỗi là project Spring MVC của bạn sử dụng Annotation để cấu hình (Không sử dụng XML), nhưng ứng dụng vẫn đọc cấu hình từ file XML ( SpringDispatcher-servlet.xml), file này không tồn tại trên Project của bạn.

Bạn cần cấu hình trên SpringWebAppInitializer để đảm bảo chắc chắn ứng dụng sẽ không tìm đọc các file XML nói trên.
// Add code:

dispatcher.setInitParameter("contextClass", appContext.getClass().getName());

servletContext.addListener(new ContextLoaderListener(appContext));
Xem code đầy đủ:
SpringWebAppInitializer.java
package org.o7planning.hellospringmvc.config;

import javax.servlet.FilterRegistration;
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.filter.CharacterEncodingFilter;
import org.springframework.web.servlet.DispatcherServlet;

public class SpringWebAppInitializer implements WebApplicationInitializer {

    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        AnnotationConfigWebApplicationContext appContext = new AnnotationConfigWebApplicationContext();
        appContext.register(ApplicationContextConfig.class);

        // Dispatcher Servlet
        ServletRegistration.Dynamic dispatcher = servletContext.addServlet("SpringDispatcher",
                new DispatcherServlet(appContext));
        dispatcher.setLoadOnStartup(1);
        dispatcher.addMapping("/");

        // IMPORTANT!!
        dispatcher.setInitParameter("contextClass", appContext.getClass().getName());

        // IMPORTANT!!
        servletContext.addListener(new ContextLoaderListener(appContext));

        // UTF8 Charactor Filter.
        FilterRegistration.Dynamic fr = servletContext.addFilter("encodingFilter", CharacterEncodingFilter.class);

        fr.setInitParameter("encoding", "UTF-8");
        fr.setInitParameter("forceEncoding", "true");
        fr.addMappingForUrlPatterns(null, true, "/*");
    }

        // .........

}