2015-02-06 8 views
0

나는 자바 초보자 다. & restlet. Eclipse LUNA Java SE를 사용하고 있습니다. 웹 응용 프로그램에서 html/css/xml/bootstrap 등을 사용하려고합니다. 저는 주위를 둘러 보았고 찾을 수있는 모든 예제는 Java EE를 기반으로합니다. 그래서 html (파일)/css/xml/bootstrap/json 등을 사용하려면 Java SE 대신 Java EE를 사용해야한다고 생각합니다. 내 웹 서비스에서보다 풍부한 컨텍스트를 포함하고 싶습니다. 나는 자신의 홈페이지에서 Restlet 사용자 가이드/자습서를 읽었고, Restlet in Action 책을 읽었습니다. 그러나 나는 나 자신을 찾을 수 없다. 어쩌면 그 자료들에 답이있을 수도 있지만 그것을 알아 내지 못했을 것입니다. 그래서, 자바 SE restlet에서, 당분간은, 내 자바 코드에서 html로 하드 코딩을하고있다. ... 하지만 그 정도면 충분하지 않다.Restlet Java SE에서 xml/css/json을 사용할 수 있습니까?

이것은 다른 사람들에게 매우 기본적인 것입니다. 그러나 이것은 또한 초보자에게 혼란 스러울 수 있음을 이해하십시오. 예제가 도움이 될 것입니다. 고마워.

답변

2

걱정하지 마세요. 바보 같은 질문은 없습니다 .-)

확실히, Restyle은 서버 측만 JavaSE와 함께 사용할 수 있습니다. 독립형 Java 응용 프로그램 내에서 Restlet 서버를 정의 할 수 있습니다. 이 작업은 Component 클래스를 사용하여 수행 할 수 있습니다. 인스턴스를 생성 한 후에 서버를 추가 할 수 있습니다. 아래에 설명 된대로

public static void main(String[] args) { 
    Component component = new Component(); 
    component.getServers().add(Protocol.HTTP, 8080); 
    (...) 
    component.start(); 
} 

구성 요소를 시작하기 전에, 당신은 그것에 당신으로 Restlet 응용 프로그램을 첨부 할 수 있습니다 : 코드를 다음은이 설명

component.getDefaultHost().attach(new SampleApplication()); 

Restlet 프레임 응용 프로그램이 클래스 Application를 확장 클래스를 à에 해당합니다. 다음 단계는 createInboundRoot 메서드를 재정의하는 것입니다. 이 메소드는 애플리케이션의 REST 라우트를 정의합니다. 으로 Restlet 응용 프로그램의 skelekon 코드를 설명합니다 다음은

public class SampleApplication extends Application { 
    @Override 
    public Restlet createInboundRoot() { 
     Router router = new Router(getContext()); 

     router.attach("/myresource", MyServerResource.class); 

     (...) 

     return router; 
    } 
} 

정적 파일 (JS, CSS, ...)를 제공하기 위해 원하기 때문에

, 당신은 클래스 Directory을 활용할 수 있습니다. 루트 폴더 내의 모든 폴더 및 파일을 경로에 자동 및 재귀 적으로 첨부 할 수 있습니다. 다음과 같이 구성 할 수 있습니다.

String rootUri = "file:///(...)/static-content"; 
Directory directory = new Directory(getContext(), rootUri); 
directory.setListingAllowed(true); 
router.attach("/static/", directory); 

이제 서버 리소스에 집중하겠습니다. 우리는 당신의 사건에 대한 두 종류를 구별 할 수 있습니다 자신의 주석 방법 wwith으로 POJO 구조화 된 데이터를 교환하고 사용

  • 사람 (Get, Post, ...) 표현을 직접 관리하거나으로 Restlet에 따라
  • 사람을 확장자

첫 번째 경우에는 answer을 stackoverflow에서 참조 할 수 있습니다.

두 번째 템플릿 엔진을 사용하여 클라이언트에 다시 보낼 콘텐츠를 생성 할 수 있습니다. 이것은 JavaEE의 JSP와 비슷한 것입니다. Freemarker 샘플 (http://freemarker.org/)과 해당 Restlet 확장 프로그램을 사용할 수 있습니다.아래에 설명 된대로

먼저 우리는 여기서 템플릿을 찾으려면 Restlet 프레임 응용 프로그램 내에서 프리 마커 엔진을 구성하는 데 주로 루트 디렉토리가 필요합니다

그런 다음에 같은 템플릿을 활용하는 프리 마커 표현을 만들 수 있습니다
public class SampleApplication extends Application { 
    (...) 
    private Configuration configuration; 

    public static Configuration configureFreeMarker(Context context) { 
     Configuration configuration = new Configuration(); 
     ClassTemplateLoader loader = new ClassTemplateLoader(
      SampleAppApplication.class, 
      "/org/myapp/sample/server/templates/"); 
     configuration.setTemplateLoader(loader); 
     // configuration.setCacheStorage(new StrongCacheStorage()); 
     return configuration; 
    } 

    public Configuration getConfiguration() { 
     return configuration; 
    } 
} 

후술하는 바와 같이, 출력 콘텐츠 (서버 측에서 생성 된 동적 컨텐츠)를 생성한다 : 여기서

private SampleApplication getSampleApplication() { 
    return (SampleApplication)getApplication(); 
} 

private Representation toRepresentation(Map<String, Object> map, 
    String templateName, MediaType mediaType) { 
    return new TemplateRepresentation(templateName, 
     getSampleApplication().getConfiguration(), map, mediaType); 
} 

@Get("html") 
public Representation getHtml() { 
    Map<String, Object> model = new HashMap<String, Object>(); 

    model.put("titre", "my title"); 
    model.put("users", getUsers()); 

    return toRepresentation(model, 
     "myTemplate", MediaType.TEXT_HTML); 
} 

템플릿 myTemplate의 내용이다.

<html> 
    <head> 
     <title>${title}</title> 
    </head> 
    <body> 
    Users:<br/><br/> 
    <ul> 
     <#list users as user> 
     <li>${user.lastName} ${user.firstName}</li> 
     </#list> 
    </ul> 
    </body> 
</html> 

희망이 있습니다. Thierry

+0

고마워요. 이 답변은 실제로 구조가 잘되어 있습니다. 구조가 필요했습니다. 좀 더 질문이 있습니다. 나는 다시 여기 쓸 수 있다는 것을 모른다. – user1915570

+0

당신을 진심으로 환영합니다! 귀하의 질문은이 하나의 관련이 있다면, 나는 우리가 여기에 의견을 갈 수 있다고 생각 ;-) 아니라면, stackoverflow에 대한 새로운 질문을 게시하고 언제든지 대답 해 드리겠습니다. –

+0

다시 한번 감사드립니다. 아직 freemarker를 시도하지 않았습니다. freemarker가 JavaEE의 JSP와 비슷한 방식으로 작동하는 경우 "JavaEE의 JSP와 비슷한 것"이라는 설명에 문장이 있습니다. 그런 다음 JSP/JavaEE를 사용하지 않는 것이 좋습니다. 정확히 JavaEE를 통해 JavaSE를 사용하면 얻을 수있는 이점은 무엇입니까? JavaSE를 사용하는 것처럼 보이기 때문에 JavaEE와 유사하게 작업해야합니다. 여분의 도구 사용, freemarker 같은 확장 기능. 내가 restlet 사용자 가이드를 [restlet 홈페이지] (http://restlet.com/technical-resources/restlet-framework/guide/2.3/editions/jee/overview)에서 보았습니다. 그들은 다음과 같이 설명했습니다 : – user1915570