[ 서블릿과 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을 얻어옴 |
'프로그래밍 언어 > 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 |