jsp

[jsp] 웹어플리케이션 / 내장객체 / HTTP 요청메서드 GET,POST

sian han 2022. 5. 2. 23:46

인터넷주소의 구조는 크게 3가로 이뤄져있다

1. 도메인   2. 어플리케이션   3. 소스페이지

 

http://192.168.0.100:9090/testsite/NowServ?name=value&name=value

프로토콜 : 서버와 클라이언트가 통신할 때 사용할 프로토콜

IP - 서버(컴퓨터)를 찾는 주소

        - localhost : 자신의 컴퓨터를 가리키는 가상 IP 주소이다. 곧바로 자신의 컴퓨터를 찾아간다 (내부접속)

PORT - 컴퓨터내에 있는 프로그램을 찾는 주소

            21 – ftp, 23 – telnet, 25 – smtp, 110-pop3, 80 – http(웹서버), 443 - https

어플리케이션 - 서버에서 자원의 위치, 폴더

소스페이지 - 웹페이지

파라미터 - ? 뒤의 인자값 (= 쿼리 문자열)

             - 이 소스 페이지를 호출할 때 넘겨주는 인자값               

 

 

※ 웹어플리케이션

  = testsite(를 의미함)

           ㄴ context, 웹프로젝트, 웹사이트 라고도 불린다

 

 

▶ 서블릿 (Servlet)

  - 웹페이지를 만들 때 사용되는 자바 기반의 웹 어플리케이션 프로그래밍 기술이다.

 

 

 

웹어플리케이션 구성요소 

웹서버 : 어플리케이션 서버에 웹 브라우저의 요청 처리를 요청하는 작업을 수행,

            자바EE사양을 모두 준수해서 만든 서버 - ex ) 아파치

웹 어플리케이션 서버 (WAS), 웹 컨테이너 : 웹부분만 구현한 서

                                                         요청된 페이지의 로직 및 데이터베이스와의 연동을 처리하는 부분

                                                           - ex ) 톰캣

데이터베이스 : 웹 어플리케이션이 필요로 하는 데이터를 저장 함 ex ) 오라클

웹 브라우저 : 웹에서 요청을 하는 클라이언트 ex ) 인터넷 익스플로러,크롬

 

  ▷ 웹 컨테이너 : 

        - 서블릿에 대한 요청을 받고 응답을 해주는 중간 역할

        - 요청을 넘겨받은 컨테이너는 HttpRequest와 HttpResponse객체를 만들어

          서블릿의 doPost(), doGet() 메서드 중 하나를 호출한다.

 

 

 

▶ JSP 페이지의 구성요소

 

<%@page    : page 디렉티브

      - page에 대한 정보 설정

                            ㄴ JSP 페이지가 생성하는 문서의 타입

                                JSP 페이지에서 사용할 커스텀 태그    

                                JSP 페이지에서 사용할 자바 클래스 지정

      - page 외에도 JSP 에서는

        taglib(태그 라이브러리를 지정),

        include(JSP 페이지의 특정 영역에 다른 문서를 메인에 포함시킴.

                   그래서 메인에 같은 변수가 있음 안됨)        디렉티브를 제공한다

<%@ 디렉티브이름 속성1="값1", 속성2="값2", ...%>
<%@ page contentType="text/html; charset=euc-kr" %>
<%@ page import="java.util.Calendar, java.util.Date" %>

 

                                                                                                          

<%     :  스트립트릿

    - JSP 페이지에서 자바 코드를 실행할 때 사용되는 코드의 블록

    - 스크립트릿은 jsp 페이지가 servlet으로 변환되고 이 페이지가 호출될 때 _jspService() 메서드 안에 선언됨

    - 여기에서 선언된 변수는 모두 지역변수임

<%
    자바코드1;
    자바코드2;
%>

 

 

 <%=     :  표현식

    - jsp페이지에서 웹 브라우저에 출력할 부분을 표현하기 위한 것

    - 스크립트릿과 표현식 대신에 쉽고 간단하게 사용할 수 있음

    - 스크립트릿내에서 출력할 부분은 내장객체인 out 객체를 사용 해서 출력함

                                                                    ㄴ jsp의 내장 객체 - response, request, out, session 등

<%= 출력할 값 %>
<%out.println("출력할 값");%>

 

<%!     :  선언부

   - JSP 페이지의 스크립트릿이나 표현식에서 사용할 수 있는 멤버변수나 메서드를 작성할 때 사용됨

<%!
    public 리턴타입 메서드이름(매개변수){
 	   자바코드...
	}
%>

 

 

 <%--jsp 주석 --%>

   - jsp 페이지에서만 사용됨

   - 화면에 표시되지도 않고, 실행되지도 않는다.

 

<!--html 주석-->

    - html 주석 내에 표현식 및 스크립트릿을 사용하면 그 코드들은 실행됨

 

▷ java 주석

<%
//한줄 주석
/*여러 줄 주석*/
%>

 

 

생성 후 웹어플리케이션에서 소스를 보면

<%@page, <%  코드가 위치한 부분은 공백으로 보이고

<%=  은 값으로 변환되어 출력된다

 

 

 

 

 

▶ jsp 동작구조

웹 브라우저에서 jsp 페이지를 웹 서버로 요청하면

웹 서버는 이걸 웹 컨테이너(WAS)로 넘김

요청을 받은 WAS

  1. 해당 jsp 페이지를 찾아서

  2. 서블릿(.java 파일 생성) 으로 변환하는 파싱 과정을 거친 후 

  3. 컴파일(.class 파일 생성) 을 하게 됨

컴파일된 서블릿은 웹브라우저에 응답되어 사용자가 이를 볼 수 있음

 

 

 

 

ex ) http://192.168.0.100:9090/testsite/day1/test03.jsp

1. 192.168.0.100 (IP)에 해당하는 컴퓨터 찾기
2. 9090 포트를 사용하는 톰캣 찾기
3. 톰캣의 기본디렉터리인 webapss에서 testsite/day1 폴더 찾기
4. test02.jsp 파일찾고 서버에서 실행
5. html 형식으로 클라이언트에게 전달하고 브라우저가 실행되어 우리가 봄

 

 

 

 

 

▷ jsp 구현방식 : 스크립트 방식

  - 웹 어플리케이션 프로그래밍은 구현하는 방식에 따라 실행코드 방식 (서블릿) 과

    스크립트 방식이있는데, jsp 는 스크립트 방식에 속한다

  - 컴파일되지 않은 스크립트 코드로서, 코드 변경을 원할경우 스크립트 코드만 고치면 된다

    스크립트 코드를 해석한 뒤 실행된다.

  - 번역 ! 은 페이지가 최초로 요청된 때 1번만 실행되고, 이후 해당 페이지의 요청이 있는 경우

     번역된 ! 코드가 실행됨

 

 

 

 


 

 

 

※ 내장객체

  - 별다른 선언과정과 객체 생성 없이 사용할 수 있는 9개의 객체들 (jsp에서 기본제공)

 

▶ request

      - HTTP 헤더 /  HTTP 바디로 구성되어 있음

      - request 기본 객체는 웹 브라우저가 전송한 파라미터를 읽어올 수 있는 메서드 제공

  ▷ String getParameter(name) 

          - 클라이언트에서 서버로 요청한 내용(파라미터)중에서 name으로 전달된 값을 get 해와라 ! 

  ▷ String[] getParameterValues(name) 

          - 이름이 name인 파라미터의 모든 값을 String 배열로 리턴함 / Checkbox 에서 주로 사용됨

 <%= request.getParameter("name") %>

 

 

response

      - 웹 브라우저로 응답할 응답 정보를 가지고 있음

      - 원래이름 HttpServletResponse 이거임

 

   void setContentType(type) 

          - 요청의 결과로 보여질 페이지의 contentType을 설정 한다

 

   void sendRedirect(url) 

          - url 을 주면 이 페이지로 이동해라 ! 

 

 

url 이동 (모두 get 방식, 단순이동)

HTML : <a>태그

자바스크립트 : location.href = 

jsp : response.sendRedirect(url)

 

             

 

out

      - jsp 페이지가 생성한 결과를 웹 브라우저에 전송해 주는 출력 스트림

      - jsp 페이지가 웹 브라우저에게 보내는 모든 정보는 out 객체로 통해서 전송됨

      - 표현식 <%=코드%> 와 <% out.println(코드)%>는 동일

 

  ▷ String println(str) 

          - 주어진 str값을 웹 브라우저에 출력함

 


※ HTTP 프로토콜

HTTP 란 ? 웹 브라우저와 웹 서버 사이의 데이터 통신 규칙

 - 링크를 클릭하면 웹 브라우저는 HTTP 요청 형식에 따 라 웹 서버에 데이터를 보냄

  - 브라우저가 서버에 요청할때 / 서버가 브라우저에 응답할때 모두 http 요청,응답 형식에 따라야 함

  - stateless, connectless의 특징을 갖는 프로토콜

         ㄴ상태정보 유지되지않음, 연결이 유지되지않음 (요청했을때 잠깐 유지되고 끊어짐)

 

요청의 주요 구성요소 -HTTP메소드 (GET, POST) - 접근하고자 하 는 페이지(url) -폼 파라미터

응답의 주요 구성요소 -상태코드 -컨텐츠 타입 (텍스트, 그림, html 등) -컨텐츠(html, 코드, 이미지 등)

 

 

 

 

▶ HTTP REQUEST METHOD

  - 클라이언트(웹브라우저)에서 서버(톰캣)로 요청시 데이터 전달방식

 

 

 

[1] GET

 - 무언가를 얻기 위한것이 목적. (서버야 내가 좀 얻어야겠어)

      ex ) 네이버 검색창에서 검색하면 검색어가 url 뒤에 붙어서 서버로 요청이날라감

 - 단순이동은 get

 - 보통 브라우저에서 링크를 통해 연결되는것이 GET 으로 요청이 됨

 - 혹은 tf 나 cb 값을 입력했는데 그 값이 url 뒤에 붙어서 전송되면 GET방식

 

전송버튼를 누른다는 것은 브라우저에서 서버로 request 를 한다는 것이다.

이때 http request header 양식에 맞추어 입력한 정보가 들어감

 

 

 

 

   ▷ GET 방식 Form

 

1. main

전송버튼을 누르면 form 태그의 속성중에서 action에 지정되어있는 result로 요청을하게됨 (값은 서버로 감)

전송을 눌렀을때 form 에 들어있는 값들을 get 방식으로 url 뒤에 포함하여 전달하게됨

최종적으로 url 에 포함된 값은 result 페이지로 가게 됨 (만약 result 페이지가 없으면 404 에러)

 

 

 

2. request

request : 내장객체

getParameter : 클라이언트에서 서버에 요청한 내용(파라미터)중에서 "name" 이름으로 전달된 값을 get 해와라

  => 입력받은 데이터를 서버에서 꺼내볼수있게 되는 것

getParameter 로 받은 값을 <% %> 안에 넣어서 브라우저에 다시 돌려주게 되는 것

서버콘솔 :       서버에서 확인 : [name,age]

 

 

 

 

 

[2] POST

 - 서버에 데이터를 주기 위한 것이 목적 (서버야 이 데이터들 좀 받아 ! 받아서 뭐좀해봐)

   사용자에게 입력값을 받야 할 때 (ex. 회원가입)

 - 파라미터들은 HTTP의 body(메시지 몸체)에 숨겨져서 가게 됨

               ㄴ request 든 response 이든 header/body 로 나눠져 진행됨

 

post 방식에서는 전송버튼을 누를 시 입력한 정보는 body 안에 입력된다

 

 

 

   ▷ POST 방식 Form

submit 전송을 누르면 form 태그의 속성중에서 action에 지정되어있는 test02_ok로

post 방식으로 url 에 포함해서 요청을 하게된다

만약 test02_ok 가 존재하지 않는다면 response로 404가 나오게된다

클라이언트가 서버로 요청한 값은 body 안에 포함되어있기 때문에 눈에는 보이지 않는다

 

 

 

▽ test02_ok

Post 방식 사용 시 input 태그로 요청된 파라미터들에대한 인코딩을 먼저 해줘야 함

request객체의 getParameter 메서드를 사용해서 값을 읽어옴

체크박스는 체크안하면 null이 넘어옴