2011-01-27 5 views
2

Twitter 응용 프로그램과 같은 URL 패턴/체계를 내 응용 프로그램에 만들 수있는 방법을 만들고 있습니다. 예 : myapplication.com/username 여기서 사용자 이름은 매개 변수로 처리되는 실제 사용자 이름입니다. 이 매개 변수는 사용자 관련 페이지를 표시하는 데 사용됩니다. 내 애플리케이션에는 사용자 이름이 다른 리소스의 접두사 인 URL 체계도 있습니다. myapplication.com/username/accountsettings 또는 myapplication.com/username/profile. 사용자 이름은 일종의 하위 컨텍스트 경로 역할을합니다.요청 매개 변수로 URL 접두사를 줄입니다.

제목에서 알 수 있듯이 줄무늬를 사용하고 있습니다. 내가 지금하고있는 일은 커스텀 ActionResolver를 만드는 것이다. 여기서 ActionBeans는 URL 앞에 붙은 사용자 이름을 고려하지 않기 때문에 URL 바인딩 (이 경우 사용자 이름)에서 첫 번째 비어 있지 않은 문자열을 꺼낸다. 예를 들어 myapplication.com/username/accountsettings를 처리하는 액션 빈은/accountsettings에만 바인딩됩니다.

Stripes 필터에 대해 ActionResolver.Class init param으로 사용자 지정 ActionResolver를 사용하려고 시도했지만 작동하지 않는 것 같습니다. 그것은 여전히 ​​기본 ActionResolver를 사용하고있는 것 같습니다. 어떻게 변경합니까?

또한 더 쉽고/더 직관적 인 방법이 있습니까? Stripes와 URL 바인딩에 익숙하지 않아 Stripes에 프레임 워크 구성 요소를 확장/변경하지 않고이 작업을 수행 할 수있는 기능이 있습니까?

감사합니다.

+0

, 나는 그것이 자바하지만 자바로 태그하지 않은 생각합니다. 아주 쉽게 해결할 수있는 URL 재 작성 솔루션이있을 수 있습니다. 대부분의 사이트에서 사용하는 것이지만 사용자 플랫폼에 대한 정보가 더 필요합니다. –

+0

예, Stripes 프레임 워크를 사용하여 Java로 작성되었습니다. 지금 Tomcat으로 테스트하고 있습니다. –

답변

0

나는 URL Rewrite Filter을 만났고 지금까지 내 응용 프로그램의 요구 사항에 적합하다고 생각됩니다.

+0

예. 그것은 옳은 선택입니다. – Nishant

+1

Stripes를 사용할 때 URL 재 작성 필터가 필요하지 않습니다! 내 대답을 보라. – Kdeveloper

0

줄무늬에는 이것이 내장되어 있습니다. @URLBinding 주석이라고하며 줄무늬 1.5에 포함되었습니다. 일부 문서 here이 있으며, Stripes book IIRC에 더 많은 내용이 있습니다.

@UrlBinding는 ("/ foo는/{줄}/{바즈}")는 조치를 "/ foo는"지도하고 "바"와 "바즈"매개 변수 가 내장 될 수 있음을 표시 URL에 이 의 경우 URL/foo/abc/123은 "abc"및 baz가 "123"으로 설정된 막대를 사용하여 작업을 호출합니다.

+0

전에 본 적이 있지만 아직 시도하지 않았습니다. 이는 URL 다시 쓰기 필터에서 유용 할 수 있습니다. –

+0

URL 재 작성 필터가 더 이상 필요하지 않습니다! – Kdeveloper

+0

방금 ​​테스트 해본 결과 작동합니다. 이 응용 프로그램을 URL을 처리 할 수있는 기본 수단으로 사용할 수 있지만 여전히 @UrlBinding 직접 처리 할 수없는 다른 것들 URL 재 작성 필터를 사용하고 있습니다. –

1

나는 lucas에 동의하며, URL 매핑은 UrlBinding annotation으로 수행되어야합니다. URL 재 매핑 필터로 엉망으로 시작할 필요가 없습니다. 스트라이프 시스템이 올바른 URL을 생성하기 만하면됩니다.

이 그것을 같이하는 방법입니다 : 당신이 사용하는 어떤 웹 서버 및 언어

@UrlBinding("{username}/profile/") 
public class MyProfileAction implements ActionBean { 
    private ActionBeanContext context; 
    private String username; 

    public ActionBeanContext getContext() { 
     return context; 
    } 

    public void setContext(ActionBeanContext context) { 
     this.context = context; 
    } 

    public void setUsername(String username) { 
     this.name = name; 
    } 

    public String getUsername() { 
     return username; 
    } 

    @DefaultHandler 
    public Resolution view() { 
     return new ForwardResolution(“/WEB-INF/MyProfile.jsp”); 
    } 
} 
+0

다른 의견으로 말씀 드렸듯이 이미 시도해 보았습니다. 하지만 이제 Stripes의 URL 바인딩에 문제가 있습니다. 나는/{username}/home과/{username}/account/logout에 바인드 된 액션 빈을 가지고있다. 변경 사항을로드하고/myuser/home에 액세스하려고하면 Stripes는 URL이 여러 액션 빈에 바인딩되어 있다고 말합니다. 나는 왜 그런지 이해하지 못한다. –

+0

기본 ActionResolver.Class를 덮어 쓰지 않는 한 매핑 된 각 URL은 고유해야합니다. 따라서 프로젝트에서이 둘보다 ActionBeans가 더 많을 수 있습니까? – Kdeveloper

+0

글쎄,/{username}/home과/{username}/account/logout이 서로 다르다고 생각합니다. 애플리케이션에 더 많은 액션빈이 있지만,이 두 가지만이 URL 바인딩 스키마를 사용하여 수정되었습니다. 내 검색 결과에 따르면 Stripes URL 바인딩에 이러한 URL에 문제가있는 것으로 보입니다. 매개 변수가 URL 끝 부분에 있지만 처음 부분에있을 때는 잘 작동하지 않습니다. –

관련 문제