form action url 상대경로 적용 안 되는 문제

상대 경로 지정하기

<!-- 상대경로 사용, [현재 URL이 속한 계층 경로 + /save] -->
<form action="save" method="post">
  username: <input type="text" name="username" />
  age:      <input type="text" name="age" />
  <button type="submit">전송</button>
</form>

김영한 스프링 mvc1편에서, form action url에 절대 경로를 지정하지 않고, 상대경로로 적용하는 게 뷰 파일에 넣기에 굉장히 합리적으로 보여서 내 프로젝트에도 적용하고 싶었는데, 생각처럼 되지 않았다.

<form method="post" action="join">
    <legend>회원가입</legend>
    <input type="text" name="username"/>
    <input type="password" name="password"/>
    <input type="submit" value="회원가입">
</form>

/join으로 이동해버리는 문제가 있었다. 왜 그럴까 생각하고 있었는데, 현재 내 사이트의 url에 문제가 있었다.

현재 내 사이트 구조: /site 에서 이 form을 보여줌.

김영한 강의내 구조: /front-controller/members/new-form 에서 form을 보여줌.

따라서, 마지막 경로를 지우고 보여주는 특성상, /join으로 경로가 설정되는 것이었다. 상대 경로를 하고 싶었다면, 멤버 계층을 설정헤서 /site/members/join-form 이런 식으로 지정해서 /site/members/join 이런 식으로 이동하도록 해야 한다.

해결 방법

그렇다고 사이트가 form을 보여주는 구조를 변경하기까지 하기는 애매한 상황이라서, 아래와 같이 절충하여 상대 경로를 지정했다.

<form method="post" action="site/join">
    <legend>회원가입</legend>
    <input type="text" name="username"/>
    <input type="password" name="password"/>
    <input type="submit" value="회원가입">
</form>

이렇게 지정하면, 경로를 한 단계 지우고도 ( “/” ) 다시 site/join을 붙이므로, 결국 ( “/site/join” ) 이 붙는다.

댓글

개발자  김철준

백엔드 개발자 김철준의 블로그입니다.

주요 프로젝트