TIL 2021.09.30(목) Spring 어노테이션 정리

개발중·2021년 9월 30일
0

Spring

목록 보기
3/11

수업 시간에 작성된 코드를 되짚어 보며 복습하기

  1. jsp 파일에서 form 태그를 통해 입력받은 값을 넘겨 준다.
<form name="loginFrm" method="post" action="/web/loginAction.do">

/root/loginAction.do로 loginAction Java 클래스 파일을 생성해 준다.

	<servlet-mapping>
		<servlet-name>appServlet</servlet-name>
		<url-pattern>*.do</url-pattern>
	</servlet-mapping>

web.xml의 하단에 url-pattern을 설정해 준다. .do로 끝나는 모든 것들을 설정해 주었다.

.do로 끝나는 url은 action이라는 이름의 디스패처 서블릿으로 보내겠다는 의미이다.

톰캣이 구동하면서 web.xml을 읽고 적어 둔 경로가 있으면 그대로 수행한다.

요청 -> 톰캣 -> 디스패처 서블릿 순서

참고한 사이트 : https://okky.kr/article/430418

LoginAction 클래스

package sist.com.web;

import org.springframework.stereotype.Component;

@Component
public class LoginAction {
	
	public boolean loginCheckAction(String id, String password) {
		return id.equals("Admin")&&password.equals("1234");
	}
}

@Component
직접 작성한 Class를 Bean으로 등록해 준다.

@Component를 붙여 빈을 등록하면 클래스 이름의 첫 문자가 소문자로 바꾼 채로 빈의 ID(이름)이 된다.

혹은 @Component(이름)으로 이름을 지정해 줄 수도 있다.

컴포넌트와 함께 @Scope도 사용할 수 있는데 scope의 타입을 지정해 줄 수 있다. @Scope(속성) / 작성하지 않으면 기본은 singleton이다.

import java.security.KeyStore.Entry.Attribute;

import javax.annotation.Resource;

import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;


@Controller
public class BasicController {
	
	
	@Resource(name = "loginAction") // 항상첫글자는 소문자로
	//@Resource는 주입하려고 하는 객체의 이름(id)이 일치하는 객체를 자동으로 주입한다.
	LoginAction action;


	@RequestMapping(value="loginAction.do")
	public ModelAndView loginProcess(String id, String password) { // html에서 name 태그에 값을 동일하게 두면 알아서 들어간다.
		ModelAndView modelAndView=new ModelAndView();
		modelAndView.addObject("id", id); // 디스패처 하는 것 
		if(action.loginCheckAction(id, password)) {
		modelAndView.setViewName("boardMVC/loginSuccess");
		}else {
			modelAndView.setViewName("redirect:/boardMVC/signin.jsp"); // 다시 로그인 페이지로 리다이렉트해 준다
		}
		return modelAndView;
	}
}

리소스 어노테이션을 통해 LoginAction 클래스가 주입이 되었고, 리퀘스트 매핑으로 인해 LoginAction.do(요청 경로)로 넘어가면 해당 메소드가 실행된다.

loginProcess의 파라미터로 jsp 파일에서 입력한 값을 받는다.

ModelAndView는 컴포넌트의 객체 방식으로 작성되고 돌려준다.
데이터와 이동하고자 하는 View Page를 같이 저장한다.

위의 코드로 보자면 if문을 통해 입력받아 넘어 온 jsp의 입력 값을 loginCheckAction 메소드 파라미터로 넘긴다.

loginCheckAction 메소드는 반환 값을 boolean으로 생성되어
참이면 boardMVC/loginSuccess인 뷰의 경로로 이동한다.

거짓일 경우 redirect로 boardMVC/signin.jsp(로그인 페이지)를 뷰의 경로로 이동한다.

@Controller
Spring의 Controller를 의미한다. MVC에서 컨트롤러 클래스에 사용된다.

@Resource
Bean 객체를 이름으로 연결해 주입해 준다.
class path 내에 jsr250-api.jar 파일을 추가해야 한다.

@RequestMapping
요청 URL을 어떤 메소드(함수)가 처리할 것인지 Mapping을 해 준다.

controller나 controller의 메소드(함수)에 적용해 준다.
요청을 받는 형식인 get, post, patch, put, delete를 작성해 줄 수도 있다. (기본은 get)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
Id:${id} 님 환영합니다.
</body>
</html>

${id}는 modelAndView.addObject("id", id);로 디스패처를 하여 뷰 경로로 보내 줄 값을 넣어 주었기 때문에 가능하다.

참고한 사이트 : https://velog.io/@gillog/Spring-Annotation-정리

profile
공부한 것 정리하는 개발 입문자

0개의 댓글