특정 예외가 발생했을 때 특정 페이지로 이동 시킬 수 있습니다.

먼저 컨트롤러든 서비스 단이든 벨리데이션 할 때든 에러를 발생시킵니다. 예외 처리 할 것도 없기 때문에 RuntimeException이 좋겠네요.

    public void add(MemberInfo memberInfo) {
        if(memberInfo.getConfirmMember().equals("ajnapaqj")){
            String email = memberInfo.getEmail();
            if(memberInfoDao.findByEmail(email) == null)
                memberInfoDao.insert(memberInfo);
            else
                throw new AlreadyExistEmailException();
        }
        else
            throw new InvalidMemberCodeException();
    }

저는 서비스 단에 구현했습니다. 사실 고민이 됩니다. 이런 거는 벨리데이터에 넣어야 필드 값 검사할 때 같이 하면 좋을 것 같은데 아직 벨리데이터를 만들지 않았기 때문에 간단하게 서비스 단에 구현해 뒀습니다. 나중에 옮겨야 벨리데이터 만들고 옮겨야 겠습니다.

그리고 사용자 예외를 만들어 줍니다.

public class AlreadyExistEmailException extends RuntimeException {}
public class InvalidMemberCodeException extends RuntimeException {}

그리고 Spring의 ExceptionResolver를 등록해줍니다.

    <!-- Exception Resolver -->
    <bean id="exceptionMapping"
        class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
        <property name="exceptionMappings">
            <props>
                <prop key="InvalidMemberCodeException">
                    /exception/joinFailedByMemberCode
                </prop>
                <prop key="AlreadyExistEmailException">
                    /exception/joinFailedByExistingEmail
                </prop>
            </props>
        </property>
    </bean>

이런식으로 Exception과 view 이름을 매핑 시켜 주면 view 리졸버에 의해 view를 찾게 됩니다.