https://luppang.tistory.com/99
금욜꺼 복습...
HttpServlet은
Java Servlet API에서 제공하는 클래스 중 하나로, HTTP 프로토콜을 사용하는 클라이언트의 요청을 처리하고, 그에 대한 응답을 생성하는 서블릿(Servlet)을 개발할 때 상속받아 사용하는 클래스입니다.
HttpServlet 클래스를 상속받아 개발한 서블릿은
doGet(), doPost(), doPut(), doDelete()
등의 HTTP 요청 메서드에 대한 처리를 수행할 수 있습니다.
각각의 메서드는 HTTP 요청 메서드에 따라 자동으로 호출됩니다.
또한 HttpServlet 클래스는 초기화(init)와 소멸(destroy) 메서드도 제공하며, 이를 오버라이딩하여 서블릿의 초기화 및 종료 과정에서 필요한 작업을 수행할 수 있습니다.
HttpServlet 클래스는 javax.servlet 패키지에 포함되어 있으며, javax.servlet.http.HttpServlet 클래스를 상속받아 사용할 수 있습니다. HttpServlet 클래스는 웹 애플리케이션에서 가장 많이 사용되는 서블릿 중 하나이며, 대부분의 웹 프레임워크에서 HttpServlet을 기반으로 서블릿을 개발합니다.
URL : 메인메소드가 없다//? 뭐가?
URL을 통해서 톰캣서버에 요청을 한다.
브라우저에 요청을 한다.
브라우저의 역할 : 인터프리터-번역기
http프로토콜 + URL
http는 stateless이다.
http프로토콜이 있어야 요청을 할 수 있다.
표준 서블릿 VS 사용자 정의 서블릿
자바만 있으면 웹서비스 왜 안되나>?
요청을 받을수없잖아...
request는 class이다. 타입은 HttpServlet이다.
doGet
doPost
요청이 들어왔을때 들어주는것 : 백앤드
브라우저 안에는 BOM이 살고 있다.
document.. 등등
뷰계층 : 프론트앤드
정적 페이지 : 정해져있다.
사용자 입장에서 html, css, js는 다운로드가 먼저 된다. 처리주체 : 브라우저
html, css, js는 톰캣서버안에 산다. 처리는 브라우저에서 된다.
사는곳과 처리되는곳이 다르다.
자바>서블릿>JSP
Servlet은 화면을 그리는것이 너무 불편하다.
out.Print()안에 태그 쓰기 너무 귀찮다.
정적 페이지는 클라이언트쪽에서 실행이 된다.
servlet은 두가지를 주입 받는다.
요청객체
-서버가 요청 한다. doGet, doPost로 요청한다.
POJO 프레임워크
제약조건을 제공하는것이 추상메소드이다.
doGet, doPost는 지변이다.
httpservlet의 인터페이스이다.
자손들이 웹서비스 위해서 구현을 한다.
파라미터 두개(req, res) - 왜? 상속 받았으니까.
주입해준다. 톰캣이다.
게으른 인스턴스화이다.
init Service destroy???
doGet
단위 테스트가 가능하다.
?뒤에가 노출 되어있다.
doPost
포장되어있다.
브라우저가 절대 인터셉트 할 수 없다.
링크를 걸 수 없다.
단위테스트 불가능하다.
Postman있으면 테스트 가능하다.
유지... stateless비상태 프로토콜이다.
동시 접속자수가 1초에 3000명이라고 가정.
서버가 너무 바쁘다. 지연이 발생할 수 있다. 그래도 서비스는 제공이 되어야한다.
요청객체와 응답객체가 있어야 대답 가능.
response로 mime type을 결정한다. 응답객체가 mime type을 결정한다.
main/sub
text/html
img/jpg
video/mp4
FrontMVC1이 서블릿이다?(수업 내용)
서블릿을 등록하려면 web.xml에서 주소 등록
또는
@webSevlet
새 다이나믹 프로젝트 만들기
서버는 하나인데 이클립스에서 여러개 쓸 수 있게 해준다.
자바에 httpServlet을 상속받으면>?
그게 Servlet이다!!
(새삼스럽게 놀람...)
//오버라이딩하는 doget,dopost가 아닌것은 톰캣서버로부터 res,req를 주입 받을 수 없다.
//그래서 doget, dopost메소드 내에서 doservice메소드를 호출 할 때 파라미터로 req,res를 넘긴다.
//그래야 사용자 정으;ㅣ 메소드에서도 요청객체와 응답 객체를 사용 할 수 있으니까.
//POJO프레임 워크는 요청객체와 응답객체에 의존적이다.
//스프링 프레임 워크에서는 요청객체와 응답객체 없이도 모든 서비스가 가능하게 되었다.
//없이도 가능 하다는것은 메소드의 파라미터로 주입 받는다라는걸 의미한다.
//스프링에서는 메소드의 파라미터의 갯수가 늘었다 줄었다 할 수 있다. 오버라이딩 관계가 아니다.
context-param과 init-param의 차이
context-param은 init-param 그 이상으로 전역 즉 모든 서블릿에서 사용할 수 있는 파라미터 값이다. 위에서 init-param이 지역변수라면 해당 파라미터는 전역변수라고 생각하면 될 것 같다.
1. context-param은 서버가 기동될때 한번 읽으면 서버가 종료될때까지 계속 기억함
init-param은 서블릿이 요청될 때 마다 새로 읽음.
서블릿의 주소 매핑 방법
https://codevang.tistory.com/194
[ Servlet - URL 매핑 ]
- 서블릿의 @WebServlet("/URL") 어노테이션을 사용한 매핑
- web.xml을 통한 매핑
서블릿은 위의 두 가지 방법으로 URL 매핑이 가능합니다.
먼저 첫번 째 방법은 이클립스에서 서블릿 파일을 생성할 때 자동으로 붙어 있는 어노테이션을 사용하는 방식입니다. 서블릿 생성에서 바로 Finish를 누르지말고 Next를 눌러보면 URL을 어떻게 매핑할지 나오는데 여기서 수정해도 되고 코드에서 바로 수정해줘도 무방합니다.
이렇게 파일을 만들면 위에 붙어 있는 @WebServlet("/URL")의 URL 주소로 접속하면 톰켓 서버의 컨테이너가 매핑된 서블릿을 찾아 실행해 줍니다.
서블릿 한 개에 여러개의 url 주소를 매핑하려면 아래 코드와 같이 배열 형태로 사용해주면 됩니다.
@WebServlet(urlPatterns = {"/main", "/test", "/join"})
public class Controller extends HttpServlet {
두번 째 방법은 web.xml 환경설정 파일에서 직접 매핑해주는 방식입니다. 위의 방법이 훨씬 쉬워보일 수 있지만 웹 서비스가 복잡해지고 서블릿이 많아지면 web.xml에서 한번에 관리해주는게 편할 수 있습니다. (관리자 선호)
이클립스에서 web.xml 파일을 텍스트 편집기로 연 뒤 아래의 형식으로 코드를 입력합니다. 주의할 점은 만약 패키지가 있다면 "패키지명.서블릿 클래스 이름"으로 전체 path를 입력해줘야 한다는 것입니다. servlet-name은 임의 지정해줘도 되지만 보기 쉽게 서블릿 파일의 이름과 동일하게 해주면 좋습니다. 당연히 위 아래의 servlet-name이 똑같아야 매핑이 됩니다. 다른 서블릿 네임에서 <servlet-class>의 값을 같게 해주면 하나의 서블릿에 여러 URL을 매핑할 수 있습니다.
<servlet>
<servlet-name>Name</servlet-name>
<servlet-class>com.java.example.ClassName</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Name</servlet-name>
<url-pattern>/class</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>Name2</servlet-name>
<servlet-class>com.java.example.ClassName</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Name2</servlet-name>
<url-pattern>/main</url-pattern>
</servlet-mapping>
양쪽에 하면 객체 두개가 만들어진다. 호온난다. 큰일남.
하나만 만들자....!
Servlet접근-브라우저-URL
@WebServlet("/") : 어노테이션 -Spring boot
자바 코드에 직접 작성한다.
문제점지적!
입력
수정
삭제
조회
최소 메소드가 4개가 필요하다.
나는 doGet메소드로 4가지의 경우의 수를 따져야한다.
if문으로 조건에 따라 분기한다. 나눈다.
그런데 if문은 return타입 하나만 사용이 가능하다.
문제!!
여러가지 담을려면 리턴타입이 Object가 되어야 한다.
그런데 doGet의 리턴타입은 void이다. 이것을 Object타입으로 바꿀 수 있어야 한다.
Void - 오버라이딩
ActionForward
Action()
리턴타입 :
Object
Servlet Interface 정리
인터페이스는 상속받은것을 기능구현이 아니라 선언만 하는것이다.
기능적인 요소를 재사용하기위해 메소드 오버라이딩한다.
내가 너의 구현체클래스가 되어줄게...
Java Servlet API에서는 javax.servlet 패키지 내에 다양한 인터페이스를 제공합니다.
이 인터페이스를 구현함으로써 서블릿을 개발할 수 있습니다.
여러 인터페이스 중에서 가장 기본적인 인터페이스는 javax.servlet.Servlet입니다. 이 인터페이스를 구현한 클래스는 웹 애플리케이션 서버에서 서블릿으로 인식됩니다.
Servlet 인터페이스는 다음과 같은 메서드를 정의하고 있습니다.
- init(ServletConfig config): 서블릿이 초기화될 때 호출되는 메서드입니다. 이 메서드는 서블릿이 처음으로 생성될 때 한 번 호출되며, 서블릿이 사용할 자원을 초기화하는 작업을 수행할 수 있습니다.
- service(ServletRequest req, ServletResponse res): 클라이언트의 요청이 들어왔을 때 호출되는 메서드입니다. 이 메서드에서는 요청을 처리하고, 그에 대한 응답을 생성합니다.
- destroy(): 서블릿이 소멸될 때 호출되는 메서드입니다. 이 메서드는 서블릿이 사용한 자원을 해제하거나, 종료 작업을 수행할 때 사용됩니다.
또한, javax.servlet.http 패키지 내에는 HTTP 프로토콜을 사용하는 서블릿을 개발하기 위한 다양한 인터페이스가 제공됩니다. 예를 들어, javax.servlet.http.HttpServlet 클래스는 HttpServlet 인터페이스를 구현하고 있으며, HTTP 요청 메서드(GET, POST, PUT, DELETE 등)에 대한 처리를 위한 메서드(doGet(), doPost(), doPut(), doDelete() 등)를 제공합니다.
이와 같은 인터페이스를 사용하여 개발한 서블릿은 웹 애플리케이션에서 사용되는 다양한 기능을 구현할 수 있습니다. 또한, 이 인터페이스를 구현함으로써 서블릿 컨테이너와의 인터페이스를 단순화할 수 있으며, 이를 통해 서블릿의 이식성을 높일 수 있습니다.
1. HTTP 요청 처리
클라이언트의 HTTP 요청을 받아들이고, 요청 내용을 분석하여 해당 요청을 처리하는 코드를 호출합니다.
클라이언트에게 응답을 반환합니다.
2. 세션 관리
세션을 사용하여 클라이언트의 상태 정보를 유지합니다.
클라이언트의 요청에 대해 서버에서 데이터를 저장하거나 검색할 때 사용합니다.
3. 인증 및 권한 관리
사용자 인증과 권한 부여를 처리합니다.
사용자가 로그인하고 인증된 후, 특정 페이지나 기능에 대한 권한을 검사하여 접근 권한을 제한합니다.
4. 데이터베이스 액세스
JDBC 라이브러리를 사용하여 데이터베이스와 연동합니다.
데이터베이스에서 데이터를 검색하거나 변경할 수 있습니다.
5. 웹 어플리케이션 개발을 위한 다양한 API 지원
Servlet API는 HTTP 요청 및 응답 데이터 처리와 관련된 다양한 메서드를 제공합니다.
JSP, JSTL, EL 등 다양한 API를 사용하여 웹 애플리케이션을 개발할 수 있습니다.
ActionForward
boolean
접두어에 is가 붙으면 boolean타입으로 반환된다.
React 수업
React는 사용자 인터페이스(UI)를 만들기 위한 JavaScript 라이브러리입니다. React는 Facebook에서 개발되었으며, 현재는 오픈 소스 프로젝트로 유지보수됩니다. React는 사용자 인터페이스를 구성하는 컴포넌트(component) 기반으로 작동합니다.
React를 사용하면 복잡한 UI를 구성하는 것이 쉬워집니다. 각 컴포넌트는 각각의 책임을 갖고 있으며, 이를 조합하여 더 복잡한 컴포넌트를 만들 수 있습니다. 컴포넌트는 일반적으로 JavaScript 함수나 클래스로 정의되며, JSX라는 문법을 사용하여 HTML과 비슷한 구조로 작성됩니다.
React는 가상 돔(Virtual DOM)을 사용하여 성능을 향상시킵니다. 가상 돔은 React가 UI를 업데이트하는 방식 중 하나입니다. React는 UI 변경 사항을 추적하여 변경된 부분만 실제 돔에 적용하므로, 필요한 부분만 다시 렌더링됩니다. 이를 통해 UI 업데이트 속도가 빨라지며, 사용자 경험을 향상시킬 수 있습니다.
React는 또한 React Native라는 도구를 제공합니다. React Native를 사용하면 React로 작성한 코드를 기반으로 iOS와 안드로이드 모바일 앱을 만들 수 있습니다. 이를 통해 개발자는 동일한 코드를 재사용하여 다양한 플랫폼에 대한 앱을 빠르고 쉽게 만들 수 있습니다.
React문법
태그안에서 자바스크립트를 쓸때는 {}를 넣어준다. { }
React의 Hook완벽정복하기
https://velog.io/@velopert/react-hooks
React 컴포넌트는
React에서 UI를 구성하는 기본적인 단위입니다. 컴포넌트는 다른 컴포넌트나 기본 HTML 요소들을 조합하여 UI를 만들어 내는데 사용됩니다.
컴포넌트는 보통 JavaScript 함수나 클래스 형태로 정의되며, UI를 표현하는 JSX 코드를 반환합니다. 이때, 컴포넌트는 입력값(props)을 받아 처리하고, 필요한 상태(state)를 가질 수 있습니다.
React에서는 다양한 컴포넌트들이 미리 제공되며, 이들을 활용하여 사용자 정의 컴포넌트를 쉽게 만들 수 있습니다. 또한, 컴포넌트는 재사용성이 높아 코드의 중복을 줄이고, 유지보수를 용이하게 만들어 줍니다.
React에서는 다양한 종류의 컴포넌트가 제공됩니다. 이들은 개발자가 UI를 더욱 쉽게 구성하고 관리할 수 있도록 도와줍니다.
- 함수형 컴포넌트(Functional Component): React 함수형 컴포넌트는 JavaScript 함수로 구현되며, 함수 내부에서 JSX 코드를 반환합니다. React v16.8 이후부터는 함수형 컴포넌트에서도 상태(state)를 관리할 수 있도록 useState 훅(hook)이 제공됩니다.
- 클래스형 컴포넌트(Class Component): React 클래스형 컴포넌트는 JavaScript 클래스로 구현되며, render() 메서드 내부에서 JSX 코드를 반환합니다. 이전 버전의 React에서는 클래스형 컴포넌트에서 상태(state)를 관리할 수 있었지만, 현재는 함수형 컴포넌트에서도 관리할 수 있도록 useState 훅(hook)이 제공되므로, 클래스형 컴포넌트를 사용하는 경우는 많이 줄어들었습니다.
- 프레젠테이셔널 컴포넌트(Presentational Component): UI를 표현하는 역할만 수행하며, 상태를 관리하지 않는 컴포넌트입니다. 다른 컴포넌트와 조합하여 사용되는 경우가 많습니다.
- 컨테이너 컴포넌트(Container Component): 데이터를 관리하고 상태를 업데이트하는 등의 역할을 수행하는 컴포넌트입니다. 보통 상위 컴포넌트로부터 데이터나 이벤트를 전달받아 하위 컴포넌트에게 전달하는 역할을 합니다.
이외에도, React에서는 다양한 타입의 컴포넌트가 제공됩니다. 개발자는 이들 컴포넌트를 활용하여 복잡한 UI를 구성하고, 관리할 수 있습니다.
'학원수업 > 2월' 카테고리의 다른 글
02/28 국비개발자과정 64회차 (0) | 2023.02.28 |
---|---|
02/23 61회차 수업 React, Pojo, Spring 개념정리 (0) | 2023.02.23 |
02/21 58회차 (1) | 2023.02.21 |
02/20 57회차 웹서버 개발- (0) | 2023.02.20 |
02/17 56회차 수업 - RESTful API, JSP, Servlet정리 (0) | 2023.02.17 |
댓글