1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<?xml version="1.0" encoding="UTF-8"?>
  <display-name>프로젝트명</display-name>
   
  <filter>
    <filter-name>필터 닉네임</filter-name>
    <filter-class>패키지명을 포함한 필터 클래스 풀 네임</filter-class>
    <init-param>
        <param-name>매개변수명</param-name>
        <param-value>값</param-value>
    </init-param>
  </filter>
 
  <filter>....</filter>
  <filter>....</filter>
   
  <filter-mapping>
    <filter-name>필터 닉 네임</filter-name>
    <url-pattern>필터 클래스가 실행될 위치</url-pattern>
  </filter-mapping>
   
  <filter-mapping>....</filter-mapping>
  <filter-mapping>....</filter-mapping>
 
  <servlet>
    <servlet-name>서블릿 닉네임</servlet-name>
    <servlet-class>패키지명을 포함한 서블릿 클래스 풀 네임</servlet-class>
    <init-param>
        <param-name>매개변수명</param-name>
        <param-value>값</param-value>
    </init-param>
    <load-on-startup>실행 순서(숫자, 0은 서버 임의 실행)</load-on-startup>
  </servlet>
   
  <servlet>....</servlet>
  <servlet>....</servlet>
   
  <servlet-mapping>
    <servlet-name>서블릿 닉 네임</servlet-name>
    <url-pattern>URL 패턴</url-pattern>
  </servlet-mapping>
   
  <servlet-mapping>....</servlet-mapping>
  <servlet-mapping>....</servlet-mapping>
   
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
</web-app>


Posted by 후니아부지
:

웹 서버 구동은 아래의 순서로 진행된다.

순서

 처리 내용

 해당 파일 및 폴더

 1

 웹서버 구동에 필요한 포트 및 설정 정보를 인식한다.

 [톰캣폴더]\conf\server.xml

 2

 모든 프로젝트에 공통으로 적용되는 설정 정보 인식한다.

 [톰캣폴더]\conf\web.xml

 3

 모든 프로젝트에 공통으로 적용되는 라이브러리 파일을 인식한다. 더불어 %JAVA_HOME%\lib , %JAVA_HOME%\jre\lib\ext 폴더 내의 jar 파일들도 자동으로 인식한다.

 [톰캣폴더]\common\lib

 4

 프로젝트별 환경 정보를 인식한다.

 [프로젝트이름]\WEB-INF\web.xml

 5

 프로젝트별 라이브러리를 인식한다.

 [프로젝트이름]\WEB-INF\lib

 6

 프로젝트별로 적용되는 서블릿 파일을 인식한다. 설정에 따라 init()을 실행한다.(<load-on-startup> 태그 사용)

 [프로젝트이름]\WEB-INF\classes


웹 서버 종료 시 아래의 순서로 진행된다.

 순서

 처리 내용 

 해당 파일 및 폴더 

 1

 프로젝트별로 적용되는 서블릿 파일을 인식하고 destroy()를 실행하여 메모리를 해제한다.

 [프로젝트이름]\WEB-INF\classes

 2

 프로젝트별로 환경 설정에 사용된 메모리를 해제한다.

 

 3

 모든 프로젝트에 공통적인 환경을 설정하기 위해 사용된 메모리를 해제한다.

 

 4

 웹 서버를 구동하기 위해 열어둔 포트를 닫는다.

 


서블릿라이프 사이클은 다음과 같다

 순서

 처리 내용

 1

 public void init() 또는 public void init(ServletConfig sc) {....} 에 의한 초기화 코드가 실행된다. 

 이는 web.xml 인식 시 <load-on-startup> 태그에 의해 실행되거나, 최초 접속하는 클라이언트에 의해 실행된다.

 2

 public void service(HttpServletRequest request, httpServletResponse response) throws IOException, ServletException {....}

 클라이언트의 요청에 의해 실행되는 메서드로 콘솔 프로그램의 main() 과 같은 역할을 한다.

 3

 public void destroy() {....} 에 의한 메모리 해제

 웹 서버가 종료될 때 실행되어 메모리를 해제한다.


간단한 코드로 서블릿의 라이프 사이클을 확인해보자.

ServeletLifeCycleTest.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package com.study;
 
import java.io.IOException;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
 
public class ServeletLifeCycleTest extends HttpServlet {
    private int callCount;
    public void init() {
        this.callCount = 0;
        System.out.println("Servlet init() called....");
    }
         
    public void service(HttpServletRequest _request, HttpServletResponse _response)
        throws ServletException, IOException{
        System.out.println("Servlet service() called (" + (++(this.callCount)) + ")....");
    }
         
    public void destory() {
        System.out.println("Servlet destroy() called....");
    }
}  


web.xml

1
2
3
4
5
6
7
8
9
10
11
....
<servlet>
  <servlet-name>ServletLifeCycle</servlet-name>
  <servlet-class>com.study.ServeletLifeCycleTest</servlet-class>
</servlet>
 
<servlet-mapping>
  <servlet-name>ServletLifeCycle</servlet-name>
  <url-pattern>/test</url-pattern>
</servlet-mapping>
....


서버에 올리고 주소창에 URL을 입력하면 다음과 같이 init(), service()가 실행됨을 볼 수 있다.


해당 페이지를 리로딩하면 카운트가 계속 올라가며 service()가 호출됨을 확인할 수 있다.


서버 종료 시 destory()가 호출 되어야 하는데 왜 안나오나????




' > web' 카테고리의 다른 글

[Servlet] 서블릿 주요 클래스  (0) 2014.03.04
[Servlet] web.xml 설정 파일  (0) 2014.03.04
[Servlet] 웹 프로그램의 파일 구조  (0) 2014.02.27
[Servlet] MVC 패턴  (0) 2014.02.26
자바 입출력(I/O) - 객체(Obejct) 입출력  (0) 2014.02.24
Posted by 후니아부지
:

다음(Daum)에 블로그가 검색될 수 있도록 등록해보자. 

https://register.search.daum.net/index.daum


등록탭에서 사이트 검색을 선택하고 블로그 URL을 입력하고 확인을 누른다.


※ 블로그 주소를 제대로 입력했는데 아래와 같이 등록되지 않는 경우가 있다.

나의 경우 다시 시도하니 정상적으로 등록화면으로 넘어 갔다.


다음 내용을 작성하고 확인 버튼을 

완료되면 아래와 같이 메시지를 볼 수 있다.


등록되는데는 몇 일 시간이 걸릴 것이다.


추가로 블로그 RSS 등록도 할 수 있는데 블로그 URL과 RSS URL을 입력한다.


※  블로그가 티스토리, Daum 블로그, 싸이월드, 이글루스, YES24, 인터파크는 RSS 등록을 하지 않아도 자동으로 등록된다. 


※ 참고

티스토리의 RSS 피드 주소

http://블로그ID.tistory.com/rss

http://bloodygale.tistory.com/rss





Posted by 후니아부지
:

zum에 블로그 등록하는 것은 간단하다.

zum 고객센터의 검색 문의 페이지를 작성하여 보내면 된다.

이메일, 제목, URL, 내용을 작성하고 문의 종류블로그 등록 요청을 선택한다. 

 

 

Posted by 후니아부지
:

Microsoft 의 검색 엔진인 Bing에 블로그를 등록해보자.

※ 티스토리를 기준으로 작성한다.


아래 링크로 접속한다.

http://www.bing.com/toolbox/webmaster


Sign In (로그인) 버튼을 클릭한다.

Microsoft 계정으로 로그인 할 수 있는데, 계정이 없다면 '지금 등록'을 클릭하여 계정을 생성한다.


※ Microsoft 계정이란?


등록하려는 사이트(블로그) 주소를 넣고 Add 버튼을 클릭한다.


내 웹사이트 정보, 내 정보, 연락처 기본 설정, 알림 기본 설정을 작성하고 저장 버튼을 클릭한다.

그 다음 등록하는 사이트에 대한 소유권을 확인하는 절차가 있다.

3가지 확인 방법이 있는데, 옵션 2의 방법을 사용하겠다.


TISTORY 관리 페이지에서 꾸미기 -> HTML/CSS 편집을 클릭하여 skin.html 파일의 <head> 태그 바로 아래에 주어진 코드를 추가하고 저장한다.


그 다음 소유권 확인 페이지의 확인 버튼을 클릭하면 방금 등록한 사이트에 대한 대시보드가 표시된다.

끝~




Posted by 후니아부지
:

이클립스에서 패키지를 임포트할 때 단축키로 [Ctrl + Shift + O] 를 사용한다.

이를 파일 저장 시 자동으로 임포트되게 설정할 수 있다.


설정화면으로 들어가서 (Window -> Preferences)

다음과 같이 Perform the selected actions on save 와 Organize imports체크하면 된다.



저장(Ctrl + S) 시 자동으로 패키지를 임포트하게 된다.



 

 


Posted by 후니아부지
:

자바로 작성하는 웹 프로그램은 어떤 웹 컨테이너를 사용하든지 다음과 같은 구조를 가진다.

웹 프로그램의 파일 구조


그러나 이클립스에서는 작성이나 관리의 효율성을 위해 조금 변형된 구조를 가진다.

물론, 실제 웹 프로그램이 실행될 때는 다시 원래의 구조로 바뀐다.

이클립스의 웹 프로그램 파일 구조

 

Posted by 후니아부지
:

※ 티스토리 기준


관리 페이지에서 HTML/CSS 편집을 클릭하여 skin.html에 코드를 삽입해야 한다.


다양한 위치에 넣을 수 있는데, 일단 본문 상단, 하단에 넣어본다.

skin.html에서 body의 article_post 섹션내에  를 기준으로 위 영역은 본문 상단, 아래 영역은 본문 하단이 된다.  

 


아래는 본문 상단에 광고 두개를 넣기 위해 테이블을 넣었다. 

'좌측상단광고', '우측상단광고', '하단광고' 로 표시된 곳에 광고 코드를 넣으면 된다.  

adsense_code.html


Posted by 후니아부지
:

프로젝트 생성 후 WEB-INF 내에 web.xml 파일이 없는 경우가 있다.

직접 파일을 생성해서 내용을 써도 되나, 자동으로 생성하는 방법이 있다.

Project Explorer나 Navigator에서 해당 프로젝트에 마우스 우 클릭하여 아래와 같이 선택하면 자동으로 생성된다.

Java EE Tools -> Generate Deployment Descriptor Stub

 

 

 

 

Posted by 후니아부지
:

[Servlet] MVC 패턴

앎/web 2014. 2. 26. 15:47 |
  • Model

데이터를 담거나 DB로 데이터를 보내는 작업을 하는 객체를 말한다.

View 상의 사용자 입력을 담아 가지고 있는 역할을 하며, Controller에서 상태 변화를 알려주면 자기자신의 상태를 변경하여 View에게 알려주는 역할을 한다. 

DTO를 통해 상태를 주고 받으며 DB와의 데이터 통신을 위해 DAO를 사용한다.


  • View

Model을 화면상에 보여주는 부분을 말한다. 

Model의 변화된 상태를 가져와서 보여준다.

View에서의 데이터 입력을 Controller에 전달한다. 

Controller가 선택한 View를 보여준다.


  • Controller

Model과 View간의 데이터 전달 및 결과에 대한 View를 선택하여 응답하는 역할을 한다.


 

MVC 구조 활용 예시

사용자 등록하는 기능 구현해본다.

0. 사용자 정보를 관리하기 위한 DB 테이블을 생성한다.


1. 사용자 등록을 위한 html 페이지를 작성한다. (View)

MVC_Test_Register.htm


2. 사용자 페이지에서 넘어오는 데이터 저장을 위한 DTO 클래스를 작성한다. (Model)

MVC_Test_MemberDTO.java


3. DTO에 저장된 데이터를 DB로 저장하는 작업을 하는 DAO 클래스를 작성한다. (Model)

MVC_Test_MemberDAO.java


4. 사용자 페이지에서 넘어온 데이터를 DTO에 넣고 DAO 클래스의 관련 메서드에 전송하는 작업을 하고, 그 작업 결과에 따라 이동할 페이지를 결정하는 클래스를 작성한다. (Controller)

MVC_Test_MemberProcess.java


5. 서블릿 정보를 등록한다.

web.xml


6. 처리 결과에 따른 뷰 페이지를 작성한다. (View)

MVC_Test_Success.htm

 

MVC_Test_Failure.htm

서버에 올려 확인해보자.

 

MVC_Test.rar


 

Posted by 후니아부지
: