본문 바로가기

안녕하세요!

프로그래밍 언어/JSP

JSP_22.10.27

[ 서블릿과 JSP ]

서블릿

    - 자바 기반의 웹 프로그램 개발 위해 만들어진 기술(WAS: Web Application Server)

JSP(Java Server Pages)

    - 서블릿에서 HTML과 데이터 결합을 손쉽게 처리하기 위해 만들어짐

    - HTML 중심으로 데이터 처리

    - HTML에서 자바 코드 사용할 수 있는 구조

    - 컨테이너에 의해 서블릿 형태의 자바 코드로 변환 후 컴파일되어 컨테이너에 적재되느 구조

    - <%= %> : JSP 출력문, 사칙연산, 간단한 변수 출력 등에 사용

    - <% %> : 스크립트릿, 해당 블록 안헤서 자바 코드 자유롭게 사용

    - JSTL(JSP Standard Tag Library) / EL(Expresion Language)

      1) <c:foreach)> : 반복분 제공하는 커스텀 태그

      2) ${m.name} : 표현 언어, 자바 객체 멤버 출력 가능

      3) 사소한 디자인 변경도 서버를 통해 실행해야 함

    - data-*- : 서버 실행 없이도 디자인 확인 가능한 구조

 

[ Rest API ]

REST(RePresentaional State Transfer)

    - 네트워크상에서 클라이언트와 서버 사이의 통신을 구현하는 방법 중 하나

    - Representation : 클라이언트 서버로 요청을 보냈을 때 서버가 이에 대한 응답으로 보내주는 Resource의 상태

    - Resource : 여러 형태의 Representation(json, xml, text, rss 등)으로 전달할 수 있는 것

    - Restful

      1) REST 원칙을 따르는 시스템

      2) 웹 기반으로 구현된 서비스

      3) REST 자체는 특정 언어나 컨테이너를 요구하지 않기 때문에 자바, 서블릿, Node.js, 파이썬 등 다양한 언어와 서버              소프트웨어 구현 가능

JAX-RS

    - REST API 개발 위한 서버 프로그램 표준 규격

    - 스프링 프레임워크 없이 개발 시, JAX-RS 사용 / 스프링 크레임워크 사용 시, RestController/JAX-RS 둘 중 하나 사용

@Path("/addrbook")    // 현재 클래스에서 처리할 URL의 진입점(context root/api/addrbook)
public class RestApiService {
    Logger logger = Logger.getLogger("RestApiService);
    AddrBookDAO dao = new AddrBookH2DAO();

    @GET    // 지정된 URL 요청을 GET 방식으로 호출했을 때 동작하도록 함
    @Path("list")    // 메서드가 실행될 URI 요청(context root/api/addrbook/list)
    @Produces(MediaType.APPLICATION_JSON)    // 리턴된 데이터를 JSON 형식으로 지정
    public List<AddrBook> getList() {
        List<AddrBook> datas = dao.getAll();
        logger.info("API call: /list ");
        return datas;
    }
}

    - @

      1) 자바 애너테이션 사용해 클래스와 메서드에 필요한 정보를 제공하는 것만으로 별도의 데이터 변환 과정 없이 손쉽              게 API 서버 프로그램 개발 가능

      2) 톰캣을 실행하는 것만으로 서버가 동작하고 기존의 다른 웹 서비스도 함께 운영 가능

    - 동기(블로킹)

      1) 요청 후 응답을 받기까지 대기하는 방식

      2) 대기하는 동안 다른 일을 처리할 수 없는 상태가 되어 요청에 시간이 걸리는 경우 비효율적인 방법

    - 비동기(논블로킹)

      1) 즉각적인 응답 결과가 필요 없는 경우 요청 후 응답을 기다리지 않고 다른 일을 하다가 응답이 오면 그때 해당 응답              처리하는 방식

      2) 대기시간 없이 다른일 할 수 있음

 

[ 서블릿 ]

○ 장점

    - 자바 기반이므로 자바 API 모두 사용 가능

    - 운영체제나 하드웨어의 영향 받지 않으므로, 한 번 개발된 애플리케이션은 다양한 서버 환경에서 실행 가능

    - 웹 애플리케이셔에서 효율적인 공유 방법 제공

    - 다양한 오픈소스 라이브러리와 개발 도구 활용 가능

○ 단점

    - HTML 응답 위해서 출력문으로 문자열 결합 사용해야함

    - 서블릿에서 HTML을 포함할 경우 화면 수정이 어려움

    - HTML 폼의 데이터 처리가 불편함

    - 기본적으로 단일 요청과 응답을 처리하는 구조로 다양한 경로의 URL 접근을 하나의 클래스에서 처리하기 힘듦

public class HelloWorldServlet extends HttpServlet {
    public doGet(HttpServletRequest request, HttpServletResponse response)    // HTTP GET 요청 처리 메서드
    throws ServletException, IOException, IOException {
    ...
    }
    public doPost(HttpServletRequest request, HttpServletResponse response)    // HTTP POST 요청 처리 메서드
    throws ServletException, IOException, IOException {
        doGet(request, response);    // doGet(), doPost() 메서드에서 파라미터로 사용
    }
    ...
}

○ HttpServletRequest 주요 메서드

    - HTTP 프로토콜의 request 정보를 서블릿에 전달하기 위한 목적으로 사용

    - 서블릿에서 클라이언트와 연결되어 처리할 작업은 모두 HttpServletRequest를 통해야 함

getPatameter(name) hong1234 name 속성으로 전달된 파라미터 값
getPatameterValues(name) {hong, kang, kim} 동일한 name 속성으로 전달된 모든 파라미터 값
getRequestURL() http://www.xxx.com:8080/shop/list.jsp URL
getRequestURI() /shop/list.jsp URL에서 스키마, 서버 이름, 포트 번호를 제외한 나머지 주소와 파라미터
getScheme() http http, https, HTP와 같은 프로토콜
getServerName() www.xxx.com 서버 이름
getServerPort() 8080 서버 포트
getContextPath() /shop 콘텍스트 경로
GetMethod() GET GET, POST 등의 HTTP 메서드
isSecure() false SSL 보안 여부, https와 같은 보안 채널의 사용 여부(true/false)
getLocale() ko_KR 지역 정보
getProtocol() HTTP/1.1 사용하는 프로토콜, 프로토콜/메이저 버전, 마이너 버전
getLocalAddr() 127.0.0.1 서버의 로컬 IP 주소
getRemoteAddr() 210.102.111.212 클라이언트 IP 주소

○ HttpServletReponse 주요 메서드

    - 클라이언트에서 서버로 전달하는 것과 관련된 것이 아닌, 서버에서 클라이언트로 전달 목적을 위한 기능으로 구성

    - 서블릿 컨테이너는 요청 클라이언트에 응답을 보내기 위한 HttpServletResponse 객체를 생성해 서블릿에 전달

    - 서블릿은 해당 객체를 이용해 content type, 응답 코드, 응답 메시지 등을 전송 가능

sendRedirect(String location) 클라이언트에 Redirect 응답을 보낸 후 특정 URL로 다시 요청
getWriter() 클라이언트로 데이터를 보내기 위한 출력 스트림을 리턴
setContentType(String type) 클라이언트에 전달되는 콘텐츠 타입 지정
addCookie(Cookie cookie) 응답에 쿠키를 추가
addHeader(String name, String value) 헤더에 name과 value를 추가
encodeURL(String url) 클라이언트가 쿠키를 지원하지 않을 대 세선 id를 포함한 특정 URL을 인코딩
hetHeaderNames() 현재 응답이 헤더에 포함된 name을 얻어옴
728x90
반응형

'프로그래밍 언어 > JSP' 카테고리의 다른 글

JSP_22-10-28(1)  (0) 2022.10.28
쇼핑몰 연습(1)  (0) 2022.10.28
JSP_22-10-25  (0) 2022.10.26
JSP_toDo list 만들기  (0) 2022.10.24

loading