'전체'에 해당되는 글 33건

  1. 2011/05/12 제목을 입력해 주세요.
  2. 2010/10/07 모델 나누는 방법
  3. 2010/09/30 프로그램 방법
  4. 2010/09/29 JSP 5장
  5. 2010/09/27 jsp 4장
  6. 2010/09/16 3.미니 MVC
  7. 2010/09/09 2.웹 애플리케이션 아키텍쳐 (2010.9.9)
  8. 2010/09/09 톰켓 설치
  9. 2010/09/07 1장. 서블릿과 jps는 어디에 쓰는 물건이고??
  10. 2010/09/06 ㄹㄹ
2011/05/12 10:20
jsp

page를 기억하자.


jsp표현식

<% out.println(Counter.getCounter()); %>

이거랑
<%= Count.getCounter()%>이거랑 같다.
여기서 중요 한것은 <%=이것을 썼을때는 ;(세미콜론)을 쓰면 안된다.
왜냐면
=이것이 out.println();이거 이기 때문이다.


선언문!!
선언문은 컨테이너에 의해 생성될 서블릿의  멤버를 선언하는 곳이다.
멤버에는 변수가 들어갈 수 있고, 메소드가 들어 갈 수 있다.
<%! %>안에 들어가는 문장은 서비스 바깥 족으로 빠져서 선언되게 됩니다.
따라서, 정적인 변수나 메소드 또는 인스턴스 변수나 메소드 모두 여기에 코딩 할 수 있다.


개발자로서 알아야할 세가지 주요 메소드
-jspinit()
--init() 메소드에서 호출합니다. 이 메소드는 재정의 해도 무방합니다.

jspDestory()
-서블릿의 destroy()메소드에서 호출합니다. 이 메소드 또한 재정의해도 고나게 없다.
_jspService()
--이건 절대 재정의 하면 안된다. 컨네이너가 해준다.

jsp에도 초기화 파라미터 값이 있다.
-일반 서블릿에서 서블릿 초기화 파라미터를 설정하는 방식과 유사하게 jsp 초기화 파라미터를 설정합니다.
-<jsp-file> 태그를 사용 한다.


저작자 표시 비영리
Posted by 고고씽 고고씨잉
2010/10/07 09:33

이 방법은 모델과 서블릿과의 연계성을 최소화 하기 위하여 만든것이다.
 모델쪽을 저런식으로 나누면 서블릿과 자유롭게 되고 보수할때 좋다.
1.
MVC

2,
V---C----Service(중간단계)----m (서비스 중간단계를 통하여 서블릿에서 모델에 접근하게 한다.

3.
V--C---S----F---(여기서는 공통 메소드를 가진 인스턴스 하나를 만들어서 그걸 상속받게 하고 random과 lotto를 불러오게 한다) 그걸 펙토리에서 인스턴스를 생성하게 만든다. 펙토리는 싱글톤으로 만든다. \



page 지시자를 기억하자

저작자 표시 비영리
Posted by 고고씽 고고씨잉
2010/09/30 16:36

1. MVC 모델로 만들기 때문에 동그라미 3개를 만든다.

2. 그러므로 파일3개를 만들어야 한다.
   1)LottoServlet생성




   2)result.jsp생성
     doGet(){
     1. 컨텍스트 속성의 등록된 리스터에 있던 객체 값을 읽어 온다. 
      2. 익스턴스 만들어서 메소드 호출
      3. 결과를 출력
    }




   3)Lotto 클래서 만들어라..
     generateNumber(){
     숫자 차타입을 얻어 오는 것..
      }

     Lotto(int num, int range){
    더 두 수를 받을 수 있는 생성자를 생성
    }
int num, int range;


  4)MyListener(servletContextListener 상속?)
     contextInitialized(이벤트){
          1. String parameter = getServletContext().getInitParameter("");
          2. 파라미터값 이용해서 Lotto 인스턴스 생성
          3. 생성된 인스턴스를 Context의 Attribute로 추가
     } 
     contextDestroyed(이벤트)





별도의 파일 DD
contextParameter 2개를 추가 한다.
context타입은 모든 serlvet에서 접근이 가능하다.
Listener추가하고 등록도 해야 한다.



저작자 표시 비영리
Posted by 고고씽 고고씨잉
2010/09/29 17:42
컨텍스트는 어느 서블릿에서나 접근 가능하다
request는 request가 끝나면 사용 불가
그래서 컨텍스트를 사용한다..좀더 넓게 사용 하기 위하여..
근데 컨텍스를 초기 할려면 DD 써야 하지만 String만 가능하다..
그래서 이걸 servletContext의 attribute로 넣을려면 객체로 만들어야 한다.
그래서 리스너를 사용 한번 해보자
순서
일단 getServletContext()로 가지고 와서 여기서 파라미터 값을 읽어 온다
그래서 이걸 읽은걸 이미 만들어준 클래스에 집어 넣어줘서 객체로 만들어주고
get~~()메소드로 가지고 오게 한다음 attribute로 넣는다.


컨텍스트 초기화 파라미터엔 String 밖에 저장 할 수 없다.
바꾸어 주는 일은 서브릿이 할 수 있지만 , 어떤 서블릿이 가장 먼저 호출될 지 모르는 상황에서 그렇게 하는 것은 좋지 않다.

어떤 어트리뷰트로 지정하여 쓸려고 할때....
(스코프)??
1,컨텍스트는 컴테이너에 있는 서블릿이 모두 접근이 가능하다.

2. 세션은 세션 어트리뷰트로 기록 하면 권한을 가진 것만 접근이 가능 하다. 

3. 해당 요청을 처리할때만 된다.


컨텍스트는 쓰레드에 안전하지 않다..
그래서 만약에 서블릿에 동기화를 시킨다면..여러가지 나쁜 사항이 있다

그래서 컨텍스트 속성 자체에 락을 걸면 된다.(결론)

센션도 세션객체 자체에다가 동기화를 걸어준다.

오직 Request 속성과 지역 변수만이 쓰레드에 안전 하다.
-서블릿 인스턴스 변수는 스레드에 안전하지 않다.
--서블릿에 인스턴스 변수를 쓰는것은 굉장히 위험하다.

-모든 스레드가 하나의 변수에 접근하게 하고 싶다면, 먼저 변수를 스레드에 안전하게 한 후에 이 값을 속성에 묶어 준다.
=변수는 인스턴스 변수가 아닌 서비스메소드의 지역변수로 선언
만약에 공유가 필요 하다면 컨텍스트, 세션, 리퀘서트중에서 가장 적당한 속성의 생존 범위를 결정하게 한후 묶어 준다.

저작자 표시 비영리
Posted by 고고씽 고고씨잉
2010/09/27 17:41
redirect는 웹 브라우저에서 다른 URL로 보내는것이고 (브라우져)
dispatch는 서버에서 어떤걸 처리하고 최정적인 결과만 뷰로 보낸다. (서버)



servletConfig init 안에다 쓰면 setAttribute를 해줘야 하지만
init parameter는 servlet 아래
servletContext init 안에다 쓰면 위에꺼 안해주고 바로 JSP에서 쓸 수 있다.
context parameter는 web app 아래에 위치 한다.
저작자 표시 비영리
Posted by 고고씽 고고씨잉
2010/09/16 17:46

웹 요청(request) --> servlet(받음)--> 모델  ----------> servlet(완료 된 것을 받음) --> view(결과물 출력)
                              컨트롤러            business Logic                                                JSP
                                                      DB                                                                 
될 수 있으면 상대방의 이름이 없어야 한다. 그래서 끈끈한 것을 없애야 한다.
클래스가 다른 클래스와 연관이 되는데 다른 클래스 이름을 내 것에 쓰면 끈끈함이 올라 가기 때문에 될 수 있으면 이름을 쓰면 안된다.


4단계로 따라하기
1. 웹 애플리케이션의 사용자 화면에 대한 검토
2. 아키텍쳐 살펴보기
3. 개발 및 배포 환경 살펴보기
4. 웹 애플리케이션 개발

DD(web.xml)에 어떠한 url이 들어오면 어떤 써블릿이 처리하게 되어있다 라는게 써있다.

요청마다 respose와 request 객체를 만들어서 이거에 대한 주소 값을 써블릿에게 넘겨주면 써블릿은 그안의 값을 읽어서 필요 한 것만 빼서 모델에 넘겨 준다.
모델에서 결과 값을 써블릿에게 리턴해 주면 아까 받은 request객체에 넘겨 주고 그걸 JSP에 포워딩 해준다.
그리고 JSP는 HTML을 생성하고 그걸 컨테이너에 넘겨주어 클라이언트에게 넘겨준다.  


개발 진행
1. 사용자가 제일 먼저 볼 HTML 폼 생성 테스트
2. 컨트롤러 서블릿 버전 1을 만들고, 버전 1에서 HTML폼이 서블릿을 호출하면 단순히 파라미터 값을 출력
3. 모델 클래스를 위한 테스트 클래스를 만들고 다음에는 진짜 만든다.
4. 서블릿 버전 2로 올리고
5. JSP를 만들고 모델로 부터 결과 값을 response에 담은다음에 포워딩



4장...
JSP
오브젝트 타입으로 들어가서 List로 캐스팅 해주어야 한다. (22페이지) 자바 코드 "style"

써블릿은 HTTPservlet을 상속 받아서 만들어 진다.

써블릿은 컨테이너가 관리함
-Request와 Response객체 생성
-서블릿의 새로운 스레드 만들고 service 메소드 호출
-url 참고후 어떤 서블릿을 요청했는가 파악
-스레드에 request와 response를 넘긴다.
-service()메소드에서는 get이나 post에 따라 doGet,doPost를 호출 한다.
-그리고 request, response인자값은 넘긴다.
-서비스메소드가 끝나면 스레드를 소멸하거나 아니면 컨테이너 관리하는 스레드 풀로 돌려 보내고 request와 response 객체는 가비지 컬렉션 대상이 된다.
pool에 이밀 쓰레드나 객체를 만들어 넣고 사용 할 것이 있으면 꺼내서 쓰고 다 쓰고 없애는 것이 아니라 pool에 다시 돌려 보낸다.

서블릿의 일생
-서블릿은 초기화된 상태인 오직 하나의 상태만 가진다.
-서블릿이 초기화 되지 않았다는 것은 초기화 중이거나, 소멸중이거나, 존재하지 않은 상태 이거나 이거 셋중하나

라이프사이클
init()
-service()메소드전에 실행 되어야 한다.
serviec()
-최초 클라이언트의 요청을 받았을때 컨테이너는 새로운 스레드를 생성하거나 스레드 풀로부터 하나를 가지고 와서 service를호출, doGet,doPost()를 결정한다.

컨테이너는 서블릿 하나에 다수의 요청을 처리하기 위하여, 다수의 스레드를 사용 합니다.(다수의 서블릿 인스턴스를 만들지 않는다.)
그리고 요청마다 새로운 request,response객체를 생성

servletConfig는
-서블릿 당 하나가 존재하는 개체로 서블릿 배포시 설정된 정보를 넘겨주기 위한 것(서블릿자체)
servletContext
-웹 애플리케이션 당 하나가 존재하는 객체로, 웹 애플리케이션의 파라미터 정보를 읽어오기 위한 객체, 서버 정보를 확인하기 위한 것(이거는 서블릿 들의 정보)




저작자 표시 비영리
Posted by 고고씽 고고씨잉
2010/09/09 15:50
컨테이너란?
-서블릿에서는 main()메소드가 없다.
-그래서 컨테이너라 불리는 자바 애플리케이션의 컨트롤을 받음
-서버가 사용자로부터 요청 받음 -> 서블릿을 바로 호출하는 것이 아니라, 서블릿을 관리하는
-컨테이너에게 요청을 넘김
-요청받은 컨테이너는 HTTP request와 HTTP response 객체 만듦
-이를 인자로 서빌릿의 doGet()이나 doPost()메소드 중 하나 호출
-톰캣은 컨테이너의 한 예


사용자 요청 -->서버 -->컨테이너-->써블릿생성
                <--       <--            <--

컨테이너가 주는 혜택
- 통신지원
- 생명주기 관리
- 멀티스레딩 지원(요청이 들어올 때마다 별도의 쓰레드을 생성)
- 선언적인 보안 관리
- jsp 지원
-컨테이너를 사용하게 되면, 개발자는 비지니스 로직의 구현에 충실 할 수 있다.
-스레딩이나 보안, 네트워크통신 과 같은 문제들로 부터 자유롭게 되었다~~~~~

 
ppt를 보고 1~6번까지 꼭 기억해둬라..(34p)

하나의 서블릿이 이름을 세개 갖게 된다.
-클라이언트가 아는 url
-배포자가 만든 내부적 이름(클래스랑 url이랑 연결 지어주는것)
-실제 파일명(클래스이름)
-다른 이름으로 매핑하게 되면, 애플리케이션의 유연성, 보안성이 좋아진다.
--서블릿 파일의 위치나 이름이 바뀌었다고 해서 수정해야 할 부분을 일일이 찾아 다닐 필요 없음
--서버 디렉토리 구조나 파일이름의 클라이언트가 알지 못하게 할 수 있음


서블릿 매핑(DD)
DD를 이용하여 url을 서블릿에 매팅하기
-서블릿 매팅 말고도, DD에서 할 수 있는 일이 많다.
-보안,오류페이지,태그 라이브러리,초기화,관련 머 이것처럼 많은 것을 할 수 있다.


써블릿은 요청을 받으면 비니지스로직이 있는 클래스로 넘겨준다.
그 로직에서 처리를 한후 다시 써블릿에게 넘겨주고..
써블릿은 그 결과를 받아서 다시 jsp페이지로 넘겨준다.
그러면 jsp페이지가 보여준다.
써블릿은 컨트롤 하는 역할             Controller
비지니스로직은 (처리)자바 클래스   Model
jsp(출력)                                     View

하지만.......써블릿의 일이 주고 보내고 하는거라 일이 너무 단순해졌다..
그런데 100개의 요청이 있으면 써블릿이 100개 있어야 한다..
그런데 대여섯줄밖에없는 써블릿이 100개가 있으면 낭비이다..
그래서 생각 한게 써블릿을 한개로 만들었다.
써블릿은 어떤 요청이 들어오면 어느 모델로 보내고 결과를 받아서 뷰로 보내는걸 알고 있다.
그래서 코드로 구지 가질 필요가 없어서..
별도의 xml파일에 넣기로 하였다.
그래서 만든것이 struts라는 것이다.



저작자 표시 비영리
Posted by 고고씽 고고씨잉
2010/09/09 13:21

tomcat.apache.org

6.0다운 받은후

설치 하고..
설치는 c:\다가 직접 설치 한다.
그리고
마지막에 피니쉬 버튼 할때 실행 시키지마라..

그래야 이클립스에서 다 잡아 주기 때문에..먼저 실행시키면 충돌이 일어난다. .ㅎ

이클립스 실행후 밑에 서버 탭에서 등록을 해주면 된다.
서버탭에서 오른쪽 버튼  new -->서버0-->톱캣 6.0 선택 ->>브라우즈에서 설치폴더 설정-->next-->피니쉬

자바탭 오른쪽에 보면 초록색 스타트 있다..그거 눌러서 동기화 되어야 한다.

만약에 포트 변경하고 싶으면 톰캣 폴더에
conf-->server.xml클릭-->워드패드로..-->중간에 <connecotr port="8090"이 부분을 수정해주면 된다.

큰트롤+n-->web->>dynamic


request와 reponse는 객체로 모두 넘겨준다.
doGet()에다가...
저작자 표시 비영리
Posted by 고고씽 고고씨잉
2010/09/07 16:27

대화하는 방식은 프로토콜(http)
컨테이너는 써블릿을 관리한다.
컴퓨터  -->> 서버 -->컨테이너->>써블릿
          <====       <==             <==

오버라이드 해서 쓰기만하면된다.
요청이 들어 왔을대 무슨일을 할 것인가..

MVC모델

웹서버가 하는일
-클라이언트의 요청을 받아서, 클라이언에게 그 요청에 대한  결과를 넘겨 준다.
-약속들..프로토콜

클라이언트
-서버에 요청을 하고 서버로 받은 것을 저장한다음 화면에 출력한다.(브라우저)


웹서버는 HTML과 HTTP를 어떻게 다룰지 안다.
HTML
-브라우저가 화면에 컨텐츠를 어떻게 출력할지 지정한다.
-

HTTP
-웹 상에서 클라이언트와 서버가 서로 대화하기 위한 규약, 언어를 지칭
서버는 클라이언트로 HTML을 전송하기 위하여 HTTP를 사용

HTTP 프로토콜?
-TCP 네트워크의 한 노드에서 다른 한 노드로 파일을 보내는 역할 책임
-IP 한 호스트에서 목적지 호스트까지 패킷을 옮기고 이동하기 위한 기반 프로토콜

HTTP는 이와 별개로 웹에서만 사용하는 프로토콜이다. 요청/응답의 끊임없는 주고받음 이라고 할 수 있음

요청에는 어떤 정보가 들어가나
-HTTP 메소드이름
=


get-가장 단훈산 것으로 단순히 서버에 자원을 요청하는 일
post- 좀더 강력함, 서버에게 자원을 요청할때 필요한 정보를 함께 넘겨줌

get
-보낼 수 있는 제한이 있음
-데이터 전송 방식은 브라우저 주소 뒤에 정보를 덧붙이는 식, 주소창에 모두가 나타난다.
-이 두가지 이유로 즐겨찾기 가능..하지만 post 불가능

post

-길이 제한이 없다.

HTTP 응답(response)

Static web pages
그대로 그냥 보내준다.

웹페에지 혼자서 할 수 없는 두가지
-이런 곳에서는 동적인 컨텐츠를 생성 못함
-서버 상에 데이터 저장도 못함

이런걸 해결하기 위하여 동적인 웹 페이지를 사용 한다.
-helper 애플리케이션이 HTML을 작성하고 웹 서버는 이 결과물을 클라이언테에게 넘겨줄 수 있다.
써블릿은(HTML을 만드는 프로그램..결과적으로)

서블릿 작성하고, 배포하고, 실행하기
소스 따로, 클래스, 결과물 따로, 그외 필요한거 따로
이클립스가 자동으로 해준다.

써블릿..
하이튼 HTML을 만들기 위한것..

web.xml은 써블릿에 대한 정보를 보관 한다.
그래서 컨테이너가 이걸 참고하여 어떤 요청이 왔을때 해당 써블릿을 준비 할 수 있는 정보가 작성되어 있다.
------------------------------------써블릿 등록
<servlet-name>웹 서버 내의 통용되는 이름
<servlet-calss>실제 클래스이름(패키지 풀네임도 다 적어줘야 한다)
------------------------------------써블릿 매핑
<selvlet-mapping>브라우저 나온 이름과 실제 클래스의 이름을 연결시켜준다.
<url-pattern>/Serv1     이건 url이름이고

이렇게 하면 /Serv1은 name을 참고 하고 name은 클래스와 연결
같은 거지만 이름만 바꿔준다. 그래야 보안과, 이것저것 좋다.

JSP는 HTML에 자바코드를 집어 넣기 위한것
왜냐면 자바코드안에 HTML코드를 넣으면 완전 짜증나기 때문에..바꾼것..
-1.HTML페이지 디자이너들은 대부분 자바를 모름
-2.HTML페이지 자바 String 변수에 넣는 것은 악몽

<html>
<body>
<h1>Skyler's Login Page</h1>
<br>
<%= new java. util. Date() %>                 이게 자바 코드 넣을때 사용
</body>
</html>


이건 JSP로 저장해야 컨테이너가 읽을 수 있다.
결과 적으로 써블릿은 요청을 받아서 HTML을 만드는 것이지만 그것에대한 번거러움은 JSP로 해서 조금 편안하게 한다음 HTML을 만들어 준다.
써블릿이나 JSP 둘다 써블릿이다.

저작자 표시 비영리

'JSP' 카테고리의 다른 글

1장. 서블릿과 jps는 어디에 쓰는 물건이고??  (0) 2010/09/07
Posted by 고고씽 고고씨잉
2010/09/06 11:36
자바/객체지향
특성
한번 작성하면 다양한 곳에서 사용 가능하다.
상속은 어떻게 되고..오버로드, 오버라이드를 통해서 메소드를 확장하거나 클래스 확장
오버라이드 오버로드 특성
인터페이스 특성들, 상속의 특성들
객체지향(객체화 시켜서, 서로 메소드 호출로 이루어지고, 상속을 이용, 다형성 이용)

primitive type
8가지 종류 -->데이터 타입마다 적절하 크기마다 있다.
작은 곳에다가 큰것을 담을떄 어떻게 되냐..에러..~
예)
short s1= 13;
short s2 = 13;
short s3 = s1+s2; 기본연산은 int형으로 바꿔서 하기 때문에 에러가 난다.
short s = 1+2;은 된다. 코팅해봐

기본 타입이 정해졌을때 그 타입을 쓰는거다.
byte s = 128;했을때는 안된다. -128~127까지 이기 때문에 안된다.

형변환,,적절한 타입에 할당이 되느냐..제대로 선언할 수 있느냐 없느냐..?

사칙연산자들, 연산하는거

조건, 반복문
연산자를 쓰도록 한다.
항상 값을 잘 확인해라..

클래스제대로 선언 하는가..


상속과 인터페이스..다형성
그 안에서 실행을 한경우..
메소드 오버라이드 한경우와 안한경우..실행되는것
메소드 오버로드..
메소드 선언이 인자랑 타입이 타르면 당연히 다른 메소드
오버로딩의 조건들 메소드 이름 같게, 범위는 더 좁게 하면 안되고,

오버라이딩,,생성자 관련..연쇄호출
디폴트생성자, 안넣어주었을때 호출이 어떻게 되나...
static 관련
1번만 정의 되고..
호출할때 어떻게 하는지..가능한지 안한지..
인스턴스는스태틱을 가질수 있고 스태틱은 인스턴스를 가질 수 없고
예욀르 던지는 쪽ㄹ이 있으면 받아 주어야 하고
예외는 같은 계층 내라면 가장 작은것 부터 잡아줘야 한다.


쓰레드 클래스 부터 상속 받을 수 있고 runable 구현으로..
해야할 일을 만들어 줘야 한다.run()으로..
스케쥴러가 자기 마음대로 호출한다.

list
set 중복검사
mat 키 밸류
set은
왜 재정의 해야 하는지 모른다..ㅏ다른반은..
안나와..

리스트는 순서에 관계 없이..
컬렉션의 소트로 이용하면 정렬가능..
넣자 마자 정렬하게 하고 hashmap.arraylist, treeset 할줄 알아야한다..

정렬된 상태로 유지하고 싶은데..
셋은 중복 검사를 한다.
treeset은 정렬도 한다.
compareto,equal을 정의 해야 한다.
String만넣어야 한다.




저작자 표시 비영리
Posted by 고고씽 고고씨잉