[Servlet, JSP] 231208

이슬기·2023년 12월 9일

servlet

목록 보기
3/8

JSP 등장배경

p.390
사용자마다 스레드가 존재한다.

p.391
유지,보수를 위해 자바(톰캣)와 뷰(html)(브라우저)를 분리하자

  • 관심사를 분리하자
    • 자바의 책임은 개발자, 뷰의 책임은 디자이너

p.393
복잡도가 증가하면 쪼개야 한다.

  • 반복되는 것과 반복되지 않는 것으로
  • 관심사의 분리
  • 양이 늘어나는 건 괜찮지만 복잡도가 늘어나는 것은 지양
  • 서버에서 처리한다. 처리 - 메소드
    • upmu[0] : 업무의 이름 - 이것으로 컨트롤러를 결정한다.
    • [0], [1] : url

p.394

  • 컴파일 단계
    태그 다운로드 : 처리 주체가 브라우저

  • 실행단계

    • 렌더링 단계에서 관여하는 리액트, 뷰js, 핸들바스와 같은 템플릿엔진

디렉티브 태그

p.399
디렉티브 태그 방식
jsp는 a, b 두 개인데 java 몸통이 하나
java 몸통이 하나기 때문에 a나 b에서 변수를 선언해도 서로 사용 가능

액션 태그

p. 476
액션 태그 방식

java 두 개가 생성되어 b.jsp는 b의 java로 처리를 하고 결과만 a.jsp에 끼워줌
java 몸통이 각각 있기 때문에 서로의 변수 상호 호환 안 됨

include
a.jsp를 처리하다가 include만나면 -- 이동 --> b.jsp를 처리하고 --> 다시 a.jsp로 돌아옴

  • 제어권은 a가 가짐. 응답(출력)을 a가

ViewResolver class

  • sendRedirect : url 바뀌는 화면 전환

  • forward : url 바뀌지 않는 화면 전환

    • --요청--> a.jsp --> b.jsp --응답-->
      • url은 a가 출력은 b가

lombok

package com.vo;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

//@Getter
//@Setter
//getter, setter를 하나로 합쳐 선언하는 @Data
@Data
@NoArgsConstructor
//@AllArgsConstructor
public class NoticeVO {
	private int n_no = 0;
	private String n_title = null;
	private String n_content = null;
	private String n_writer = null;
	//@builder : 메소드 오버로딩의 규칙과 상관없이 쓸 수 있다는 장점
	@Builder
	public NoticeVO(int n_no, String n_title, String n_content, String n_writer) {
		super();
		this.n_no = n_no;
		this.n_title = n_title;
		this.n_content = n_content;
		this.n_writer = n_writer;
	}
}
package com.example.demo.pojo1;

import com.vo.EmpVO;
import com.vo.NoticeVO;

public class LombokTest {
	void methodA() {
		NoticeVO nvo = NoticeVO.builder().n_no(3).n_title("제목").n_content("내용").n_writer("작성자").build();
		System.out.println(nvo.getN_writer());
		NoticeVO nvo2 = NoticeVO.builder().n_no(3).build();
		System.out.println(nvo2.getN_writer());
		NoticeVO nvo3 = NoticeVO.builder().n_title("제목").n_content("내용").n_no(3).n_writer("작성자").build();
		System.out.println(nvo3.getN_content());
	}

	public static void main(String[] args) {
		LombokTest lt = new LombokTest();
		lt.methodA();
		NoticeVO nvo = new NoticeVO();
		//getter/setter를 정의하지 않아도 즉시 사용 가능함. lombok을 사용하지 않을 때는 이렇게 했었음
		nvo.setN_title("휴관공지"); //n_title 전역변수에 휴관공지가 담김
		nvo.setN_title(""); //전역변수이기에 다시 빈 깡통됨
		System.out.println(nvo.getN_title()); //28번에서 담은 휴관공지 문자열 출력
		EmpVO evo = new EmpVO();
		evo = new EmpVO(7566);
		//evo = new EmpVO(7566, "SCOTT");
		//evo = new EmpVO(7566, "SCOTT", "2000-10-25");
	}

}

분리

  • Front-End
    localhost : 3000
    화면 - View계층

  • Back-End
    localhost : 8000

따로 서비스 제공하기

리액트를 위한 실습 아니다

  • 학습목표
    • 우리가 설계해서 처리해 둔 pojo1-1번이 리액트처럼 다른 언어와 연동할 때 부족한 부분이 있나?
    • 아니라면 잘 연계 되는가?
  • React에서는 함수{일급함수(객체이다. 고차함수)}를 통해서 화면을 그린다
    localhost:3000/index.html 생략되었다

트리구조 기억해보기

미리 공부해보기

뷰 리졸브

0개의 댓글