아무튼 개발
article thumbnail
반응형

 

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일 화요일 수업 🌕
반응형
profile

아무튼 개발

@릴쥬

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

profile on loading

Loading...