문제

데이터베이스에 저장된 여러 값 중 하나를 보여줄 수있는 단일 페이지가있는 struts2 응용 프로그램이 있습니다. 신청서는 많은 부서가있는 학교를위한 것이며 각 부서에는 많은 프로그램이 있습니다. 부서 페이지는 이와 같은 URL을 사용하여 액세스합니다.

department.action?id=2

부서는 디스플레이를 위해 ID = 2로 부서에로드합니다. 사용자가 사이트 주변을 탐색하는 경우이 모든 것이 좋습니다. 그러나 신문의 엔지니어링 부서를 말할 수있는 링크를 제공하려면 불편합니다. 링크는 www.myschooldomain.com/department.action?id=2 여야합니다. 나는 이것에 대해 많은 문제를 본다.

첫째, 사용자 친화적이지 않습니다. 둘째, 부서가 동적으로 유지 관리되고 부서의 ID가 링크를 불안정하게 만드는 경고없이 변경 될 수 있기 때문에 파손되기 쉽습니다.

www.myschooldomain.com/department/engineering과 같은 URL을 인쇄하는 것이 좋습니다.

지금까지 내 생각 : 마지막에 부서 이름의 URL을 구문 분석하고 이름으로 찾아 보는 조치를 만듭니다. 어쩌면 각 부서의 데이터베이스에 친절한 필드를 추가 할 수 있습니다.

그러나 문제는 Struts2에서 이것을하는 더 좋은 방법이 있습니까?

감사.

업데이트 (2009 년 5 월) : 나는 방금이 질문에 걸려 넘어졌고 그것을 해결하기 위해 내가 한 일을 말할 것이라고 생각했다.

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

액션 클래스에서 나는 단순히 URL을 구문 분석하고 부서/와 .html 사이의 부분을 찾아 부서의 이름으로 데이터베이스에서 조회 할 수 있습니다. 이것은 거의 5 개월 동안 잘 작동했으며 사이트의 다른 영역에서 구현했습니다.

도움이 되었습니까?

해결책

이것은 일반적으로 서블릿을 '/부서'에 매핑 한 다음 사용하여 수행됩니다. Servlet 내에서 정보 (예 : '/Engineering')를 결정하여 ID를 결정합니다.

Struts2 디스패처는이 동작을 구현하지 않기 때문에 자신의 서블릿을 작성하는 것이 가장 간단 할 수 있습니다. 이 서블릿은 비우호적 인 숫자 식별자에게 유효한 "친숙한"이름의 맵으로 구성됩니다. 이것은 실제 일 수 있습니다 Map 또는 데이터베이스 파인더 방법으로 수행 할 수 있습니다.

결과 getPathInfo() 신분증을 찾는 데 사용되며 요청은 전달 부서에. 처리 null 케이스도, 사용자가 찾아보기 위해 /departments/ 예배 규칙서.

다른 팁

당신은 사용할 수 있습니다 URL 재 작성 필터

이렇게하면 추가 서블릿 또는 Java 코드가 필요하지 않지만 XML 디스크립터가 필요합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top