[ITWILL : JSP] ==과 str.equals(str2) 차이, 객체와 클래스

ITWILL학원 : 16강 JSP기초 BY 정규태강사

1. ==과 str.equals(str2) 차이점

두가지는 공통적으로 비교연산을 하지만 차이점이 존재한다.
String타입을 비교할때는 equals()를 사용해야한다.

  • == : 두개의 문자열 객체가 완전히 같은지 비교(주소비교)

    • 메모리 주소를 비교(동일한 객체인지)
    • stack 메모리에 있는 주소를 비교
    • 기본형데이터타입을 비교할때 사용한다
  • str.equals(str2) : 두 개의 문자열 객체의 문자 데이터값이 같은지 비교

    • 대상의 내용을 비교
    • heap
    • 모든 참조형데이터타입에 사용하는 것은 아니고 참조형데이터타입중에 string타입 비교시에만 사용 가능하다.
    • 다른 참조형데이터타입을 비교하는 방법은 상속을 배운뒤 알게된다.
1
2
3
4
5
6
7
8
9
10
11
12
13
//일치여부확인(==이용)
if (id == DBID && pw == DBPW){
%> <%=id%> 님 환영합니다! <%
}else{
%> 잘못입력하셨습니다.<%
}

//일치여부확인(equals이용)
if (id.equals(DBID) && pw.equals(DBPW)){
%> <%=id%> 님 환영합니다! <%
}else{
%> 잘못입력하셨습니다.<%
}

참고링크 : java equals 차이점

2. 객체와 클래스

  • 객체 : 모든 대상,기능들이다.

->객체를 프로그램에 포함하기위해서는 내가 필요한 기능만 뽑는 즉, 추상화과정이 필요하다.

  • 클래스 : 추상화된 객체를 코드로 표현한 형태

흔히 이를 붕어빵만들기에 비유하곤 한다.

클래스 - 객체 => 인스턴스화(객체화)
붕어빵틀 - 붕어빵 => 가열동작

하지만 붕어빵틀과 붕어빵만 있으면 붕어빵을 만들수있을까?
가열동작이 없으면 붕어빵은 만들어지지않는다
이 가열동작은 인스턴스화(객체화, 메모리에 올린다)라고 생각하면 쉽다.
이때 new연산자를 이용한다. -> new를 하면 메모리에 올라간다.

3. 클래스

1. 클래스와 객체는 같다?

NOPE! 다르다!

2. 클래스의 구성요소

  1. 생성자 : 멤버 변수를 초기화
  2. 멤버 변수 : 객체의 속성
  3. 멤버 메서드 : 객체의 동작(기능)

왼쪽처럼 기본데이터형의 변수를 선언하면 stack메모리에 올라간다.
오른쪽처럼 클래스를 선언하면 stack에는 a라는 변수가 생성되고 heap에는 new Test()라는 객체가 생성된다.

3. 클래스예시

휴대폰이라는 객체가 있다고 생객해보자

  1. 속성 : model, price, color …등등
  2. 기능 : on/off(), tell(), sendMSG() …등등
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Phone {
1. 속성
model
price
color ...등등

2. 기능
on/off()
tell()
sendMSG() ...등등

}

new Phone(); //클래스선언이 되고 이는 heap메모리에 저장된다.

[ITWILL : JSP]JSP 디렉티브(directive) 중 include VS 액션태그 include, jspf확장자 파일

ITWILL학원 : 15강 JSP기초 BY 정규태강사

1. include의 두 종류

  • @include : 골뱅이방식
    골뱅이방식은 jsp 지시어이고 jsp문법이다.
    공통으로 사용되는 변수를 파일에 지정해서 추가한다.
    해당 페이지가 컴파일되기전에(소스코드파일.java가 클래스파일로.class 변화하는 과정) 소스코드를 include한 후 컴파일한다.
    컴파일을 한번한다.

  • jsp:include page=”” : 액션태그방식
    액션태그방식은 html문법이다.
    공통으로 사용되는 메뉴들을(주로 페이지) 특정 공간에 추가한다.
    해당 페이지가 java파일(서블릿)으로 컴파일 된 후에 include한다.
    컴파일을 두번하게된다.

1
2
3
4
5
 <%@ include ~ %>
<!-- JSP 지시어 : 공통으로 사용되는 변수를 파일에 지정해서 추가 -->

<jsp:include page=""> ~
<!-- 액션태그 : 공통으로 사용되는 메뉴들을(페이지) 특정 공간에 추가 -->

예시
아래 테이블에서 첫 행에 top.jsp라는 파일을 추가하고싶을때 jsp액션태그를 사용하는 방법이다.

1
2
3
4
5
6
7
8
9
 <table border=1 width="600" height="600">
<tr>
<td colspan="2" height="100">
<jsp:include page="top.jsp">
<jsp:param value="Your name" name="name"/>
</jsp:include>
</td>
</tr>
</table>

2. @include 와 jsp:include page=”” 차이점

둘 다 목적은 include(추가)하는 거지만 include되는 시점이 다르다.
골뱅이방식은 jsp파일에 include한 뒤 java가 되고 class파일이 된다.
액션태그방식은 jsp가 java파일이 되고 거기에 include를 하고 class파일이 된다.

3. jspf확장자 파일

jspf( Jsp Servlet Page Framegment ) : JSP 변수를 저장가능한 확장자파일.

[ITWILL : JSP]영역객체 안에서 사용하는 속성(Attribute), 링크이동 방법별 전달가능한 영역(scope)

ITWILL학원 : 15강 JSP기초 BY 정규태강사

1. 영역객체 안에서 사용하는 속성(Attribute)

속성(Attribute)을 저장해서 사용.

사용형태 2가지

  • 해당영역객체.setAttribute("이름", 값)
  • 해당영역객체.getAttribute("이름")
1
2
3
4
5
6
7
//html페이지
<fieldset>
<form action="jsp페이지.jsp" method="get">
<label>아이디 : </label><input type="text" name="id">
<input type="submit" value="submit">
</form>
</fieldset>

페이지객체에서 setAttribute(“이름”, 값)를 통해 생성하고 getAttribute(“이름”)를 통해 출력한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//jsp페이지
<h1>내장객체(pageContext, request, session, application)생성</h1>
<%
pageContext.setAttribute("p", "pageContext 값있음!");
request.setAttribute("req", "request 값있음!");
session.setAttribute("ses", "session 값있음!");
application.setAttribute("app", "application 값있음!");


<h1>내장객체 (pageContext, request, session, application)출력</h1>
pageContext 내장객체의 값 : <%=pageContext.getAttribute("p")%><br>
request 내장객체의 값 : <%=request.getAttribute("req")%><br>
session 내장객체의 값 : <%=session.getAttribute("ses")%><br>
application 내장객체의 값 : <%=application.getAttribute("app")%><br>
%>

2. 링크이동 방법별 전달가능한 영역(scope)

공통적으로 아래 4가지 방식들은 session,application, 파라미터를 저장/전달가능하다.

자바스크립트, JSP(sendRedirect), 액션태그 방식은 서로 같이 사용불가.

2-1. a태그로 이동시

사용가능한 영역은 4가지영역(pageContext,request,session,application) 중에 session, application영역의 값 공유가능하다.

1
<a href="scopeProPro.jsp"> scopeProPro.jsp로 페이지이동 ... </a>

만약 파라미터의 값도 저장하고 전달하고 싶다면 어떻게 하면될까?
표현식을 이용하면 된다.
파라미터까지 전달이 가능하다.

1
<a href="scopeProPro.jsp?id=<%=id%>"> scopeProPro.jsp 페이지로 이동 ... </a>

즉, a태그(링크) 이동시 session,application 영역의 값을 공유가능.
파라미터의 값도 저장/전달 가능하다(get 방식)
HTML이기에 파라미터를 가져갈때 표현식을 사용하면된다.

2-2. js에서 location.href사용하여 이동시

자바스크립트 이동시 session,application 영역의 값을 공유가능.
파라미터의 값도 저장/전달 가능하다(get 방식)
HTML이기에 파라미터를 가져갈때 표현식을 사용하면된다.

1
2
3
4
<script type="text/javascript">
alert("자바스크립트로 scopeProPro.jsp 페이지로 이동")
location.href="scopeProPro.jsp?id=<%=id%>&pw=1234";
</script>

2-3. 내장객체 response 이동시

session,application 영역의 값을 공유가능.
파라미터의 값도 저장/전달 가능하다(get 방식).
파라미터를 가져갈때 표현식이 아닌

1
2
3
4
5
6
7
<%
//response.sendRedirect("이동할 페이지 주소");
response.sendRedirect("scopeProPro.jsp");

//파라메터 추가로 같이 공유하는 방법
response.sendRedirect("scopeProPro.jsp?id="+id+"&pw=1234");
%>

아이디가 한글일때는 왜 물음표가 나타날까요?
response.sendRedirect()전까지는 한글이 안깨지다가 response.sendRedirect()명령어부터 한글이 깨진다.
데이터를 인코딩해서 보내야한다. 인코딩에는 여러 방식이 있는데 response.sendRedirect()는 한글데이터를 처리하지못하는 인코딩방식이다.
response객체안에 전달되는 콘텐츠타입을 바꿔서 해야하는데 그걸 하려면 서블릿을 이용해야해서 서블릿배우면 알수있다.

2-4. 액션태그 forward 이동시(p222)

html태그이지만 jsp동작을 할수있게 만들어진 특수한 기능을 가지고 있다.
액션태그 : jsp페이지에서 자바, 스크립트코드없이 다른 페이지로 이동하는 기능이 있다.
서블릿, 객체(자바빈)에 접근할수있는 방법이 액션태그이다.
원래 페이지에 의해 생성된 request객체와 response객체가 그대로 넘어간다.

즉, session,application 그리고 request 영역 더불어 파라미터값까지 공유가능.

1
2
3
4
5
6
7
<jsp:forward page="scopeProPro.jsp" /> 

또는

<jsp:forward page="scopeProPro.jsp">
<jsp:param name="pw" value="<%=a %>" /> <!--표현식사용가능 -->
</jsp:forward>

액션태그는 포워딩이 일어난다.

  • forwarding (포워딩)이란
    • 이동하는 페이지의 주소는 변경 X, 페이지의 내용만 변경.
    • 중요 request객체와 response객체를 가지고 이동가능

따라서 액션태그는 이동하는 페이지의 주소는 변경되지않고 페이지의 내용만 변경되는 희안한 태그이면서 request객체와 response객체를 가지고 이동한다.

그런데 주소를 변경안하는 기능이 왜 필요할까?
MVC패턴개발방식에서 꼭 필요하다.
웹서핑중에 jsp파일명을 주소창에서 본 적이 있는가?
아마 없을 것이다. 보안을 위해서 .jsp파일을 절대 공개하지않는다.
따라서 가상주소를 사용해야하는데 그 가상주소를 사용할때 액션태그 forward가 필요하다

[ITWILL : JSP]영역객체scope

ITWILL학원 : 14강 JSP기초 BY 정규태강사

참고로 교재는 p209부터임.

1. 영역객체(scope)

영역 객체(Scope) , 속성(Attribute)

내장객체 (8+1)중에서 해당 유효한 범위안에서 데이터를 서로 공유할수있는 객체
이때, 그 공유되는 범위를 ‘영역(Scope)’라고한다. 그때의 공유되는 값 ‘속성(Attribute)’라고한다.

영역 영역처리 객체
page pageContext
request request
session session
application application

왼쪽의 영역을 처리하기 위해서는 오른쪽의 객체를 사용해야한다.
내장객체 8가지 중에서 위의 4가지들은 서로 데이터를 공유할 수 있다.
page에서 application으로 영역이 내려올수록 영역의 범위/크기가 커진다.

1. page 영역 : 해당 페이지가 클라이언트에 정보를 제공하는 동안

해당 페이지가 클라이언트에 정보를 제공하는 동안 페이지 영역이라는 공간에서 데이터를 주고받을 수 있다.

  • pageContext 객체사용가능 : JSP페이지 정보를 저장하는 객체

  • 사용 : 다른 내장객체를 호출하거나, 페이지흐름제어하거나, 에러데이터 처리할 때 주로 사용한다

2. request 영역 : 클라이언트 요청이 처리되는 동안

여러개의 페이지를 이동할때 정보를 저장해서 사용
page 영역과 request영역 차이
request영역은 주소창에 주소를 치는 동안의 영역이다.

  • request 객체사용가능 : 페이지 요청시 정보를 처리하는 객체

  • 사용 : 페이지 이동시 주로 사용한다.

3. session 영역 : 세션이 유지되는 동안 (브라우저당 세션 1개씩 생성이되고 기본값은 30분)

예를 들어 크롬창을 키는 순간부터 30분동안 세션에 정보가 저장된다.

  • session 객체사용가능 : 하나의 웹 브라우저가 정보를 유지하기위한 시간동안 사용되는 객체

  • 사용 : 사용자인증처리에서 주로 사용한다.

4. application 영역 : 웹 애플리케이션이 실행되고있는 동안

즉 서버가 실행중일때의 영역이다.
서버의 설정정보나 자원에 대한 정보, 애플리케이션실행시 발생하는 이벤트정보등이 저장된다.
4가지영역중 가장 큰 영역이다

  • application 객체사용가능 : 웹 애플리케이션의 Context 정보를 처리객체

  • 사용 : 홈페이지 방문자수 카운트 등에 주로 사용한다.

[ITWILL : JSP]JAVA DATATYPE, Integer.parseInt(문자열), 동일한 파라미터의 값을 가지는 데이터가 여러개있을 경우 변수로 가져오기

ITWILL학원 : 14강 JSP기초 BY 정규태강사

1. JAVA DATA TYPE 자바데이터타입

기본형 8가지를 기억하면 나머지는 전부다 참조형이다.

1. 기본형 :8가지

    1. boolean : 1byte
    1. char : 2byte
    1. byte : 1byte
    1. short : 2byte
    1. int : 4byte
    1. long : 8byte
    1. float : 4byte
    1. double : 8byte

2. 참조형 : 엄청 많음

  • String
  • Scanner
  • 등등

2. 형변환

1. 묵시적 형변환

메모리공간의 크기가 작은 곳에서 큰 곳으로 자동변환.

  • 예시 : int(4바이트) -> double(8바이트) 자동으로 변환되는 것을 말한다

누가 자동으로 형변환을 해줄까?
정답은 컴파일러!!
문제가 없기때문에 컴파일러가 자동으로 형변환을 해준다.

2. 명시적 형변환

메모리공간의 크기가 큰 곳에서 작은 곳으로 변환.

왜 컴파일러가 자동으로 형변환을 해주지않을까?
메모리공간의 차이로 데이터손실이 발생하기때문에 자동형변환을 해주지않는다.

  • 예시
    인티저.파스인트(스트링)
    Integer.parseInt(문자열)은 문자열을 정수형(int)로 변경해준다.
1
2
3
4
5
6
7
8
// 이전페이지에서 정보를 받아오기
System.out.println("입력숫자 : " + request.getParameter("num")); //콘솔에서 출력
out.println("입력하신 숫자는 " + request.getParameter("num")); //html화면에서출력

//form태그에서 get방식으로 정보를 전달할시 모든 데이터는 string타입으로 변경되어 전달되기때문에
//숫자데이터 출력을 원하면 형변환Integer.parseInt()해줘야한다
int num = Integer.parseInt(request.getParameter("num"));
정수형값 : <%=num %> <br>

3. 파라미터값 한글처리

form get방식과 달리 post방식을 사용하면 한글이 깨지는 문제가 발생한다.
따라서 body태그 바로 밑에 파라미터 한글처리 코드가 필요하다.

1
2
3
4
<!-- form post방식을 사용하면 한글이 깨지는 문제가 발생하기때문에 파라미터 한글처리 코드가 필요하다  -->
<%
request.setCharacterEncoding("UTF-8");
%>

4. 동일한 파라미터의 값을 변수로 가져오기

사용자가 radio박스를 클릭하면 해당 데이터를 변수로 가져올수있다.

request.getParameter("") : 큰따옴표안에 name속성을 넣으면된다.

정보를 입력하는 페이지는 아래와 같이 radio버튼을 만들어놓았다.

1
2
3
4
5
6
7
<form action="정보출력페이지.jsp" method="post" name="fr">
<label>성별 : </label>
<input type="radio" name="gender" value="womyn"> 여성
<input type="radio" name="gender" value="men"> 남성

<input type="submit" value="제출">
</form>

정보를 출력하는 페이지는 아래와 같이 코딩하면 된다.

1
2
3
4
5
6
7
8
9
<h1>변수가져오기</h1>
<%
String gender = request.getParameter("gender");
%>

<h1>사용자정보출력</h1>

입력하신 정보를 아래에서 확인해주세요
성별은 <%=gender %>입니다 <br>

5. 동일한 파라미터의 값을 가지는 데이터가 여러개있을 경우

일반적으로 4번방법을 이용하면되지만 checkbox처럼 중복데이터가 가능한 경우는 어떻게 해야할까?
동일한 파라미터의 값을 가지는 데이터가 여러개있을 경우 배열을 통해서 데이터를 저장해야한다.

사용자가 몇개를 선택할지 모르지만 변수로 가져오고 싶다면 request.getParameterValues("")을 이용한다.

request.getParameterValues("") : 큰따옴표안에 name속성을 넣으면된다.

정보를 입력하는 페이지는 아래와 같이 checkbox버튼을 만들어놓았다.

1
2
3
4
5
6
7
8
<form action="정보출력페이지.jsp" method="post" name="fr">
<label>취미 : </label>
<input type="checkbox" name="hobby" value="game"> 게임
<input type="checkbox" name="hobby" value="movie"> 영화감상
<input type="checkbox" name="hobby" value="workout"> 운동

<input type="submit" value="제출">
</form>

정보를 출력하는 페이지는 아래와 같이 코딩하면 된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<h1>변수가져오기</h1>
<%
// String hobby = request.getParameter("hobby");
//중복데이터 변수로 가져오기 불가능. 첫번째꺼데이터만 출력가능
//동일한 파라미터의 값을 가지는 데이터가 여러개있을 경우 배열을 통해서 저장해야한다.
String[] hobbyarr = request.getParameterValues("hobby"); //중복데이터 변수로가져오기가능
%>

<h1>사용자정보출력</h1>

취미는
<%
if(hobbyarr == null){ //취미를 선택 안한경우 처리
out.println("선택안함");
}else{
for(int i=0;i<hobbyarr.length;i++){
%>
<%=hobbyarr[i] %>
<%
}
}
%>
입니다<br>

[ITWILL : JSP]내장객체

ITWILL학원 : 13강 JSP기초 BY 정규태강사

JSP 내장객체

서블릿(JSP -> JAVA로 변환하는 것)을 실행할때 필요한 정보를 저장하고 있는 객체이다.
원래 객체는 외부에 있기에 import를 추가해야하지만,
내장객체의 경우 기본적으로 포함되어있기때문에 따로 객체를 생성하거나, import로 추가할 필요가 없다.

자주사용하는 객체 6가지는 무조건 암기할 것!

내장객체는 총 9가지이다.

  • java.servlet 패키지 8가지

    1. request : 클라이언트의 Http 요청 정보를 저장하는 객체
    2. response : Http 요청을 처리하는 응답 정보를 저장하는 객체
    3. session : 해당 클라이언트의 세션정보를 저장하는 객체
      • 예시 : 은행웹접속하면 10분지나면 ‘로그인세션이 만료하였습니다’
    4. pageContext : 페이지가 실행할때 필요한 컨텍스트 정보를 저장하는 객체
      • 컨텍스트정보 = 프로젝트정보
    5. out : 응답페이지에 전송하기위한 출력스트림 객체
      • 버퍼링 : 버퍼라는 공간을 채우는 작업이 버퍼링이다. 데이터가 큰 경우 전체 데이터를 작은 단위로 잘라서(버퍼) 먼저 데이터를 보여주는 것이다. 이것이 발전된 형태가 스트림이다.
      • 스트림 : 데이터를 글자단위로 보내는 것이 아니라 스트림단위로 보낸다. 물흐르듯 데이터를 계속 보내는 것을 스트림이라고 한다.
        • 예시 : 음악스트리밍
    6. application : 해당 애플리케이션의 정보를 저장하는 객체
      • 헷갈릴수있는게 스마트폰등의 안드로이드 앱이 아니라 응용프로그램전체라는 의미이다.
        • 개념을 분리하자. jsp에서는 애플리케이션의 정보를 저장한 객체이다.
        • 예시 : 누적페이지방문수를 표시할때 application객체를 이용한다
    7. config : 페이지의 서블릿설정 정보를 저장하는 객체
      • 서블리설정 = 초기화값
    8. page : 페이지의 서블릿 객체
  • java.lang 패키기 1가지

    1. exception : 예외처리를 다루는 객체

2. 자주 사용하는 내장객체 : request객체

클라이언트의 Http 요청 정보를 저장하는 객체이다
js에서 객체는 아래와 같이 만들었다.

1
let 참조변수a = new 객체();

HttpServeltRequest 클래스를 객체로 구현한 뒤 request 이름(참조변수a)으로 사용한다.
웹페이지에서 사용하는 왠만한 데이터들은 다 request객체로 가져 올 수있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
서버도메인명 : <%= request.getServerName() %><br>
서버포트번호 : <%= request.getServerPort() %><br>
URL : <%= request.getRequestURL() %><br>
URI : <%= request.getRequestURI() %><br>
클라이언트호스트명 : <%= request.getRemoteHost() %><br>
클라이언트IP주소 : <%= request.getRemoteAddr() %><br>
프로토콜정보 : <%= request.getProtocol() %><br>
요청정보방식(전송방식) : <%= request.getMethod() %><br>
컨텍스트경로(프로젝트경로) : <%= request.getContextPath() %><br>

물리적경로 : <%= request.getRealPath("/") %><br>
- 물리적경로란? 하드디스크의 어디에 저장하는 지가 물리적경로<br>

Http헤더(user-agent) : <%= request.getHeader("user-agent") %><br>
- Http헤더(user-agent)란? 이용자가 사용하고있는 웹사이트 정보<br>

Http헤더(accept-language) : <%= request.getHeader("accept-language") %><br>
Http헤더(host) : <%= request.getHeader("host") %><br>
Http헤더(connection) : <%= request.getHeader("connection") %><br>

3. 자주 사용하는 내장객체 : response객체

Http 요청을 처리하는 응답 정보를 저장하는 객체이다.

1
2
3
4
5
6
7
8
9
10
11
<%
response.setHeader("해더이름", 값);
response.addCookie("쿠키값");
response.setContentType("타입");
response.sendRedirect("주소");

//예시

response.sendRedirect("httl://www.naver.com");
//코드를 작성한 html파일에서 실행했지만 자동으로 네이버로 이동됨
%>

4. 자주 사용하는 내장객체 : session객체

해당 클라이언트의 세션정보를 저장하는 객체
세션은 만들어지는 시간, 최종시간등을 확인할 수 있다.

  • 예시 : 은행웹접속하면 10분지나면 ‘로그인세션이 만료하였습니다’
1
2
3
4
5
6
7
8
9
10
세션 ID : <%=session.getId() %><br>
세션 생성 시간 : <%=session.getCreationTime() %>
세션 최종 접속시간 : <%=session.getLastAccessedTime() %> <br>
세션 유지시간 : <%=session.getMaxInactiveInterval() %> <br>
- 세션 유지시간 default값 : 1800초 = 30분<br>
<%
// 세션 유지시간 변경 :30-> 60분
session.setMaxInactiveInterval(3600);
%>
변경된 세션 유지시간 (3600초,60분): <%=session.getMaxInactiveInterval() %> <br>

5. 자주 사용하는 내장객체 : application객체

해당 애플리케이션의 정보를 저장하는 객체
헷갈릴수있는게 스마트폰등의 안드로이드 앱이 아니라 응용프로그램전체라는 의미이다.
개념을 분리하자. jsp에서는 애플리케이션의 정보를 저장한 객체이다.
예시 : 누적페이지방문수를 표시할때 application객체를 이용한다

1
2
3
서버정보 : <%=application.getServerInfo() %><br>
물리적경로 : <%=application.getRealPath("/") %><br>
-슬러시(/)는 root라는 의미로 최상위경로를 의미한다.

6. 자주 사용하는 내장객체 : out객체

응답페이지에 전송하기위한 출력스트림 객체

  1. 버퍼링 : 버퍼라는 공간을 채우는 작업이 버퍼링이다. 데이터가 큰 경우 전체 데이터를 작은 단위로 잘라서(버퍼) 먼저 데이터를 보여주는 것이다. 이것이 발전된 형태가 스트림이다.

  2. 스트림 : 데이터를 글자단위로 보내는 것이 아니라 스트림단위로 보낸다. 물흐르듯 데이터를 계속 보내는 것을 스트림이라고 한다.

    • 예시 : 음악스트리밍

버퍼사이즈를 다 사용하면 출력에 문제가 생길수있다. 입출력작업자체가 자원을 많이 사용하므로 out객체를 사용하고나서 out.close()매서드를 사용해야한다

1
2
3
4
5
6
7
8
9
<%
out.print("out객체 사용<br>");
%>
버퍼 사이즈 : <%=out.getBufferSize() %> BYTE<br>
사용후 남은 버퍼사이즈 : <%=out.getRemaining() %> BYTE<br>
- out객체를 사용하고나서 out.close()매서드를 사용해야한다
<%
out.close(); //자원해제
%>

[ITWILL : JSP]JSP 주석과 JSP directive, JSP 스크립트 요소

ITWILL학원 : 13강 JSP기초 BY 정규태강사

jsp는 html과 java를 합쳐서 사용하는 것이기때문에 주석을 두가지를 사용할 수 있다.

1. JSP주석 <%– – %>

%로 시작하는 주석은 jsp주석이다. 이는 엘리먼트요소이다.
html 주석문과 <!– –> 과 차이점은 html주석은 개발자도구에서 보이지만 JSP주석은 개발자도구에서 보이지않는다.

1
2
HTML주석 : <!-- <h1>에이치티엠엘yo!</h1> --!> 
JSP주석 : <%-- <h1>제이에스피yo!</h1> --%>

2. JSP가 어떻게 JAVA와 연결되어있을까?

연결성을 알기 위해서 아래 경로를 찾아가보자.

경로 : D:\JAVA저장경로.metadata.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\JSP7\org\apache\jsp\JSP1

해당 폴더에는 내가 생성한 적 없는 아래 파일 두개가 들어가있다.

  • 파일명.java
  • 파일명.class

해당 폴더안에 .java파일을 열어보면 내가 만들었던 .jsp파일이 내부적으로 .java파일을 생성하고 그 뒤 .class파일을 실행시키는 방식으로 연결되어있다.
이런 .java파일을 서블릿이라고 부른다.

즉, 내가 .jsp파일을 만들면 컴파일러가 알아서 서블릿이라는 형태인 .java파일을 만들고 그 뒤 .class파일을 실행시킨다.

3. JSP 디렉티브(directive)

jsp 디렉티브(directive)는 jsp페이지가 실행될때 필요한 정보를 지정하는 것이다.
jsp페이지는 사용자가 페이지를 요청할때 실행된다.
<%@ 내용내용블라블라 %> 형태로 사용한다.
크게 3가지 지시어가 존재한다.

1. JSP 디렉티브(directive)의 page지시어 속성

아래는 page예시이다.

  1. import
1
2
3
<%@ page import="java.util.*" %>

<%-- import란 외부로부터 다른 파일(클래스/객체)가져와서 추가해서 지정할수있다. --%>
  1. contentType

사용자의 요청을 응답할때 응답할 페이지의 MIME타입을 지정하기위한 속성이다.
따라서 css나 aac오디오, azw전자책등등 다양한 종류의 페이지타입을 만들수있다.

contentType 종류

1
<%@ page contentType="text/html; %>

5. JSP 스크립트 요소

JSP 스크립트요소에는 총 3가지가 있다.

  1. 선언문 : 변수, 매서드(함수)를 선언해서 사용한다.
  2. 스크립틀릿 : 자바코드를 작성(변수와 매서드 사용가능)해서 사용한다.
  3. 표현식 : 화면에 출력할 내용을 작성하여 사용한다.

1. 선언문

선언문 형태 : <%! %>
변수, 매서드(함수)를 선언해서 사용하기때문에 배열은 생성할수없다. 배열을 생성하고싶으면 스크립틀릿안에 써야한다.
멤버변수(전역변수)형태로 사용가능.

1
2
3
4
5
6
<%!
//자바코드를 사용해서 변수,메서드 사용(전역변수)
public void Method(){
System.out.println("안녕하세요");
}
%>

2. 스크립틀릿

스크립틀릿 형태 : <% %>
자바코드를 작성(변수와 매서드 사용가능)해서 사용한다.
지역변수형태로만 사용가능.

1
2
3
4
5
6
7
8
<%
//java
System.out.println(name);
System.out.println(a);

// html 영역의 출력
out.print("안녕하세요(html)");
%>

3. 표현식

표현식 형태 : <%= 자바의 값 %>
화면에 출력할 내용을 작성하여 사용한다.
즉 표현식은 값 또는 자바변수의 값을 화면에 출력가능한 코드이다.

1
2
3
4
5
6
7
<%
for (int i=0; i<strArr.length; i++){
%>
<%= i%>는 <%= strArr[i]%> <br>
<%
}
%>

표현식으로 테이블만들기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<%
String[] strArr = new String[5];
strArr[0] = "java";
strArr[1] = "jsp";
strArr[2] = "web";
strArr[3] = "DB";
strArr[4] = "spring";
%>

<table border="1">
<tr>
<td>인덱스</td><td>값</td>
</tr>

<%
for(int i=0;i<strArr.length;i++){
%>
<tr>
<td><%=i %></td><td><%=strArr[i] %></td>
</tr>
<%
}
%>

4. 선언문과 스크립틀릿 차이

선언문은 전역변수로 사용가능하지만 스크립틀릿은 지역변수로만 사용가능하다.
자주 사용할 것은 선언문보다 스크립틀릿이다.

[ITWILL : JSP]JSP 첫 프로젝트 톰캣과 연결

ITWILL학원 : 12강 JSP기초 BY 정규태강사

기존 html코드에 java를 추가한 것이 바로 jsp이다.

  1. Project Explorer 우클릭

  2. new > dynamic web project > 프로젝트이름을 적어주고 next > next 후 Generate web.xml deployment descriptor를 꼭 틱해주고 Finish클릭

  3. 새로만든 프로젝트 우클릭 > new > jsp file 클릭 : 코드가 이미 있는 파일이 만들어졌다

이제 JSP 프로젝트를 톰캣서버와 연결해야한다.

  1. 새로 만든 프로젝트 우클릭 > properties 클릭 > java build path > libraries > server runtime 클릭 후 next를 눌러준다

  1. tomcat을 클릭해주고 finish를 눌러준다

  1. jsp파일에 첫번째행에 밑줄이 쳐져있던 것이 깨끗하게 사라진걸 확인할 수 있다 > 서버와 연결 끝!

혹시나 안된다면 이클립스를 껐다 키거나 최상단 project 탭에 clear클릭하여 메모리를 한번 정리해준다

[ITWILL : JSP]프로그래밍기초이론, 하드웨어 vs 소프트웨어 vs 펌웨어, 기억장치, 클라이언트 vs 서버

ITWILL학원 : 1강 프로그래밍이론 BY 정규태강사

1. 프로그래밍

특정 목적을 위해서 컴퓨터에 명령을 내리는 동작 혹은 동작의 집합

  • 시스템 프로그래밍 : OS제작, 수정
  • 응용 프로그래밍 : 엑셀 제작, 원가 관리 프로그램 등
  • 웹프로그래밍 : 홈페이지 제작 등, 프로그래밍에는 다양한 것들이 있지만 웹 프로그래밍위주로 공부 할 예정(웹 프로그래밍은 망하지 않을 듯)

2. jsp (= java server page)

자바 class, 객체 개념 인지 필수!

3. 하드웨어 vs 소프트웨어 vs 펌웨어

  • 하드웨어 : 물리적인 기계 자체
  • 소프트웨어 :
    • 운영체제 : 리눅스, 윈도우, 맥
    • 응용프로그램(application program): excel, power point, 계산기 등등
  • 펌웨어 : 하드웨어+소프트웨어

4. 기억장치(Memory)

  • 주기억장치 : RAM
  • 보조기억장치 : CD-RM, FDD(플로피디스크->USB), HDD(하드디스크드라이브)-발전->SDD
  • 모든 프로그램은 주기억장치에서만 실행된다 : 메모리가 크면 한번에 많은 일을 처리할 수 있어서 메모리가 클수록 성능이 좋다

5. 기본용어

  • 적재(load) : 보조기억장치에서 주기억장치로 (HDD->RAM) 넘어가는 과정
  • 프로그램 : 하드디스크에 들어 있는 상태
  • 프로세스 : 주기억장치에 로드된 상태의 프로그램(실행되고 있는 프로그램) (작업관리자의 백그라운드프로세스가 많을수록 컴터속도가 느려짐)

6. WEB(웹)

인터넷 환경에서 여러가지 정보를 html문서 타입을 결과를 나타내는 환경

7. 웹 브라우저

웹의 정보를 볼 수 잇는 클라이언트 프로그램
ex)익스,크롬,웨일,맥 등

8. 클라이언트 vs 서버

  • 클라이언트 : 정보를 제공 받는 쪽
  • 서버 : 정보를 제공해주는 쪽

9. 클라이언트와 서버는 어떻게 요청을 주고 받을까?

  • 클라이언트가 주소를 검색한다 (https://www.naver.com)
  • http는 통신규약 (보내는 방식, 속도등이 포함되어 있음)
    • http://
    • https:// 후자가 전자보다 보안이 더 좋음
  • 도메인주소는 인간에게 편하게 만든거고 컴퓨터끼리는 IP주소임
  • IP주소 : 웹에서 컴퓨터를 구분하는 값 (0 ~ 255숫자조합임) ex)http://192.168.7.200 인간이 기억하기 어렵기때문에 도메인으로 이용
  • 도메인서버 : IP <-변경-> 도메인 서버 주소 시키는 역활을 함

10.IPv4 VS IPv6

나누는 이유가 뭘까?
원래는 v4(4자리 조합)만 있으면 충분히 사용할 수 있었지만 요즘은 스마트폰, 테블릿, IPTV등 상용화가 많이 이루어지면서 4자리조합힘들어서 v6가 나왔다

  • IPv4 : IP를 4자리로 구분한 것 ex) 192.168.7.200