1. 처음 xml 설정을 잡아주자.
[web.xml]
1 2 3 4 5 | <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>*.do</url-pattern> <url-pattern>/game/*</url-pattern> </servlet-mapping> | cs |
.do == 확장자 명으로 찾아가는 서블릿 url 패턴
/xxxx/* == 디렉토리명으로 찾아가는 서블릿 url패턴
2-1
실행하려는 url경로를
1 | <a href="game/game/users/박세영/characters/7777">@PathVariable 예제</a> | cs |
같이 잡아준다.
game을 한번 더 잡아준 이유는,
확장자명으로 찾아가는 .do는 상관이없지만 ,디렉토리명으로 찾아갈때에는
/game인부분인 Servlet 경로를 제외한 나머지 경로를 이용해서
@RequestMapping Annotation의 값과 매칭 여부를 판단하게 되므로,
실제 비교할 때 사용되는 요청 URI은
1 | <a href=" | cs |
이렇게 된다.
2-2
또다른 방법으로는
dispatcher-servlet.xml에서
1 2 3 4 5 6 7 8 | <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"> <property name="alwaysUseFullPath" value="true" /> </bean> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <property name="alwaysUseFullPath" value="true" /> </bean> | cs |
라고 경로를 잡아주고,
1 | <a href="game/users/박세영/characters/7777">@PathVariable 예제</a> | cs |
라고 요청을하면, 서블릿경로를 지우지않고 그대로 인식하게 만들 수 있다.
실제로 위의 useFullPath를 적용하면 노란색 줄이 그어지는데 신경쓰지말도록하자.
사용자가 편한 방식대로 사용하면 될 것이다.
[CharacterInfoController.java]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | package spring.controller; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; @Controller @RequestMapping("/game/users/{id}") public class CharacterInfoController { //game/users/su/characters/1234 @RequestMapping("/characters/{characterId}") public String characterInfo(@PathVariable("id") String userId, @PathVariable int characterId, ModelMap model) { // {""} 와 변수 "" 가 이름이 다르면 @PathVariable("") 로 지정할 수 있다. // PathVariable의 이름을 임의로 저장한 것은, RequestMapping에서만 쓸 수 있고, model.addAttribute("userId", userId); model.addAttribute("characterId", characterId); // 실제로 jsp에서 뽑아내는 데이터는 add로 정한 key값으로 뽑아야 함을 헷갈리지 말고 기억하자. return "character/info"; } } | cs |
실제로 위에 url경로에서 보낼 데이터를 적은 '위치부분'을
@RequestMapping("") 으로 받을때에 같은 '위치부분' 에서 { } 로 꺼낼 수 있다.
꺼냄과 동시에 @PathVariable() 뒤에 선언한 변수에 저장도 동시에 할 수 있다.
지정한 변수 userId와 {userId} 로 일치 한다면 따로 이름을 지정해줄 필요는 없지만
다른 이름으로 사용하고 싶다면, 위와같이 @PathVariable("id") == {id} 로 사용할 수 있음을 기억하자.
{id] 에 들어온 값이 바로 뒤에 선언한 변수 String userId에 저장되는 것이다.
그렇게 return에서 view페이지인 charater/info.jsp 페이지로 가게되면
1 | ${userId} 회원의 ${characterId} 캐릭터 정보 출력 | cs |
변수에 저장한 값을 model에 model.addAttribute로 저장한 String값으로 value값을 꺼낼 수 있게 됩니다.
'JAVA > Spring' 카테고리의 다른 글
Spring MVC - ajax + responseBody (0) | 2018.09.17 |
---|---|
Spring MVC - BindingResult 사용법 (0) | 2018.09.13 |
@ModelAttribute 추가 공부내용. (0) | 2018.09.12 |
Spring - @ModelAttribute + @Controller (0) | 2018.09.12 |
web.xml 전체경로(.do)와 Servlet기반 경로 매칭 설정(/폴더) (0) | 2018.09.12 |