SPRING 1일차 TIL

_-_-kk·2023년 4월 25일
0

servlet-context.xml

컨트롤러에서 jsp로 렌더링하는 것을 처리하는 부분이다.
== 컨트롤러의 응답을 jsp로 보낼때 어떻게 처리할것인가? 를 작성하는 부분
==> View Resolver : Controller에서 반환된 문자열 앞/뒤에
접두사(prefix), 접미사(suffix)를 추가하여 만들어진 경로의 jsp로 요청을 위임(forward)

member/signUp
/WEB-INF/views/member/signUp
/WEB-INF/views/member/signUp.jsp
forward !

단, 반환된 문자열의 시작이 redirect: 구문이면 재요청(redirect) 진행
redirect:/ 최상위로 재요청.

<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
	<beans:property name="prefix" value="/WEB-INF/views/" />
	<beans:property name="suffix" value=".jsp" />
</beans:bean>

log4j.xml

<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd"> 

해당 부분때문에 에러가 날수도 있음 -> 기본으로 내장되어있는 log4j를 sts가 인식할수 없어서
원격에서 가지고 오겠다해서 원격 경로를 작성한 구문으로 수정!

Appenders :
출력되는 로그의 형태를 지정하는 부분으로, 로그를 뒤에 계속 남기는 역할을 한다.

Application Loggers

이 패키지 이하에서 출력되는 로그들을 출력하겠다.
trace < debug < info < warn < error < fatal

<logger name="edu.kh.comm">
	<level value="debug" />
</logger>

<!-- 3rdparty Loggers -->
<logger name="org.springframework.core">
	<level value="info" />
</logger>

<logger name="org.springframework.beans">
	<level value="info" />
</logger>

<logger name="org.springframework.context">
	<level value="info" />
</logger>

<logger name="org.springframework.web">
	<level value="info" />
</logger>
  • POJO 기반 프레임워크
    외부 라이브러리 상속 X
  • class
    객체를 만들기위한 설계도
    -> 객체로 생성 되어야지 기능 수행 가능하다.
    --> IOC(제어의 역전, 객체 생명주기를 스프링이 관리)를 이용하여 객체 생성
    이 때, 스프링이 생성한 객체를 bean 이라고 한다.
  • bean
    스프링이 생성한 객체
    bean 등록 이란?
    == 스플링이 객체로 만들어서 가지고 있어라
  • @Component
    해당 클래스를 bean으로 등록하라고 프로그램에게 알려주는 주석 (Annotation)
  • @Controller
    생성된 bean이 Controller임을 명시 + bean 등록
    Controller : 요청/응답을 제어하는 역할을 하는 클래스
  • @RequestMapping
    클라이언트 요청(url)에 맞는 클래스 or 메서드를 연결 시켜주는 어노테이션
    • [ 위치에 따른 해석 ]
        • 클래스 레벨 : 공통 주소
        • 메서드 레벨 : 공통 주소 외 나머지 주소
      • 단, 클래스레벨에 @RequestMapping이 존재하지 않는다면
        • 메서드 레벨 : 단독 요청 처리 주소
    • [ 작성법에 따른 해석 ]
      • 1) @RequestMapping("url")
      • --> 요청 방식(GET/POST) 관계 없이 url이 일치하는 요청 처리
      • 2) @RequestMapping(value = "url", method = RequestMethod.GET | POST)
      • --> 요청 방식에 따라 요청 처리함
  • 메서드 레벨에서 GET/POST 방식을 구분하여 매핑할 경우
    @GetMapping("url") / @PostMapping("url") 사용하는것이 일반적
    (메서드 레벨에서만 작성 가능!)
    * */

파라미터를 얻어오는 방법 1
HttpServletRequest 이용

@RequestMapping("/login")
	public String login(HttpServletRequest req) {
		logger.info("로그인 요청됨");
		
		String inputEmail = req.getParameter("inputEmail");
		String inputPw = req.getParameter("inputPw");
		
		logger.debug("inputEmail : " + inputEmail);
		logger.debug("inputPw : " + inputPw);
		
		return "redirect:/"; // sendRedirect 안써도 된다. 이게 리타이렉트 구문임.
	

파라미터를 얻어오는 방법 2
-> @RequestParam 어노테이션 사용

@RequestParam("name속성값")자료형 변수명

  • 클라이언트 요청 시 같이 전달된 파라미터를 변수에 저장
    --> 어떤 파라미터를 변수에 저장할지는 "name속성값"을 이용해 지정

매개변수 지정 시 데이터 타입 파싱을 자유롭게 진행할 수 있음
ex) String -> int 로 변환

[속성]
value : input 태그의 name 속성값

required : 입력된 name 속성값이 필수적으로 파라미터에 포함되어야 하는지 지정
required=true / false (기본값 true)

defaultValue : required 가 false인 상태에서 파라미터가 존재하지 않을 경우의 값을 지정


@RequestMapping("/login")
	public String login( @RequestParam("inputEmail") String inputEmail,
						@RequestParam("inputPw") String inputPw,
						@RequestParam(value="inputName", required = false, defaultValue = "홍길동") String inputName
			) {
		
		logger.debug("email: " + inputEmail );
		logger.debug("pw: " + inputPw );
		logger.debug("inputName: " + inputName );
		
		// email 숫자만 입력받는다고 가정
		//logger.debug(inputEmail + 100 );
		
		return "redirect:/"; 
	}

요청 시 파라미터를 얻어오는 방법 3
-> @ModelAttribute 어노테이션 사용

@ModelAttribute VO타입 변수명
-> 파라미터 중 name 속성값이 VO의 필드와 일치하면
해당 VO 객체의 필드에 값을 세팅

@ModelAttribute를 이용해서 객체에 값을 직접 담는 경우에 대한 주의 사항
-- 반드시 필요한 내용

  • VO 기본 생성자

  • VO 필드에 대한 Setter


    InitFilter.java

print 구문 사용 대신
-> Logger 사용

Logger 객체 생성 (해당 클래스에 대한 log를 출력하는 객체)

private Logger logger = LoggerFactory.getLogger(InitFilter.class);

필터가 생성될 때 실행

public void init(FilterConfig fConfig) throws ServletException {
logger를 이용해서 출력하는 방법

trace - debug - info - warn - error
		
debug : 개발의 흐름 파악 (이게 실행이 되었는지, 파라미터가 현재 무엇인지 확인할 때)

info : 메소드 실행 파악
		
이 필터가 생성이 되었다 라는 정보를 출력하고 싶다! info 가 제일 적절함.

logger.info("초기화 필터 생성");
	}

필터가 파괴될 때 실행 (서버는 켜져있는데 백엔드 코드가 수정되었을 때)

	public void destroy() {
		logger.info("초기화 필터 파괴");
	}
profile
_-_-kk

0개의 댓글