2008-10-22 2 views
0

데이터베이스에 저장된 여러 값 중 하나를 표시하는 단일 페이지가있는 struts2 응용 프로그램이 있습니다. 신청서는 많은 부서가있는 학교를위한 것이며 각 부서는 많은 프로그램을 가지고 있습니다. 부서 페이지는이struts2에서 동적 리소스에 친숙한 URL 만들기

department.action?id=2 

같은 URL을 사용하여 액세스하고 DepartmentAction 디스플레이에 대한 ID = 2학과를로드합니다. 사용자가 사이트를 둘러보고 있으면이 모든 것이 가능하지만 신문의 엔지니어링 부서에 대한 링크를 제공하려는 경우 불편합니다. 링크는 www.myschooldomain.com/department.action?id=2이어야합니다. 이 문제는 여러 가지가 있습니다.

먼저 사용자 친화적이지 않습니다. 둘째, 부서가 동적으로 유지되고 부서의 ID가 경고없이 링크가 불안정해질 수 있기 때문에 부서지기 쉽습니다.

www.myschooldomain.com/department/engineering과 같은 URL을 인쇄하여 어떻게 든 department.action? id = 2로 이동하는 것이 좋습니다.

지금까지의 생각 : 끝에있는 부서 이름의 URL을 구문 분석 한 다음 이름별로 검색하는 작업을 작성하십시오. 어쩌면 각 부서의 데이터베이스에 friendlyurl 필드를 추가 할 수 있습니다.

그러나 질문은 : struts2에서 더 나은 방법이 있습니까?

감사합니다.

업데이트 (2009 년 5 월) : 나는이 문제에 대해 비틀 거리며 우연히 만났습니다.

부서라고하는 struts.xml에 새 패키지를 만들었습니다. 이 패키지에는 *에 매핑 된 작업이 하나만 있습니다. 따라서 mydomain.com/departments/anything.html에 대한 모든 요청을 포착합니다.

조치 클래스에서 나는 단순히 URL을 구문 분석하고 departments /와 .html 사이의 부분을 찾는다. 그리고 그 이름은 부서명이므로 데이터베이스에서 조회를 수행 할 수있다. 이것은 거의 5 개월 동안 정상적으로 작동했으며 사이트의 다른 영역에 대해이를 구현했습니다.

답변

1

일반적으로 서블릿을 '/ department'에 매핑 한 다음 서블릿 내에서 path 정보 (예 : '/ engineering')를 사용하여 ID를 결정하면됩니다.

Struts2 디스패처는이 동작을 구현하지 않으므로 자신의 서블릿을 작성하는 것이 가장 간단 할 수 있습니다. 이 서블릿은 유효하지 않은 숫자 식별자에 유효한 "친숙한"이름의 맵으로 구성됩니다. 이것은 실제 Map 일 수 있거나 데이터베이스 찾기 메소드로 수행 될 수 있습니다.

getPathInfo()의 결과는 ID를 조회하는 데 사용되며 요청은 department.action에 forwarded이됩니다. null 케이스도 처리하십시오. 즉, 사용자가 /departments/ 디렉토리를 탐색하려고합니다.

3

당신이 어떤 추가 서블릿 또는 Java 코드에 대한 필요성을 피할 수 있지만, XML 기술자를 필요로하는 URL Rewrite filter

를 사용할 수 있습니다.

+0

나는이 오래된 스레드를 부활 시키려고하지 않았다. 나는 새로운 대답을 보았다고 생각했다. – Pool