[2023.12.12] 개발자 교육 57일 차 : 강의-서블릿&JSP 실습 [구디 아카데미]

DaramGee·2023년 12월 12일
0

복습

doGet/doPost

  • ![[request(get,post)|1000]]
  • 첨부파일 있는 경우에는 get이 아닌 post 방식으로 처리 필요
  • 왜? get은 url을 통해 표시하고 보내며, 보안 취약 / post는 body에 넣어 보낼 수 있기 때문에 !!

강의 내용

POJO2 설계

  • POJO1의 한계가 뭐였지?
    ![[구디-12월7일 강의(54일)#^ea00f1]]

  • XXXController

    	- 서블릿 아니어도 괜찮음 
    	- 변경 : ActionServlet.java - FrontController(전처리 지원, 관여) -> DispatcherServlet 동작
  • null값 허용하게 하기(https://engineeringcode.tistory.com/321)

    	- 어제 허용해둔 것도 테이블에서 null 허용이 되지 않기 떄문에 추가적인 xml 작업이 필요함.(아래 내용 MapperConfig.xml에 추가)
    	- 이러니까 post 방식이 아니라 get 방식으로 테스트 하는 것 필요/???
    	- 쿼리스트링으로 넘기면 한글깨짐 이슈가 없음. 
    <settings>
    	<setting name="jdbcTypeForNull" value="NULL" />
    </settings>


doPost로 파일 전송하기

  • body 옵션 선택

  • form - data -> ``


Text vs 바이너리

  • 바이너리 타입 - 문자와 숫자로 표현()

  • 텍스트 에디터 - 문자 + 문자(사람이 눈으로 볼 수 있는 정보)

  • 숫자 -> 문자로 전환

  • 구분방법 : 메모장으로 옮겼을 때, 바이너리타입은 한글이 깨지는 것을 확인할 수 있음.

  • 인코딩 타입에 따라 처리방식이 다르다는 것 이해 필요??

    	- Base64(64진법-26*2) vs 아스키코드(128bit)

문제해결 관련

  • 톰캣 한글깨짐 왜 깨질까???

    	- 톰캣은 인코딩 타입이 8859_1로 되어있음. 
    	- 우리는 EUC
    	- 한글 안개지는지 해결 테스트(https://blog.naver.com/baekmg1988/221302236018)
  • 해결하는 방법

  1. server.xml 수정하기(get방식 한글 처리)
Connector connectionTimeout="20000" port="8000" protocol="HTTP/1.1" redirectPort="8443" **URIEncoding ="UTF-8"**/>
  1. web.xml 수정하기 (post방식 한글 처리 가능함.)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
          <filter>
              <filter-name>CharacterEncoding</filter-name>
              <filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
          <init-param>
              <param-name>encoding</param-name>
              <param-value>utf-8</param-value>
          </init-param>
          </filter>
          <filter-mapping>
              <filter-name>CharacterEncoding</filter-name>
              <url-pattern>/*</url-pattern>
          </filter-mapping>    
    cs


[[WAS]]란?(https://rio0205.tistory.com/17)

  • was는 웹 서버와 웹 컨테이너 기능을 모두 수행하는 프로그램(S/W)

    	- 웹 서버랑 웹 컨테이너는 뭐가 다르지? 
    		- 웹서버는 정적인 처리, 간단히 이야기하면 클라이언트 요청에 응답을 보내는 컴퓨터 프로그램
    		- 웹컨테이너는 웹서비스를 포함하는 처리인데 자바 기반 엔진이다. (servlet-api.jar, jsp-api.jar의 기능을 모두 수행하는 프로그램)
    	
    	- 그러니까 톰캣은 웹서버 역할, 웹컨테이너 역할 다 처리하는구나? (자바 처리도 가능한 거지?)
    	- 이외에도 엔터프라이즈 서버(JBOSS, JEUS)도 있는데.. -> 원격에 있는 클래스 호출하여 사용가능한 서버, 보안 강점 (다만 실습에선 사용x (우리는 톰캣 위주 실습!))
    	- 누군가 IIS 서버에서 서블릿, 스프링 지원하나요? IIS 서버에서 서블릿 컨테이너 지원(서블릿 API 내장)되나요??

프로젝트 import 문제가 발생한다고?? .classpath .project를 아나요?

  • 로컬 환경에 대한 정보가 담겨있음. (vscode)로 확인 가능

  • 이클립스가 생성해주는 파일이고, 다른 pc의 환경을 붙이다 보니 그대로 프로젝트 자체를 import를 하는 경우 터지는 현상 발생함.

  • 다른 path는 받지 않고, 해당 폴더만 가져와서 열고, 새롭게 path 처리를 하는 방법 있음.

  • 컴파일이 되지 않을 때, build 폴더를 비우고 project clean을 통해 다시 빌드가 될 수 있음.


[[RestFul]] API란 무엇인가?

  • 전송 방식 & 전송타입(바이너리-UI 솔루션이 지원하는 타입 중 한 가지)

  • REST라는 아키텍처를 구현하는 웹 서비스를 나타내기 위해 사용되는 용어


Board 설계

  • BoardVO

    	- [[VO]]란 객체와 테이블 사이의 매핑을 위해 시작된 클래스 설계
    	- 자바에서는 String, 오라클에서는 varchar2 -> 다른 타입이지만 동일한 값
  • BoardVOTest :

    	- [[lombok]]은 왜사용? 코드 다이어트 가능!! 🏃‍♀️
    	- @Builder 있을 때 없을 때 : 
    		- 없다면? 매번 생성할때마다 파라미터 안에 생성자 내용을 파라미터 순서대로 빠지지 않게 다 넣어야 함... 너무 귀찮음 😅
    		- 있으면? 생성자 파라미터엔 모든 값이 있지만, 일부만 값을 넣거나 그 입력 순서도 상관없이 사용이 가능, 훨씬 간결하고 편해진 전변의 초기화 코드!!
  • BoardController

    	- 클래스 결합도 낮추기 위해 상속을 포기함. 
    	- [[매핑]] 구조에서 extension mapping 구조 사용 예정(스프링에서는 이를 지원하는 어노테이션 있음.-빈관리를 받을 때만 사용 가능, req, res를 주입해주기 때문에?!)
  • BoardLogic

    	- 어떠한 것도(Controller 인터페이스) implements 받지 않아서 제약 조건이 없음. 순수한 자바 클래스 [[POJO]]이다. 

페이지 처리

  • BSPagerBar.java

    	- 페이지 블럭처리 공식 및 변수 
    	- 전체 데이터 값에 따른 페이지 수, 구분이 결정될 수 있도록  설계 필요(어떤 건 데이터가 10개, 어떤 건 100개일 수 있으니...)
    	- 1 2 3 >  < 4 5 6 > < 7 8 .... 

강의 마무리

[!tip] 배포 위치에 대한 기준
/webapp/board & /WEB-INF/jsp/board

  • 둘 중 url을 통해 요청할 수 있는 페이지는?? webapp이다. WEB-INF는 컨테이너를 통해 경유해서 갈 수 있다.

[!tip] 프론트 컨트롤러인 ActionForward, XXXController

  • af 는 서블릿이지만 Controller는 아니다.
  • 서블릿이 아니면 요청, 응답 못하지 않나? controller 인터페이스의 메소드 오버라이딩으로 해결할 수 있다.
  • Controller의 구현체 클래스는 무엇인가? XXXController 이다.
    - 잊지말자 [[다형성]]!! 인터페이스 인터페이스변수 = new 구현체클래스();
    - 서블릿은 아니지만 요청, 응답객체를 누린다. 인터페이스와 클래스의 형태로 설계를 한 것이다.

0개의 댓글