일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- javax.management.instancenotfoundexception: org.springframework.boot:type=admin
- 백준1946
- 리눅스환경
- 배열복사
- Decapsulation
- docker
- 디비버
- dbeaver
- 포트포워딩
- instancenotfoundexception
- 도커권한설정
- 배열최소값최대값
- jmx
- 배열빈도수
- 페이로드
- ubuntu
- 포트포워딩 안될때
- 네트워크모델
- 브로드캐스트
- SpringApplication
- 도커
- 백준
- 우분투
- springboot
- 리눅스계열
- 모래시계출력
- name=springapplication
- 유니캐스트
- wan
- 오름차순
- Today
- Total
다잘하고싶어
서블릿 본문
<목차>
- Dynamic Web Project 구조
- 웹과 웹 프로그래밍
- 톰캣 다운로드 및 이클립스에 톰캣 연결하기
- 서블릿
- 서블릿 등록 방법
- 고전방식
- 최신방식
- 서블릿 생명주기
- get/post
- url 구성요소
Dynamic Web Project 구조
Java Resources
- Web application 실행에 필요한 java 관련 리소스를 포함
Webcontent
- html, javascript, css, jsp, image 등 웹 컨텐츠를 포함
- 웹 어플리케이션 설정파일인 web.xml 도 여기에 위치
- 현재 사용하고 있는 브라우저 역시 서버와 클라이언트 관계
클라이언트가 서버가 될 수 있을까? YES
클라이언트 = 요청을 보내는 컴퓨터, 응답을 받는 컴퓨터
서버 = 요청을 받는 컴퓨터, 응답을 보내는 컴퓨터
둘다 된다!
WAS 를 톰캣을 이용해서 쓴다
webserver → 사용자에게 동적,정적 페이지를 돌려준다
정적페이지 ⇒ 이미 완성된 페이지( 데이터 바뀔 필요 없음)
웹과 웹 프로그래밍
- URL → 웹 상의 자원을 참조하기 위한 웹 주소
- 웹페이지 → 웹 브라우저를 통해서 보여지는 화면
- 웹서버 → 클라이언트 요청에 맞는 응답(웹페이지)을 제공
- java EE 버전이어야함
- 웹 어플리케이션 → 웹 서버를 기반으로 실행되는 응용 소프트웨어
- 웹 어플리케이션 서버 (Web Application Server, WAS) → 요청이 오면 알맞은 프로그램을 실행하여 응답 만들고 제공하는 서버
톰캣다운로드
이클립스에 톰캣 등록하기
https://22chaechae.tistory.com/70
이클립스에 톰캣 등록하기
자바는 Java EE 버전이어야 한다.
22chaechae.tistory.com
서블릿 Servlet
- Server + Applet 의 합성어
- 자바를 이용하여 웹에서 실행되는 프로그램을 작성하는 기술
- 자바를 이용하여 웹페이지를 동적으로 생ㅅ어할 수 있음
- Servlet 은 자바 코드 안에 HTML 을 포함
톰캣에는 여러개의 서블릿을 올릴 수 있다
Context root 를 직접 적음으로써, 이 안에 내 프로젝트가 있어! 알려주는 것
적어주지 않으면 프로젝트 이름이 default 값이 된다.
서블릿도 클래스! 클래스로 만들어준다
해당 클래스를 서블릿으로 만들기 위해서는 Servlet 인터페이스를 구현해야한다.
package com.ssafy.myservlet;
import java.io.IOException;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class MyServlet1 implements Servlet{
@Override
public void destroy() {
// 서블릿이 파괴될때
}
@Override
public ServletConfig getServletConfig() {
// 뭔가 서블릿 설정을 건드리는 것 같아
return null;
}
@Override
public String getServletInfo() {
// 서블릿 정보
return null;
}
@Override
public void init(ServletConfig config) throws ServletException {
// 서블릿 초기화할때
}
@Override
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
// 서블릿에서 요청을 처리할 때
}
}
→ 코드짜야할 게 너무 많아!! ⇒ 귀찮아!
따라서 이미 구현해놓은 서블릿을 가져오기
상속받았는데 왜 빨간줄? ⇒ 추상클래스라서!
import java.io.IOException;
import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class MyServlet2 extends GenericServlet{
@Override
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
// TODO Auto-generated method stub
}
}
왜 노란줄? 직렬화 필요!
이것도 귀찮아!
import javax.servlet.http.HttpServlet;
public class MyServlet3 extends HttpServlet {
}
서블릿
서블릿 등록방법( web.xml)
주소창에 url 을 썼을 때 매핑되어있는 서블릿이 있으니까 그걸로 이동한 것
등록방법은 고전적, 최신 방법 2가지
고전방식
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MyServlet4 extends HttpServlet{
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter writer = response.getWriter();
writer.append("<html>");
writer.append("<head>");
writer.append("<title>Hello</title>");
writer.append("</head>");
writer.append("<body>");
writer.append("<h1>MyServlet4</h1>");
writer.append("</body>");
writer.append("</html>");
}
}
동작하지 않는 이유는?
매핑이 안돼서
이런식으로 직접 연결해줘야 연결된다!
최신방식 - 어노테이션을 사용하여 등록
서블릿 생명주기 Life-Cycle
- 서블릿 인스턴스는 서블릿이 포함된 웹컨테이너에 의해 제어된다
- 서블릿 인스턴스가 존재하지 않으면 다음과 같은 작업을 수행한다
- 서블릿클래스 로드
- 서블릿 클래스 인스턴스 생성
- 서블릿 인스턴스 초기화
- 웹 컨테이너에 의한 서비스 메서드 호출
- destroy 메서드를 호출하여 서블릿 종료
- 서비스 메서드는 요청이 들어올 때 마다 호출된다
웹 컨테이너에 의한 서비스 메서드는 여러번!
import java.io.IOException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class LifeCycle
*/
@WebServlet("/LifeCycle")
public class LifeCycle extends HttpServlet {
private static final long serialVersionUID = 1L;
int initCnt =1;
int destroyCnt =1;
int doGetCnt=1;
/**
* @see HttpServlet#HttpServlet()
*/
public LifeCycle() {
System.out.println("생성자 호출");
}
/**
* @see Servlet#init(ServletConfig)
*/
public void init(ServletConfig config) throws ServletException {
System.out.println("init 메서드 호출" + (initCnt++) );
}
/**
* @see Servlet#destroy()
*/
public void destroy() {
System.out.println("destroy 메서드 호출" + (destroyCnt++));
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("doGet 메서드 호출" + (doGetCnt++));
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("doPost 메서드 호출");
}
}
URL 구성요소
프로토콜 → 절차를 포함한 통신규약
서버 → 웹 페이지를 요청할 서버의 주소, 실제 IP 주소나 도메인을 입력할 수 있음
경로 → 서버 내의 상세 경로
쿼리 스트링
→ 추가로 서버로 데이터를 전송하기 위해 사용
→ ? 마크를 적어 시작을 표시한다. parameter_name = value 형태로 작성, 파라미터가 여러개일 경우 & 로 구분하여 작성한다
아무것도 적지 않으면 디폴트는 get 방식
Welcome-file 이 의미하는 것은?
project 를 실행시켰을 때 저것들이 있는지 탐색 시작,
있다면? ..주세요라고 판단
만약 프로젝트 안에 index.html 이 있다면 저기로 연결된다
요청이 들어오지 않고(매핑되어있지않고) 단순히 context root 까지만 호출했을 때 웰컴파일에 있는 것들을 찾기 시작한다.
(+)
action = “” 의 의미? ⇒ 현재 URL을 다시 넣고 엔터 = 새로고침
action 에 슬래쉬 넣으면?? localhost:8080뒤의 / 를 의미하므로
컨텍스트루트를 없애버리고 action 뒤의 값이 적힌다. 주소가 꼬일 수 있음 주의!
action 뒤에 슬래쉬를 안넣으면 단순 경로로 지정됨.
response.setContentType 의 역할?
서버와 클라이언트 간의 요청과 응답 타입을 설정해준다.
두개의 순서가 바뀌면 안된다!
겟방식은 utf-8 이 안깨지는데 post 방식은 깨진다
요청하는 것도 세팅해줘야한다.
(+)
get 방식 요청 방법
- form=GET
- URL에 붙여서
- a 태그에 link 로
post 방식 요청
- form = post
(+)
name 은 쿼리스트링의 키, text 는 밸류
id 는 키, text 는 밸류
'이론학습 > Servlet&JSP' 카테고리의 다른 글
JSP (0) | 2023.04.11 |
---|---|
이클립스에 톰캣 등록하기 (0) | 2023.04.10 |