Annotation(@)
오늘은 전반적인 어노테이션을 다루려고 한다.
Spring에서는 자주 사용하기 때문에 잘 알아야 한다.
어노테이션의 사전적 의미로는 '주석'이라는 뜻이다.
프로그램에 추가적을 정보를 제공하는 메타데이터 (meta data:데이터를 위한 데이터)라고 할 수 있다.
특히 어노테이션에도 종류가 여러가지가 있다. 일일이 코딩을 해주지 않아도 어노테이션의 종류에 따라 각각의 기능이 실행된다.
그럼 많은 어노테이션 중에서도 예제를 통해 몇가지를 알아보겠다.
@Controller
: 객체 생성 + 상속 + 컨트롤러의 기능
- 괄호 : 컨트롤러 어노테이션이 다른 곳에서도 중복으로 실행할 때 충돌할 수 있기 때문에 각각의 이름을 지정해준 것이다.
- 객체 생성 : 클래스명의 첫음절이 소문자로 바뀌면서 객체 생성이 되거나, 괄호 입력 시 괄호 속의 이름으로 객체 생성이 된다.
- 상속 : 자동으로 상속된다.
- 컨트롤러 : 다양한 컨트롤러 중 알맞은 컨트롤가 자동으로 선택된다
@RequestMapping
: 경로 지정 및 메소드 방식 설정
- 경로 지정 : 입력된 경로와 연결해준다. Controller 밑에 있으면 컨트롤러, 메소드 위에 있으면 메소드가 실행된다.
- 메소드 방식 : GET방식인지 POST방식인지 지정할 수 있다. 입력한 경로가 어떤 방식으로 와야 실행이 되는 지를 설정해준다.
위의 2개 어노테이션을 사용한 예제를 살펴보겠다.
TestCommand.java
예제에서 사용할 변수를 선언해줄 Command
public class TestCommand {
private String userId;
private String userName;
private String mode;
create.jsp
사용자에게 값을 입력받기 위해 출력할 페이지 파일
<body>
<form action="<%=cp%>/demo/write.action" method="post">
아이디:<input type="text" name="userId"/><br/>
이름:<input type="text" name="userName"/><br/>
<input type="submit" value="로그인"/>
</form>
</body>
submit을 누르면 post방식으로 action에 있는 경로로 넘어간다.
result.jsp
결과를 보여줄 페이지 파일
<body>
${message }
</body>
TestController.java
가장 핵심인 컨트롤러 파일.
Controller 파일은 분배기와 같은 기능이며 어노테이션을 적용해줄 것이다.
@Controller("anno.testController")
public class TestController {
@RequestMapping(value="/demo/write.action",method= {RequestMethod.GET})
public String write() throws Exception{
return "anno/create";
}
상단에 컨트롤러 어노테이션을 적용해주었으며 이름을 지정하였다.
또한 @RequestMapping 어노테이션을 통해 value 속 경로가 GET방식으로 오면 write메소드가 실행되는 것이다.
return에 있는 경로로 들어가게 하였다. 여기에 입력한 경로는 앞에 '/' 와 맨 뒤의 .jsp가 생략돼있으며 이는 밑의 다른 파일에서 다시 설명하겠다.
@RequestMapping(value="/demo/write.action",method= {RequestMethod.POST})
public String write_ok(TestCommand command, HttpServletRequest request) {
String message = "아이디: " + command.getUserId();
message += ", 이름: " + command.getUserName();
request.setAttribute("message", message);
return "anno/result";
}
해당 메소드는 값을 받아서 웹페이지에 출력하도록 값을 넘겨주기 위함이다.
따라서 변수를 받기 위해 TestCommand와 HttpServletRequest를 호출하였다.
post방식으로만 받는다.
return경로에 message에 값을 넣어서 setAttribute로 보냈다.
<데이터 넘기는 흐름>
따라서 write.action을 경로로 두면 create.jsp 페이지 화면이 출력되고
'로그인' 버튼을 누르면 write_ok.action이 오면서 result.jsp 결과창이 출력되게 된다.
xml 파일
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/"/>
<property name="suffix" value=".jsp"/>
</bean>
<context:component-scan base-package="*"/>
<bean id="beanNameUrlMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<bean name="/test/msg.action" class="com.test.TestController"/>
InternalResourceViewResolver
: InternalResourceViewResolver는 jsp파일을 관리하며 컨트롤러에서 return하는 경로를 관리할 수 있다.
- prefix : 경로 맨 앞 부분 (ex. /)
- suffix : 경로 맨 뒷 부분 (ex.jsp)
예시를 들자면 /tistory/blog.jsp 라는 경로가 있을 때 위처럼 설정해주면
tistory/blog 로 return을 입력할 수 있게 된다.
context:component-scan base-package는 어노테이션을 어떤 패키지에서 쓸 지 설정해줄 수 있으며 '*'을 입력하면 모든 패키지에서 가능하게 된다. 특정 패키지만도 설정할 수 있다.
BeanNameUrlHandlerMapping 클래스는 bean의 name에 있는 url 경로로 넘어가게 하며
밑에 name을 입력함으로써 해당 경로를 입력할 때 TestController가 실행되도록 한다.
3월 22일 화요일 수업 🌕
'개발 교육 TIL > back-end' 카테고리의 다른 글
[Spring] 의존성 주입 방법 (수동) - Dependency Injection (3) | 2022.03.24 |
---|---|
[Spring] 게시판 입력/수정창 만들기, annotation 어노테이션 (0) | 2022.03.23 |
[스프링] JRE 버전 바꾸는 법 (이클립스 Java) (0) | 2022.03.22 |
[스프링] Spring Framework 개념, 환경세팅(iBatis 연동) / IoC(제어의 역전) (0) | 2022.03.21 |
[Struts2] 파일 업로드 / 다운로드 - 예제 (0) | 2022.03.14 |