[SIST] JSP_days02/days03

2022. 6. 15. 22:45·TIL/View Template
728x90
반응형

시작하기 전) <%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 구조 설명

- <%@ page %> : 지시자


- contentType="text/html : JSP 페이지로 text 형식의 html 문서를 생성한다.


- charset=UTF-8 : JSP 페이지로 문서를 생성할 때 캐릭터셋(charset)인코딩은 UTF-8로 생성하겠다.
   > charset의 기본값 : ISO-8859-1(한글 깨짐)
   > 따라서 UTF-8 또는 EUC-KR 인코딩을 사용(한국에서만 사용할 거면 EUC-KR로!)


- pageEncoding="UTF-8" 이 부분은 다음에 자세히 설명해주실 예정


1. GET 방식 전송과 POST 방식 전송

- form 태그에 method 기본 값은 GET 방식

 

- GET 방식은 요청URL에 파라미터를 붙여서 전송한다. 즉, 쿼리스트링에 ? 뒤로 날아가는 것

ex) http://localhost/jspPro/days02/ex07_ok.jsp?name=%ED%99%8D%EA%B8%B8%EB%8F%99&gender=f

 

- POST 방식은 데이터 영역을 이용해서 파라미터를 전송한다.

 

- GET 방식은 전송할 수 있는 파라미터 값의 길이 제한이 있지만, POST 방식은 데이터 영역을 이용해서 데이터를 전송하기 때문에 길이의 제한이 없다.


1-1. 요청 파라미터 인코딩

- 웹 브라우저는 웹 서버에 파라미터를 전송할 때 알맞은 캐릭터 셋을 이용해서 파라미터 값을 인코딩함

 

- 반대로 웹 서버는 알맞은 캐릭터 셋을 이용해서 웹 브라우저가 전송한 파라미터 데이터를 디코딩함

 

- 웹 브라우저가 인코딩할 때 사용한 캐릭터 셋과 웹 서버가 디코딩할 때 사용한 캐릭터 셋이 다르면, 웹 서버는 잘못된 파라미터 값을 사용하게 됨

출처 : 최범균의 JSP

 

response.setContentType("text/html; charset=UTF-8")

- 서블릿을 응답할 때 한글이 깨지지 않도록 맨 위에 설정

 

- 응답할 때 사용

 

request.setCharacterEncoding("UTF-8")

- UTF-8 데이터를 전송하면 WAS(톰캣8)는 따로 디코딩 charset을 설정하지 않으면 기본 get 방식은 UTF-8로 디코딩을 하지만, 기본 POST 방식은 ISO-8859-1로 디코딩을 하기 때문에 POST 방식은 charset을 설정해 주지 않으면 한글이 깨져서 보인다.

 

- 요청 후 응답 받을 때 사용

 

비유) A가 영어로 작성하여 WAS가 영어로 받음(CharacterEncoding) B가 일본사람이라면 일본어로 번역하여 다시 보내줄 때(ContentType)

 

PrintWriter out = response.getWriter()

- 응답할 때 사용하는 메서드

- out으로 출력하겠다.

- 요청을하면 html 문서를 출력해주어야 함(응답)

   out.println() 으로 html 태그 출력

   ex) out.println("<!DOCTYPE html>");


2. 서블릿(Servlet)

2-1. 서블릿(Servlet)이란?

- java 언어를 사용하는 웹 기술(서블릿, jsp)
- JSP 표준이 나오기 전에 만들어진 표준

 

2-2. 서블릿(Servlet) 구현 방법(과정)

1) [서블릿 규약]을 따르는 자바 클래스 선언
   ㄱ. 자바 클래스의 접근 지정자 : public
   ㄴ. javax.servlet.http.HttpServlet 클래스 상속 받아야함
   ㄷ. service(), doGet(), doPost() 메서드 오버라이딩

         > service 함수는 get, post 방식 모든 요청을 처리

         > doGet 함수는 get 방식의 요청이 있으면 호출되어짐

         > doPost 함수는 post 방식의 요청이 있으면 호출되어짐

2) 자바 코드를 컴파일해서 클래스 파일 생성


3) 클래스 파일(.class)을 반드시 WEB-INF/classes 폴더 안에 넣어둬야 한다.

* 2) + 3) 작업을 이클립스 툴을 사용하면 자동으로 컴파일 + classes 폴더에 넣기 때문에 안해도 된다.

4) web.xml(DD파일)에 서블릿 등록하는 작업(4. Servlet 등록 참조)

- web.xml 파일을 수정했으면 서버 재시작 필수, console 창에서 에러가 발생했는지 확인하기

 

- 서블릿을 등록하려면 2가지 설정을 해야함(4. Servlet 등록 참조)

   ㄱ. 서블릿으로 사용할 클래스

   ㄴ. 서블릿과 URL 간의 매핑(3. URL 패턴 매핑 규칙 참조)

      > 서블릿 클래스를 요청할 때는 요청URL로 인해서 요청하는 것을 매핑이라고 함


5) 톰캣 등의 웹 서버 실행


6) 요청URL를 통해 서블릿 응답

- 요청URL? context path 뒤에 있는 URL이 요청 URL이다.

   통신규약//도메인/context path/요청URL

   ex) http://localhost/jspPro/요청URL


1) 서블릿 규약을 따르는 자바 클래스 선언

- 프로젝트 폴더에 src/main/java 경로에 Class 생성

- superclass에 HttpServlet 넣기

 

- Alt+Shift+S 단축키로 doGet, doPost, service 메서드 오버라이딩

 

Now.java 코드


3. URL 패턴 매핑 규칙

 1) 무조건 /로 시작해서 /* 끝나는 것 == / ~~~ /*    : 경로 매핑을 위해 사용


 2) 무조건 *로 시작해서 그 뒤에 내가 원하는 확장자명 == *.확장자명    : 확장자에 대한 매핑을 할 때 사용


 3) 오직 / 사용 == / 외에 아무것도 없음    : 모든 것을 의미함. 기본 서블릿으로 매핑


 4) 위 3가지 규칙 외 나머지 다른 문자열은 정확한 매핑을 위해서 사용

 

요청 URL 패턴 예시)

/foo/bar/ 1) 해당
/bax/* 1) 해당
/catalog  4) 해당
/ 3) 해당
*.bop 2) 해당

 

출처 : 최범균의 JSP

 

요청 URL 요청 URL 패턴 설명
http://localhost/jspPro[/foo/bar/index.html] /foo/bar/ http://localhost/jspPro[/foo/bar/index.html]로 요청이 들어와서 URL 패턴과 일치할 시 서블릿 호출
http://localhost/jspPro[/foo/bar/lndex.bop] /foo/bar/ http://localhost/jspPro[/foo/bar/lndex.bop]로 요청이 들어와서 URL 패턴과 일치할 시 서블릿 호출

4. 서블릿(Servlet) 등록

1번 작업 : 서블릿으로 사용할 클래스

<servlet></servlet> 태그 안에 <servlet-name></servlet-name>태그와 <servlet-class></servlet-class> 태그를 사용하여 서블릿으로 사용할 클래스와 클래스명을 명명한다.

 

<description></description> 태그는 설명을 달 수 있는 태그이다.

 

2번 작업 : 서블릿과 URL 간의 매핑

<servlet-mapping></servlet-mapping> 태그 안에 <servlet-name></servlet-name> 태그와 <url-pattern></url-pattern> 태그를 사용하여 URL 패턴을 가진 요청URL이 들어오면 서블릿 이름을 가진 서블릿을 응답한다.

 

- 서블릿 규약을 따르는 자바 클래스를 선언하고 서블릿을 등록하면 Deployment Descriprot 안에 Servlet Mappings와 Servlert에서 생성한 패턴과 서블릿을 확인할 수 있다.


[ 서블릿 구현하는 예제(2,3,4번 관련) ]

- ex02.jsp / Now.java / web.xml 

- web.xml에 서블릿을 등록하는 작업은 4. 서블릿 등록 참조

- Now.java는 서블릿 규약을 따르는 부분의 Now.java 코드 참고

 

[ex02.jsp]

> ex02.jsp를 실행시켜 아래의 a 링크 태그를 클릭하면 요청 URL을 통해 서블릿(Now.javA)이 응답하여 웹 브라우저를 띄워준다.

[응답한 서블릿 결과]


5. @WebServlet 어노테이션을 사용해서 자동으로 서블릿 등록

- 서블릿 version 2.5까지는 서블릿을 web.xml에 등록해야 서블릿 클래스 사용 가능

 

- 서블릿 version 3.0부터는 @WebServlet 어노테이션을 사용하면 웹 컨테이너(ex. 톰캣)이 자동으로 서블릿을 등록

 

- 현재 사용하고 있는 서블릿 version 확인은?

   > WAS 서버 version에 따라서 달라지고 현재 본인이 사용하고 있는 tomcat 8.5는 서블릿 4.0 version이다. (톰캣은 사이트에 접속하여 각 버전의 Reference 확인하면 되어짐)


[@WebServlet 어노테이션을 사용해서 자동으로 서블릿 등록하는 법]

- src/main/java 안에서 우클릭하여 생성을 하면 위와 같은 과정을 거치지 않고 바로 서블릿을 생성할 수 있다.

 

 

 

- URL 매핑 패턴도 URL mappings에서 Add 클릭 후 추가할 수 있다.

- Description에는 설명하는 글을 작성

 

- doPost, doGet, service 선택 후 finish


[ @WebServlet 어노테이션을 사용해서 자동으로 서블릿 등록하는 예제 ]

[ex03_ok.jsp]

 

[ex03.jsp]

 

[ @WebServlet 어노테이션으로 Info.java 생성 ]

> URL mappings에서 Add 클릭 후 추가한 패턴과 Description 내용이 아래와 같이 나타남

 

[Info.java 전체 코드]

> href의 경로를 context path로 지정해주면 경로가 바뀌어도 잘 가져와진다. (6. request 정리 참조)

 

[결과]

 

 


6. JSP 기본 객체 중에 가장 많이 사용하는 request 객체

6-1. request 기본 객체가 제공하는 기능

1) 클라이언트(웹 브라우저)와 관련된 정보 읽기 기능


2) 서버와 관련된 정보 읽기 기능


3) 클라이언트가 전송한 [요청] 파라미터 읽기 기능


4) 클라이언트가 전송한 요청 헤더 읽기 기능


5) 클라이언트가 전송한 쿠키 읽기 기능
    (js 쿠키 정보 : document.cookie)


6) 속성 처리 기능


6-2. 클라이언트 정보 및 서버 정보 읽기

출처 : 최범균의 JSP

예시)


6-3. request 기본 객체의 요청 파라미터 메서드

1) getParameter(String name) *** 가장 많이 사용 ***
2) getParameterValues(String name)
3) getParameterNames()
4) getParameterMap()

출처 : 최범균의 JSP

 

예제)

[ex07.jsp]

 

[ex07_ok.jsp]


[결과]

- ex07.jsp에서 체크한 라디오버튼과 체크박스의 값을 ex07_ok.jsp에도 동일하게 적용 되어짐


6-4. request 객체로 헤더 정보를 얻어올 수 있다.

- http 프로토콜의 헤드에는 부가적인 정보가 담겨있다.(웹 브라우저 종류, 선호하는 언어 등등)

 

1) String getHeader(String name) : 지정한 이름의 헤더 값을 구한다
2) Enumeration getHeaders(String name) : 지정한 이름의 헤더 목록 반환
3) Enumeration getHeaderNames() : 모든 헤더의 이름 반환 ***
4) int getIntHeader(String name) : 지정한 헤더의 값을 정수 값으로 반환
5) long getDateHeader(String name) : 지정한 헤더의 값을 시간 값으로 반환(1970.01.01~ms)

출처 : 최범균의 JSP

예시)

728x90
반응형

'TIL > View Template' 카테고리의 다른 글

[SIST] JSP_days04_부서 선택시 해당 부서의 사원 정보를 테이블로 출력하는 예제  (0) 2022.06.18
[SIST] JSP_days03_response 객체 / 리다이렉트(redirect) / 포워드(forward) / GET 방식 + 서블릿 + JDBC + 포워딩 예제(JSTL 맛보기)  (0) 2022.06.16
[SIST] JSP_days02_DB연동해보기(JDBC)  (0) 2022.06.15
[SIST] JSP_days02_예제  (0) 2022.06.15
[SIST] JSP_days01  (0) 2022.06.14
'TIL/View Template' 카테고리의 다른 글
  • [SIST] JSP_days03_response 객체 / 리다이렉트(redirect) / 포워드(forward) / GET 방식 + 서블릿 + JDBC + 포워딩 예제(JSTL 맛보기)
  • [SIST] JSP_days02_DB연동해보기(JDBC)
  • [SIST] JSP_days02_예제
  • [SIST] JSP_days01
야리니
야리니
오늘보다 내일 더 성장하는 개발자가 되기 위한 야리니 블로그입니다 :)
    반응형
    250x250
  • 야리니
    야리니의 step by step
    야리니
  • 링크

    • GitHub
    • Linkedin
  • 전체
    오늘
    어제
    • 분류 전체보기 (477)
      • TIL (379)
        • Java (97)
        • Kotlin (28)
        • JPA (16)
        • Spring (37)
        • Oracle (22)
        • JDBC (7)
        • Web(HTML, CSS, JS, jQuery) (90)
        • View Template (31)
        • AWS (7)
        • HTTP (7)
        • CS (5)
        • Linux, Unix (2)
        • Python (20)
      • Trouble Shooting(Error) (37)
      • Algorithm (15)
      • Git,GitHub (8)
      • Diary (23)
      • 독서 (9)
      • Etc (6)
        • Mac (1)
        • 학원준비과정 (2)
  • 블로그 메뉴

    • 방명록
    • 태그
  • 공지사항

    • 안녕하세요 :)
  • 인기 글

  • 태그

    CSS
    java기초
    국비지원학원
    java
    코틀린
    oracle
    Kotlin
    백엔드 개발자
    HTML
    쌍용교육센터
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
야리니
[SIST] JSP_days02/days03
상단으로

티스토리툴바