Java&SpringBoot

6주차) 패스트캠퍼스 Java & Springboot 로 시작하는 웹 프로그래밍

은line 2023. 2. 25. 10:13

MVC

클라이언트 :  서비스 요청하는 애플리케이션(or PC)

서버: 서비스를 제공하는 애플리케이션(or PC)  > Email/ File/ Web server

WAS(Web Application server): 웹 애플리케이션을 서비스하는 서버/ 서버에 프로그램을 설치하고 웹에서 보여줌

 #Tomcat 

-Server : 서버> 서비스 > 엔진(서비스를 처리) > HOST> Context (서블릿 여러개) = 프로젝트

      주소형식 = Host명/context명/서블릿명

-설정파일

: conf/server.xml (서버설정) | conf/web.xml (모든 web app의 공통설정) | WEB-INF/web.xml (web app의  개별설정)

 

프로토콜 : 서로 간의 통신을 위한 약속, 규칙으로 주고받을 데이터에 대한 형식을 정의한 것

- HTTP(텍스트기반) 응답메시지

> 형식: 상태라인(HTTP/1.1 상태코드 상태설명) / 헤더 / 빈줄(헤더, 바디 구분) / 바디(응답내용)

#상태코드 : 1**(informational) 2**(성공) 3**(Redirect- 다른URL로 요청필요) 4**(client error) 5**(server error)

- HTTP(텍스트기반) 요청(GET/ POST) 메시지

> 형식: 요청라인 / 헤더 / 빈줄 / 바디

- GET: 리소스를 받는(Read) - 요청라인에 쿼리스트링으로 요청, 바디 없음, 보안취약, 소용량

- POST: 서버에 data(바디내용)를 전송/제공 (Write), 대용량가능 => 게시판 글쓰기, 로그인, 회원가입

 ▶개발자도구의 Network 탭에서 확인 가능

 

OOP 5대 설계원칙 - SOLID

> SRP: 단일책임 원칙 (하나의 메서드는 하나의 책임을 진다, 관심사/ (un)common /중복(입출력)코드 의 분리)

> OCP: 개방-폐쇄 원칙 

> LSP: 리스코프 치환 원칙 

> ISP: 인터페이스 분리 원칙 

> DIP: 의존성 역전 원칙 

 

ex) 요일을 계산해주는 프로그램 > MVC패턴으로 개선

 

isVaild함수 return true일때와 false일때

jsp파일내용

한글이 깨질때 : <%@ page contentType="text/html;charset=utf-8" %>

 

- Servlet  (싱글톤) 

@WebServlet  =  @Controller(메소드에 맵핑) + @RequestMapping

 > 해당 클래스는 HttpServlet 상속, 메소드HttpServletRequest request, HttpServletResponse response 필요

@WebServlet 
public class 클래스 extends HttpServlet {

   @Override
    public void 클래스(HttpServletRequest request,                 HttpServletResponse response) { }}
@Controller
public class 클래스{
    @RequestMapping
    public void main( HttpServletResponse response){ }
}

 

 

요청

> 존재x > 인스턴스 생성

> 서블릿 인스턴스 존재시

서블릿 클래스 로딩

init() 초기화

service() 호출할때마다 반복수행

 

- JSP (Java Server Pages) 

html안에 java코드가 존재하는 것, servlet과 동일 

동작) jsp작동 시 servlet으로 변환 >  servlet 클래스파일 컴파일 > servlet 인스턴스 생성

파일 저장 위치- src/main/webapp

<%! servlet의 클래스 영역 내용%>  <% servlet의메소드 내부에 존재함 %>

*기본객체 : 생성없이 사용할 수 있는 객체 (ex -request, response, pageContext, config, application, page, out 등)

 - EL (Expression Language)표현식 

    <%=값%>을 사용하지않기 위해 ${값}을 사용하는 표현식, lv(지역변수)는 사용불가, 값을 읽을 수 있음, null출력안함

[EX]

requset객체 안에 attribute 라는 Map(이름- request scope)저장 

key = name, value = silver로 저장

color 
= <%=person.getCar().getColor()%> //red
= ${person.getCar().getColor()} <br> //red
= ${person.car.color} <br>  //red

name 
= ${name} //Silver   
= ${requestScope.name} //Silver  
= <%=request.getAttribute("name")%> (EL불가) //Silver

name == "Silver" 
= ${ name eq "Silver"} // true
= ${name.equals("Silver")} // true

= ${name == "Silver" // true

name != "Silver"
= ${name != "Silver" // false
= ${name ne "Silver"}) // false


id 
= <%=request.getParameter("id")%> //null
= ${pageContext.request.getParameter("id")} //출력x
= ${param.id} <br> //출력x
Scope 기본객체
page pageContext
requst requst
session session
application application

 

- JSTL(JSP Standard Tag Lib) : <%태그%>사용하지 않기 위해 사용 <접두사:태그명 ~> 형식

 (접두사)

<c: 상단에 <%@ taglib prefix="c"  uri="http://java.sun.com/jsp/jstl/core"%> 선언한것으로 core 라이브러리를 사용

<fmt: <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> 선언한것으로 fmt 라이브러리를 사용

 

[EX]

<c:set  var="to"   value="10"/> //저장소에 저장 (key = var값, value = value값)으로 page Scope 생략한것

<c:forEach  var="i" begin="1" end="${to}">  ${i} </c:forEach> //1부터 10까지 출력

<c:set  var="arr"  value="10,20,30,40,50,60,70"/> // 배열생성

<%-- varStatus는 count와 index멤버를 가지고 있음 --%>

<c:if test="${not empty arr}">

    <c:forEach var = "elem"  items="${arr}" varStatus="status">
         status.count = ${status.count} / status.index = ${status.index}<br>
         arr[${status.index}]=${elem
    </c:forEach>
</c:if>

 

//주소창에 ?msg = 메시지 입력하면 출력됨
<c:if test="${param.msg == null}"> 메시지가 없습니다. </c:if>
 <c:if test="${param.msg != null}">
        msg = ${param.msg}   //태그를 인식하고 내용만 출력
        msg = <c:out value="${param.msg}"/>  //태그를 인식하지 않고 그대로 출력
</c:if>

 

 - Filter 

서블릿의 전처리 후처리 중복코드를 필터에 넣음

- 필터 1개
요청 > [필터] 전처리 > [필터] 서블릿 호출 
    > [서블릿] 처리 > [필터] 후처리
- 필터 2개
요청 > [필터1] 전처리 > [필터1] 필터2 호출 > [필터2] 전처리
    >[필터2] 서블릿 호출 > [서블릿] 처리 > [필터2] 후처리 > [필터1] 후처리

 

 

[내일배움카드] [국비지원교육]