링크(link)는 초록색 걔..가 아니고 미리 정해 놓은 요청을 간편히 전송하는 기능으로, 보통 페이지 이동을 위해서 사용한다. HTML의 a태그 또는 form태그로 작성하며, 클라이언트가 링크를 통해 어느 페이지로 이동하겠다고 요청하면 서버는 결과 페이지를 응답한다.
그런데 어떤 경우에는 서버에서 결과 페이지를 응답하지 않고 재요청하라는 회신을 보내기도 한다. 리다이렉트(redirect)가 바로 이런 경우를 말한다. 클라이언트가 보낸 요청을 마친 후 계속해서 처리할 다음 요청 주소를 재지시하는 것이다. 이를 통해 분리된 기능을 하나의 연속적인 흐름으로 연결할 수 있다. 리다이렉트를 지시받은 클라이언트는 해당 주소로 다시 요청을 보내고 서버는 이에 대한 결과를 응답한다.
new.mustache에 submit 버튼 아래에 a 태그를 넣어준다.
<button type="submit" class="btn btn-primary">Submit</button>
<a href="/articles">Back</a> // 돌아가기 링크 추가
a 태그에 넘어갈 주소를 넣을 때는 href의 속성값에 넣어주면 된다.

이제 Submit 버튼 옆 Back 버튼을 누르면 /articles 페이지로 넘어가게 된다.
그리고 지금껏 Submit버튼을 누르면 DB에 저장은 잘 되었지만, 페이지가 에러페이지가 떴다.

이 때 사용하는 게 리다이렉트이다.
이번엔 ArticleController 클래스로 가서
@PostMapping("/articles/create")
public String createArticle(ArticleForm form) {
log.info(form.toString());
Article article = form.toEntity();
log.info(article.toString());
Article saved = articleRepository.save(article);
log.info(saved.toString());
return "redirect:/articles/" + saved.getId();
}
createArticle() 메서드의 return값에 redirect: + URL주소를 넣어준다.
여기선 saved.getId()로 작성한 글의 id 값을 받아와 해당 작성글로 넘어가게 했다.
그리고 Article 클래스로 가서 롬복 어노테이션 @Getter를 추가해준다. 이렇게 해야 saved.getId()를 통해 saved의 id를 게터로 가져올 수 있게 된다.
롬복을 사용하지 않는다면, 아래 getter코드를 추가해도 된다.
public Long getId() {
return id;
}
이렇게 하면 새로운 글을 작성하면 해당 작성글로 넘어가게 된다.
이제 나머지도 링크를 만들어 준다.
show.mustache 파일의 테이블 아래에
<a href="/articles">Go to Article List</a>
이렇게 목록으로 돌아가는 링크를 넣어주고
목록페이지인 index.mustache 파일에는
{{#articleList}}
<tr>
<th>{{id}}</th>
<td><a href="/articles/{{id}}">{{title}}</a></td>
<td>{{content}}</td>
</tr>
{{/articleList}}
제목 부분에 a 태그로 해당 게시글로 넘어갈 수 있는 링크를 달아주었다.