복붙노트

[SPRING] Spring-Jersey : 정적 컨텐츠를 반환하는 방법?

SPRING

Spring-Jersey : 정적 컨텐츠를 반환하는 방법?

의문 :

문제 :

프로젝트 완료> Github 프로젝트

종속성> 완벽한 POM 파일

<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>2.15</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.ext</groupId>
<artifactId>jersey-spring3</artifactId>
<version>2.15</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>3.2.3.RELEASE</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1</version>
<exclusions>
<exclusion>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</exclusion>
</exclusions>
</dependency>

Web.hml> Web.hml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<servlet>
<servlet-name>Jersey</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.component.ResourceRegister</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>

컨트롤러> SpringController.java

@Path("/")
@Component
public class SpringController {

@GET
@Produces(MediaType.TEXT_HTML)
public ?? getIndex() {

    //How do I return my index page??
    return ??
 }
}

해결법

  1. ==============================

    1.jersey.config.servlet.filter.staticContentRegex 등록 정보가 작동해야하지만, 제공하려는 모든 유형의 파일에 대해 가능한 모든 패턴을 지정해야합니다. 쉬운 방법은이 답변에서 지적한대로 jersey.config.servlet.filter.forwardOn404 속성을 사용하는 것입니다. 그리고 두 선택 모두에서 예, Jersey를 서블릿이 아닌 필터로 구성해야합니다. 따라서 web.xml은 다음과 같이 보일 것입니다.

    jersey.config.servlet.filter.staticContentRegex 등록 정보가 작동해야하지만, 제공하려는 모든 유형의 파일에 대해 가능한 모든 패턴을 지정해야합니다. 쉬운 방법은이 답변에서 지적한대로 jersey.config.servlet.filter.forwardOn404 속성을 사용하는 것입니다. 그리고 두 선택 모두에서 예, Jersey를 서블릿이 아닌 필터로 구성해야합니다. 따라서 web.xml은 다음과 같이 보일 것입니다.

    <filter>
        <filter-name>Jersey</filter-name>
        <filter-class>org.glassfish.jersey.servlet.ServletContainer</filter-class>
        <init-param>
            <param-name>javax.ws.rs.Application</param-name>
            <param-value>com.component.ResourceRegister</param-value>
        </init-param>
        <!-- pass to next filter if Jersey/App returns 404 -->
        <init-param>
            <param-name>jersey.config.servlet.filter.forwardOn404</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    
    <filter-mapping>
        <url-pattern>/*</url-pattern>
        <filter-name>Jersey</filter-name>
    </filter-mapping>
    

    맨 먼저 필요한 것은 jsp mvc 종속성입니다.

    <dependency>
        <groupId>org.glassfish.jersey.ext</groupId>
        <artifactId>jersey-mvc-jsp</artifactId>
        <version>2.25</version>
    </dependency>
    

    그런 다음 해당 기능을 등록해야합니다.

    public ResourceRegister () {
        ...
        register(JspMvcFeature.class);
    }
    

    그런 다음 모든 JSP 페이지의 템플리트 기본 경로를 지정해야합니다. 예를 들어 나는 / WEB-INF / jsp를 사용했다.

    public ResourceRegister () {
        ...
        property(JspMvcFeature.TEMPLATE_BASE_PATH, "/WEB-INF/jsp");
    }
    

    따라서이 경우 모든 JSP 파일은 / WEB-INF / jsp 디렉토리에 있어야합니다.

    예제 JSP 및 컨트롤러

    index.jsp

    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
            <title>JSP Page</title>
            <link href="css/styles.css" rel="stylesheet">
        </head>
        <body>
            <h1>${it.hello} ${it.world}</h1>
        </body>
    </html>
    

    제어 장치

    @Path("/")
    public class HomeController {
    
        @GET
        @Produces(MediaType.TEXT_HTML)
        public Viewable index() {
            Map<String, String> model = new HashMap<>();
            model.put("hello", "Hello");
            model.put("world", "World");
            return new Viewable("/index", model);
        }
    }
    
    public ResourceRegister () {
        ...
        register(HomeController.class);
    }
    

    여기서 Viewable의 / index는 index.jsp를 가리 킵니다 (우리는 .jsp 확장자가 필요하지 않습니다). Jersey는 위에서 설정 한 속성에서 파일을 찾는 방법을 알고 있습니다.

    참조 :

  2. from https://stackoverflow.com/questions/31883928/spring-jersey-how-to-return-static-content by cc-by-sa and MIT license