안녕세계
[T아카데미] 모바일 서버 프로그래밍 기본 - 2일차 본문
[T아카데미] 모바일 서버 프로그래밍 기본 - 2일차
Junhong Kim 2016. 6. 28. 17:50● JSP(Java Server Page)
- JSP도 서블릿과 마찬가지로 자바를 기반으로하는 웹 어플리케이션 프로그래밍 기술이다.
- JSP는 HTML, XML 등 클라이언트가 요청한 문서를 생성하는데 주로 사용된다.
- WebContent 아래에 만들어서 사용
● JSP 실행 과정
- 웹 컨테이너는 JSP 문서 전체를 서블릿 클래스의 소스 코드로 변환 후 컴파일하여
서블릿으로 만든 다음 실행하여 그 결과를 웹브라우저로 전달한다.
[Servlet과 동일한 기능]
init = _jspInit
destory = _jspDestory
service = _jspService
● JSP의 기초 문법
● 지시자(Driective)
: JSP페이지에 대한 설정 정보를 지정할 때 사용, <%@ ... %>
1) page
: 자바의 import를 쓰려면, <%@ page %> 는 여러개 있어도 된다.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import = "java.util.Date" %> // import 구문을 대신 만들어 주는 지시자
<%@ page import = "java.util.ArrayList" %>
<%@ page import = "java.util,Date,java.util.ArrayList" %> // 한번에 여러개 쓰려면 ,(comma)로 구분
※ 일일히 안쓰고 자바 클래스 뒤에 [ctrl + space] 하면 이클립스가 자동완성으로 도와주기 때문에 직접 타이핑 하는 일은 없다.
2) include
: include 지시자는 다른 JSP 페이지나 HTML 문서를 불러다가 현재 JSP 페이지의 일부로 포함한다.
2-1) static include (JSP 에서만 가능)
- 불러올 대상은 file 이라는 속성을 이용해 지정할 수 있다.
<%@ include file="d2.jsp" %>
※ 포함할 file에 있는 변수 이름과 포함한 file에서 동일한 변수 이름을 사용할 수 없다
2-2) dynamic include (JSP 에서만 가능)
- 다른 문서를 또다른 jsp에 포함시키기 위함.
- 메소드 단위로 분리 된다.
<jsp:include page="d2.jsp"></jsp:include>
[위 처럼 사용하면 아래 처럼 변환 된다]
org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response, "d2.jsp", out, false);
2-3) Servlet에서 include 하는 방법
<%
RequestDispatcher dispatcher = request.getRequestDispatcher("d2.jsp");
dispatcher.include(request, response);
%>
3) taglib
: <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
● 스크립트 요소
: JSP에서 실시간으로 문서 내용을 생성하기 위해 사용, 스크립트 요소 내의 자바코드는 서버 쪽에서 실행된다.
1) 선언부(Declaration) : 자바 메서드(함수) 생성, <%! 자바 코드 %>
- 멤버 영역으로 이동시킴
- 멤버 변수를 정의하거나 멤버 메서드를 정의할 때 사용하는 것
2) 스크립트릿(Scriptlet) : 자바코드 실행, <% 자바 코드 %>
3) 표현식(Expression) : 값 출력, <%= 변수명 %> // 얘는 semi-colon이 필요 없다. 왜냐하면 변환하여 자동적으로 만들어주기 때문
4) 주석 : JSP 주석, <%-- 주석 내용 --%> // 소스보기할 때 보이지 않는다.
<% for(int i = 0; i < 10; i++) { %> <tr><td>값 <%= i %></td></tr> <% } %> |
● 기본 객체(내장 객체)
: 웹 어플리케이션 프로그래밍을 하는데 필요한 기능을 제공하는 객체
1) request : 서블릿 doGet, doPost 메소드의 첫번째 파라미터와 동일한 역할
2) response : 서블릿 doGet, doPost 메소드의 두번째 파라미터와 동일한 역할
3) out : 웹 브라우저로 HTML 코드를 출력하는 기능
4) session : 세션에 관련된 기능
.. 등 9개
● 표준 언어 - 익스프레션 언어 ${ ... }
: JSP 페이지 내부에서 사용되는 간단한 스크립트 언어, ${...}
1) 익스프레션의 식
<%= nTotal =>
2) 익스프레션 언어의 식 (EL식)
${ nTotal }
※ 익스프레션 언어? 복잡한 로직이나 데이터는 서블릿에서 처리하고 그 결과를 출력하는 일만 JSP가 담당하도록 만드는 방법.
● JSP 페이지가 이동에 사용되는 메서드
* forward 메소드
- forward 메소드는 JSP뿐만아니라 서블릿이나 HTML 문서 등 다른 웹 자원의 호출도 가능하다.
호출할 곳에서 할 일을 모두 마치고 정보처리의 흐름을 넘겨 주고자 할 때 주로 사용 한다.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <% // 두 수를 입력받아 그 합을 구하라 String num1 = request.getParameter("num1"); String num2 = request.getParameter("num2"); int su1 = Integer.parseInt(num1); int su2 = Integer.parseInt(num2);
int sum = su1 + su2;
// g2.jsp에서 출력
// 두번째 파라미터에 객체형을 넣어야하는데, 요즘은 자동으로 래퍼클래스로 변환 됨. request.setAttribute("sum", sum); //request.setAttribute("num1", num1);
//다른 문서에 끼기 or 다른 문서에서 가져오기 RequestDispatcher dispatcher = request.getRequestDispatcher("g2.jsp"); dispatcher.forward(request, response); %> |
* forward / sendRedirect
[공통점]
- 다른 JSP 페이지나 HTML 문서를 호출하는 방법으로는 sendRedirect 메소드를 사용하는 방법과 forward 메소드를 사용하는 방법이 있다.
(예: forward)
RequestDispatcher dispatcher = request.getRequestDispatcher("g2.jsp");
dispatcher.forward(request, response);
(예: redirect)
response.sendRedirect("login.html");
[차이점]
1) sendRedirect 메소드는 URL이 브라우저에서 호출되지만, forward 메소드는 서버에서 직접 호출됨
2) sendRedirect 메소드는 다른 웹 서버의 자원도 호출할 수 있지만,
forward 메소드는 같은 웹 어플리케이션 디렉토리 내에 있는 자원만 호출 가능
- forward 메소드는 서버에서 직접 호출 됨 (서버 내에서만 이동이 가능)
- sendRedirect 메소드는 URL이 브라우저에서 호출 됨 (다시 호출하는 것) - 302가 요청이 오면 다시 응답을 함. 그래서 두번 접속, 2개 뜸
- forward 서버에 다시 접속 / sendRedirect 클라이언트에 다시 접속
※ 모바일 서버 개발자는 sendRedirect 를 사용하면 안된다. (만약 이동해야 한다면 forward를 써야 함)
● 쿠키(Cookie)
: 여러개의 화면으로 구성된 웹 어플리케이션에서 로컬에 있는 쿠키 데이터 저장소를 이용해 데이터를 주고 받는 방법.
- 쿠키 기술은 전달할 데이터를 웹 브라우저로 보냈다가 웹 서버 쪽으로 되돌려 받는 방법이다.
- 로컬에 있는 쿠키 저장소는 브라우저가 관리하는 디렉토리 혹은 메모리 영역이다.
- 클라이언트 컴퓨터의 하드에 저장된다(C: , D: 에 저장 됨)
쿠키는 (name,value) 쌍이다. 쿠키의 두번째 파라미터는 문자열 밖에 안 됨.
1) 쿠키저장
response.addCookie();
2) 쿠키조회
request.getCookies();
3) 쿠키삭제
/* 1시간 동안 유효한 쿠키 설정 */
cookie.setMaxAge(3600); // 60 * 60
/* 바로 삭제되는 쿠키 */
cookie.setMaxAge(0);
/* 웹 브라우저가 끝날 때 삭제되는 쿠키(default)*/
cookie.setMaxAge(-1);
● 세션(Session)
: 여러개의 화면으로 구성된 웹 어플리케이션에서 웹 서버에 있는 데이터 영역을 이용해 데이터를 주고 받는 방법.
- 서버의 메모리에 저장
1) 사용
// default : true
// true : 세션이 없으면 세션을 생성하고 그 객체를 반환, 세션이 있으면 세션 객체를 반환
// false : 세션이 없으면 null 반환, 세션이 있으면 세션 객체를 반환
HttpSession session = request.getSession(true); // 세션 만들기
session.setAttribute("name", "BOB");
String name = (String) session.getAttribute("name");
※ <%@ page %> 지시자에 session ="false" 를 하면 직접 다시 session 객체를 만들어야 한다
true일 경우에는 기본으로 내장되어있는 session 객체를 그냥 사용하면 됨.
2) 삭제
session.removeAttribute("name"); // 세션 데이터 삭제
session.invalidate(); // 세션 끝내기, logout 등에서 사용
3) 수정
session.setAttribute("name","COC");
● JSP 액션 (표준 액션)
: XML 태그와 같은 모양을 취하며 JSP 페이지에서 다른 페이지의 서블릿이나 자바 빈의 객체에 접근할 수 있도록 태그를 이용해 구현된 기능
- JSP 규격서에서는 XML 기술을 이용해 기존의 JSP 문법을 확장하는 방법을 제공.
- 자바소스를 대체 해주는 것
1) <jsp:useBean>
- JSP상에서 자바 객체를 만들고자 할 때 사용하는 액션 태그이다.
<%@page import="com.tacademy.sam.controller.Data"%> <% Data d1 = new Data(); %> <jsp:useBean id="d2" class="com.tacademy.sam.controller.Data"></jsp:useBean> |
* <jsp:useBean>의 scope 의미 - 웹에서 사용하는 것
1) page 영역 : 하나의 JSP페이지를 처리할 때 사용되는 영역 -- 현재
2) request 영역 : 하나의 HTTP 요청을 처리할 때 사용되는 영역 -- 서로 같은 객체
3) session 영역 : 하나의 웹 브러우저와 관련된 영역 -- 서로 다른 객체, 서울 사람/제주도 사람 다르게
4) application 영역 : 하나의 웹 어플리케이션과 관련된 영역 -- 서로 같은 객체, 모든 서버에서 하나만
2) <jsp:jsp:setProperty>
- useBean 태그를 통해 생성한 객체의 속성을 변경하고자 할 때 사용하는 액션 태그이다.
<%@page import="com.tacademy.sam.controller.Data"%> <% Data d1 = new Data(); d1.setName("korea"); %> <jsp:useBean id="d2" class="com.tacademy.sam.controller.Data"></jsp:useBean> <jsp:setProperty property="name" name="d2" value="korea"/> |
3) <jsp:jsp:getProperty>
- useBean 태그를 통해 생성된 객체의 멤버 변수값을 클라이언트로 전송하는 액션태그이다.
<body> name <%= d1.getName() %><br> name <jsp:getProperty property="name" name="d2"> </body> |
4) <jsp:forward>
- 다른 JSP 페이지로 제어를 넘기자고할 때 사용하는 액션태그이다.
RequestDispatcher dispatcher = request.getRequestDispatcher("g2.jsp");
dispatcher.forward(request, response);
<jsp:forward page="a4.jsp"></jsp:forward>
- 위 두가지 코드는 동일한 기능 -
● JSTL(JSP Standard Tag Library) : 표준 태그 라이브러리
: 커스텀 태그 중 자주 사용되는 것들을 별도로 표준화한 태그 라이브러리
- JSP에서 사용할 수 있는 다양한 커스텀 액션과 함수를 제공하는 외부 라이브러리
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:forEach var="cnt" begin="1" end="5"/> // step 생략하면 step="1"
<c:forEach var="dish" items="${MENU}"/>
● 커스텀 태그
: JSP를 확장시켜 주는 기능으로 액션 태그와 마찬가지로 태그 형태로 기능 제공
<%@taglib prefix="util tagdir="/WEB-INF/tags" %>
ㄴ표준은 jsp ㄴ태그의 위치
● 서버 응답 코드 값
100대 : 아직 서버가 클라이언트에 다온게 아니다 (버퍼링 중) - 잠시 대기중, 거의 안함
200대 : 성공, 서버가 클라이언트로 잘 보냈습니다. (사실상 200대는 200밖에 없음)
300대 : 서버에서 클라이언트로 보내는게 아니라 다른 애한테 붙어서 받아가라, 브라우저가 다시 접속 (예) sendRedirect - 모바일은 X
400대
- 404 : 클라이언트가 없는 파일을 요청하면 발생
- 405 : 클라이언트 요청을 서버에 처리할 것이 있는지, 없는지
500대 : 서버쪽에서 실행하다가 서버가 오류나면 클라이언트에게 알려 줌
Project Path
C:\webDev\work\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost
Eclipse Shortcut
ctrl + f11 : 런 (실행)
ctrl + shif + f : 자동 정렬
*Error
405 : HTTP method Get is not supported by this URL (GET방식이 없음)
500 : 서버 에러 - org.apache.jasper.JasperException (JSP 를 .java 만들다가 에러, 즉 오타)
---
아파치 : 서버역할만 한다.
톰캣은 서버 역할과 웹엔진 역할을 한다.
웹 응용 프로그램 3가지
1) Filter 2)Listener 3)Servlet
---
- json 객체로 보내야 모바일 os가 받을 수 있따.
- gson으로 list를 객체로 가져오면 공백이 발생한다.
json은 { } 로 시작해야하는데 공백(\r)이 날라오는 현상이 있는데 이는 줄바꿈 때문에 의해서 발생하는것임. 그러므로 delete로 댕겨야함
* json data 들을 list로 만들어서 객체화 시켜서 넘겨줘야 함
public class ProductListResult {
|
* gson을 사용하여 json 객체를 넘겨줌.
ArrayList<Product> list = new ArrayList();
|
'My Trace > T아카데미' 카테고리의 다른 글
[T아카데미] 모바일 서버 프로그래밍 기본 - 5일차 (0) | 2016.07.01 |
---|---|
[T아카데미] 모바일 서버 프로그래밍 기본 - 4일차 (0) | 2016.06.30 |
[T아카데미] 모바일 서버 프로그래밍 기본 - 3일차 (0) | 2016.06.29 |
[T아카데미] 모바일 서버 프로그래밍 기본 - 1일차 (0) | 2016.06.27 |
[T아카데미] 모바일 서버 프로그래밍 기본 과정 합격! (0) | 2016.06.26 |