Java Servlet


JSP가 나오기 전에 먼저 출현
Servlet은 자바소스코드(.java)로 구현된 후 사용자가 직접 컴파일 (javac이용)한 후 웹서버/서블릿 엔진에 올려야 한다.
Servlet+JSP Model2
Model2는 Servlet-JSP-JavaBeans를 연동하여 사용하는 방식
Servlet에서 사용자의 요청을 받아서 선처리한 후, 적합한 JSP/JavaBeans에게 요청을 포워딩하여 JSP가 사용자에게 응답할수 있도록 하는 개발 방법

 

서블릿은 RequestDispatcher객체를 통해 사용자의 원래 요청을 다른 서블릿이나 JSP페이지등과 같은 다른 동적 웹 자원으로 전달한다.

 

 

[서블릿 실행을 위한 톰캣 환경 설정]


/tomcat6/conf/server.xml-----------------------------------------
69행
    <Connector port="9090" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" URIEncoding="UTF-8"/>


/tomcat6/conf/context.xml--------------------------------------
19행
    <Context reloadable="true" privileged="true">


/tomcat6/conf/web.xml--------------------------------------
127행 주석제거
    <servlet>
        <servlet-name>invoker</servlet-name>
        <servlet-class>
          org.apache.catalina.servlets.InvokerServlet ->서블릿을 사용하기 위해서 진입하는 곳
        </servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>0</param-value>
        </init-param>
        <load-on-startup>2</load-on-startup>
    </servlet>

387행 주석제거
    <servlet-mapping>
        <servlet-name>invoker</servlet-name>
        <url-pattern>/servlet/*</url-pattern> 

              -> 우리가 요청하는 패턴. servlet가상경로가 싫으면 /*해도 되지만, 기본환경설정은 건드리지 말것
    </servlet-mapping>


---------------------------------

java.lang.NoClassDefFoundError에러

 

Project->Properties->Java Build Path -> Libraries -> Add External JARs...
-> 톰캣설치폴더\lib\servlet-api.jar 추가
---------------------------------

 


[서블릿(Servlet)의 기본]

 

1) 서블릿의 개요
- JSP와 서블릿은 자바 기반으로 만들어진 웹 프로그래밍 언어이다
- 서블릿이 자바 코드에 의존적이라면 JSP는 덜 의존적이라 프로그래밍하기가 더 쉽고 편하다

 

2) 서블릿의 동작 원리
- Servlet클래스 작성 : GenericServlet 클래스 또는 HttpServlet클래스 상속받는다
- javax.servlet과 javax.servlet.http의 클래스와 인터페이스를 이용해 만든다
- 서블릿은 main()메소드를 갖지 않는다.

  서버가 서블릿에 요청을 전달할 때마다 서블릿의 service()메소드가 호출된다

 

3) 서블릿의 요청과 응답의 과정에서 웹컨테이너(톰캣)가 하는일
- 객체가 있는지 유무판단, 없으면 생성
- Thread생성
- Service()호출
- Service()가 doGet()자동 호출

4) 서블릿의 요청과 응답의 과정에서 Service() 메소드가 하는일
- request가 올 때마다 doGet()호출
- doGet()은 HttpServlet에 의해 지원 받는 몇몇 Service()중 하나이다.

----------------------------------

 

 

예제) 간단한 서블릿 만들기

 

HelloServlet.java------------------------------------


package part.control;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloServlet extends HttpServlet {

   //웹브라우저의 요청을 받는 서비스 메소드
    public void doGet(HttpServletRequest req, HttpServletResponse res)
    throws ServletException, IOException{
       res.setContentType("text/html;charset=euc-kr");
       try {
           PrintWriter out = res.getWriter();
           out.println("<HTML>");
           out.println("<HEAD><TITLE>Hello Servlet</Title></Head>");
           out.println("<BODY>");
           out.println("하하하...");
           out.println("</BODY>");
           out.println("<HTML>");
           out.close();
       }catch(Exception e){
           getServletContext().log("Error in HelloServlet:",e);
       }
    }
}

 

 

결과확인
http://localhost:9090/mvc/servlet/part.control.HelloServlet

-----------------------------------------------------------------------

 

 

예제) 서블릿에서 폼 데이터 처리

 

/control/greet.html------------------------------------------------


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
 <meta http-equiv="Content-Type" content="text/html;charset=euc-kr">
<TITLE> 폼과 서블릿의 만남  </TITLE>
</HEAD>
<BODY>
<!-- 1)JSP 방식 : action="greetok.jsp" -->
<!-- 2)서블릿 방식: action="Greet" -->
<form method="get" action="/mvc2Test/servlet/Greet">
  당신의 아이디는
  <input type="text" name="id"><p>
  <input type="submit" value="확인">
</form>
</BODY>
</HTML>

 

 

greetok.jsp--------------------------------------

 

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>greetok.jsp</title>
</head>
<body>

당신의 아이디는
<%
String id=request.getParameter("id");
out.print(id);
%>
님 환영합니다.

</body>
</html>

 

 

Hello.java--------------------------------------------------------

 

package part.test;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Greet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
       
        resp.setContentType("text/html;charset=euc-kr");
        String id=req.getParameter("id");
        try {
            PrintWriter out=resp.getWriter();
            out.println("<HTML>");
            out.println("<HEAD><TITLE>form&servlet</TITLE></HEAD>");
            out.println("<BODY>");
            out.println("당신의 아이디:");
            out.println("<font color=red><strong>");
            out.println(id);
            out.println("</strong></font>");
            out.println(" 님<br>방문을 환영합니다.");
            out.println("</BODY>");
            out.println("<HTML>");
            out.close();
        }catch(Exception e){
            getServletContext().log("Error in HelloServlet:",e);
        }
    }
}

web.xml------------------------------------
  <servlet>
    <servlet-name>Hello</servlet-name>
    <servlet-class>part.control.Hello</servlet-class>
  </servlet>

 

 

 

[서블릿의 라이프 사이클]


- init() 단 1번만 호출
  서블릿이 서비스하기 위해 필요한 초기화 작업을 수행
- service() request당 1개씩 호출
   클라이언트의 요청이 있을때마다 실행
- destroy() 1번만 호출. 관리 컨테이너가 종료될때
                                 타임아웃되었을때
                                 클래스의 내용이 변경되었을때(재컴파일) 호출

- 서블릿이 처음에 로드되면 init()메소드가 실행
- init()메소드가 service()메소드 호출 

 


LifeCycle.java-----------------------

 

package part.control;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class LifeCycle extends HttpServlet {
    int loc=0;
    @Override
    public void init(ServletConfig config) throws ServletException {
        // TODO Auto-generated method stub
        System.out.println("init()");
        System.out.println("loc="+loc);       
    }
   
    @Override
    protected void service(HttpServletRequest arg0, HttpServletResponse arg1)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
        System.out.println("service()");
        loc++;
        System.out.println("loc="+loc);
    }
   
    private void destory() {
        // TODO Auto-generated method stub
        System.out.println("destory()");
    }
   
}

============================================

 

'..열심히 공부하세.. > MVC' 카테고리의 다른 글

[06] 서블릿 요청 커맨드 패턴 (~~~.do)  (0) 2012.06.23
[05] Model1방식과 MVC 패턴의 개요 및 커맨드 패턴  (0) 2012.06.21
[03] 커스텀태그  (0) 2012.06.19
[02] JSTL  (0) 2012.06.19
[01] 표현언어  (0) 2012.06.18

[ 자바 커스텀태그]
- 커스텀태그란 자신이 직접 정의할 수 있는 태그를 의미한다
- 일반적으로 태그들은 모두 각각의 기능이 있지만 그 기능들로는 자신이 원하는 내용을 구현하지 못할수 있다
- 현재 존재하는 태그 외에도 새로운 태그를 만들어내어 자신만이 원하는 기능을 구현할 수 있다
- 커스텀태그는 라이브러리 형태로 만들어두고 필요할 때마다 가져다가 쓰는것이 일반적이다.
- 커스텀태그를 만들어서 프로그래밍을 하면 개발 속도는 빨라지고 효율적으로 개발할 수 있다.
- 바디가 없는 태그 <  />
- 바디가 있는 태그 < >  </ >
- 커스텀태그는 바디가 있는 태그를 사용자가 임의적으로 만들어서 쓰는 태그

 

* 커스텀태그 사용의 장점
- 자신이 직접 원하는 기능을 구현하여 작성할 수 있는 태그이기 때문에
  일반 태그로 구현하지 못했던 한계점을 극복할 수 있다.
- 작성한 커스텀태그를 라이브러리로 작성해 둔다면 다음 개발 할때에
  가져다 사용하기 매우 편리한 프로그래밍 기능이다.
- 직접 작성한 태그이므로 가독성이 높고 유지보수가 쉽다
- 반복적인 기능을 쉽게 구현할 수 있으므로 코딩 시간이 짧아질수 있다

 

* 커스텀 태그의 구조 및 작동원리
- 커스텀태그가 작동하기 위해서는 실제로 커스텀 태그의 기능을 하는
  클래스파일이 존재해야 한다. 이 클래스 파일을 태그 핸들러 한다.
- 태그 핸들러가 존재한다면 그 다음으로는 태그 핸들러에 대한
  TLD파일이 존재해야 한다.
- TLD파일 : 태그핸들러의 기능을 JSP페이지에서 태그로 사용할 수 있게
  만들어 주는 기능이다
- 작성한 커스텀태그를 JSP페이지에서 태그 라이브러리로 등록하여 사용한다

 

[사용자 정의 태그 사용하기]
- 커스텀 태그를 사용하려면 javax.servlet.jsp.tagext패키지 필요
  tomcat\lib\jsp-api.jar 복사
 C:\Program Files\Java\jdk1.6.0_29\lib 붙여넣기
 내컴퓨터->속성->고급->환경변수
 CLASSPATH  .;C:\Program Files\Java\jdk1.6.0_29\lib\tools.jar;C:\Program Files\Java\jdk1.6.0_29\lib\servlet-api.jar;C:\Program Files\Java\jdk1.6.0_29\lib\jsp-api.jar
 JAVA_HOME  C:\Program Files\Java\jdk1.6.0_29

 

- 작성순서
  1) 자바 클래스 파일 .class
     커스텀 태그 정의 (구조,로직)
  2) TLD파일 .tld
     자바클래스 파일을 태그로 사용할 수 있도록 등록
  3) web.xml
     JSP페이지에서 사용할 수 있도록 TLD파일 등록
  4) JSP페이지 .jsp
     커스텀 태그 사용

- 커스텀태그를 정의하고 처리하는 태그핸들러
  . 태그 핸들러를 만들기 위한 클래스
    TagSupport          body 내용을 처리하지 않는 경우
    BodyTagSupport   body 내용을 처리하는 경우

  . body의 유무 구분
    body가 없는 경우  <tag:welcome/>
    body가 있는 경우  <tag:welcome>홍길동</tag:welcome>

 


예제1) body가 없는 경우=================================

 

WelcomeTag.java-----------------------
package part.custom;

import java.io.*;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;

public class WelcomeTag extends TagSupport {
    public int doStartTag() throws JspException {
        try {
            pageContext.getOut().print("Welcome to My Custom Tag");
        } catch (Exception ex) {
            throw new JspTagException("WelcomeTag: " + ex.getMessage());
        }
        return SKIP_BODY;
    }
}

 

doStartTag() 시작태그를 만날때 실행 <tag:welcome부분을 만나면 자동실행
pageContext.getOut() out객체 리턴
SKIP_BODY body가 없음을 알리며 태그명 뒤에 />처리를 한다.


/WEB-INF/tlds/welcomeTag.tld------------------------
<?xml version="1.0" encoding="euc-kr" ?>

<taglib
   xmlns="http://java.sun.com/xml/ns/j2ee"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
     http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
     version="2.0"
>
      
    <description>JSP1.2 커스텀 태그 예제</description>
    <display-name>간단한 JSP1.2 커스텀 태그 예제</display-name>
    <tlib-version>1.0</tlib-version>
    <short-name>welcomeTag</short-name>

  <tag>
 <name>welcome</name>
 <tag-class>part.custom.WelcomeTag</tag-class>
 <body-content>empty</body-content>
  </tag>
</taglib>

<body-content>empty</body-content>
커스텀 태그의 body가 존재하지 않을 경우 empty로 입력해야함. 필수요소


web.xml---------------------------------
<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                             http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
              
  <display-name>mvc</display-name>
  <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>
  
  <jsp-config>
    <taglib>
        <taglib-uri>mycomputeadd</taglib-uri>
        <taglib-location>/WEB-INF/tlds/el-functions.tld</taglib-location>
    </taglib>

    <taglib>
        <taglib-uri>/WEB-INF/tlds/welcomeTag.tld</taglib-uri>
        <taglib-location>/WEB-INF/tlds/welcomeTag.tld</taglib-location>
    </taglib>
  </jsp-config> 
 
</web-app>

 

custom/WelcomeTag.jsp-----------------------
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%@ taglib prefix="tag" uri="/WEB-INF/tlds/welcomeTag.tld" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>JSP1.2의 커스텀태그 작성 1</h3>
<font color="red">
<tag:welcome/>
</font>
</body>
</html>

=========================================


예제2) body가 있는 경우

 

WelcomeBodyTag.java------------------------------------------
package part.custom;

import java.io.*;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;

public class WelcomeBodyTag extends TagSupport {
   
    public int doStartTag() throws JspException {
        try {
            pageContext.getOut().print("환영합니다 <b>");
        } catch (Exception ex) {
            throw new JspTagException("WelcomeBodyTag: " + ex.getMessage());
        }
        return EVAL_BODY_INCLUDE;
    }
}

EVAL_BODY_INCLUDE body부분이 그대로 출력되기를 원할때

 

welcomeTag.tld-------------------------------------------------
  <tag>
 <name>welcomeBody</name>
 <tag-class>part.custom.WelcomeBodyTag</tag-class>
 <body-content>JSP</body-content>
  </tag>

커스텀태그의 body가 존재할 경우 JSP로 입력. 필수 요소

 

welcomeBodyTag.jsp-------------------------------------------
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%@ taglib prefix="tag" uri="/WEB-INF/tlds/welcomeTag.tld" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>JSP1.2의 커스텀태그 작성 2-body있는 태그</h3>
<font color="blue">
<tag:welcomeBody>홍길동</tag:welcomeBody>
</font>
</body>
</html>

 

'..열심히 공부하세.. > MVC' 카테고리의 다른 글

[05] Model1방식과 MVC 패턴의 개요 및 커맨드 패턴  (0) 2012.06.21
[04] 서블릿 작동원리 및 기초  (0) 2012.06.20
[02] JSTL  (0) 2012.06.19
[01] 표현언어  (0) 2012.06.18
Servlet 기초 예제  (0) 2012.03.08

[JSTL]
- JSP Standard Tag Library
- 커스텀 액션+함수
- 자주 사용될수 있는 custom tag들을 모아 표준으로 정해놓은 tag library
- apache에서 다운받아 lib에추가(아파치 톰캣 7.0부터는 기본임)
- custom tag이므로, 사용 JSP에서 taglib지시자 태그 설정 필요

 

[taglib 디렉티브] <%@tablib%>
- 표현언어(EL : expression Language), JSTL(JSP Standard Tag Library), 커스텀태그를 JSP페이지내에 사용할때 사용
- 예) <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
- 사용자가 정의한 어떠한 태그라도 설정의 정보는 uri속성의 값이 가지고 있고,
- 이것을 해당 페이지 내에서 사용할 때 uri속성의 값이 복잡하므로
- prefix속성의 값이 별명과 같은 역할을 한다.
- prefix속성의 값을 사용하면 uri속성의 값을 사용하는 것과 같다.
- uri부분을 통해 우리가 어떤 '표준태그라이브러리'를 쓸 것인지 식별하게 된다.
- JSP페이지는 uri에 입력된 값을 통해 태그라이브러리를 식별하여 해당 라이브러리로 찾아가기 때문에  정확히 입력해야 한다
- JSTL의 표준태그라이브러리 (지정자)
             라이브러리       URI
             코어                http://java.sun.com/jsp/jstl/core
             XML                http://java.sun.com/jsp/jstl/xml
            국제화              http://java.sun.com/jsp/jstl/fmt
            데이터베이스     http://java.sun.com/jsp/jstl/sql
            함수                 http://java.sun.com/jsp/jstl/functions

 

* JSTL 설치
1)
D:\ERPJava_04\tomcat-60\webapps\examples\WEB-INF\lib

2)
http://tomcat.apache.org/taglibs/standard/ 다운


[JSTL core]
- 변수선언, 삭제등 변수와 관련된 작업과 if문, for문 등과 같은 제어문, url처리등에 사용된다
- core 태그 라이브러리를 사용하려면 아래와 같이 <%@taglib>디렉티브 작성
   <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%
- <c:set> 변수설정
- <c:out> 화면에 변수값 출력
- <c:remove> 변수제거
- <c:catch>코드의 예외를 잡아냄
- <c:if>조건
- <c:choose>switch문
- <c:forEach> 반복문

---------------------------------------
jstl폴더 생성

 

jstlEx1.jsp---------------------------
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>   
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>JSTL</title>
</head>
<body>
[JSTL 코어태그]
변수지원 및 사용<br/>
<c:set var="num1" value="${20}"/>
<c:set var="num2">10.5</c:set>
<c:set var="today" value="<%=new java.util.Date() %>"/>

변수 num1=${num1 }<br/>
변수 num2=${num2 }<br/>
num1+num2=${num1+num2 }<br/>
오늘은 ${today } 입니다.<br/>

<c:remove var="num1" scope="page"/>
삭제한 후의 num1=${num1 }<br/>
삭제한 후의 num1+num2=${num1+num2 }

</body>
</html>

 

jstlEx2.jsp--------------------------
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>   
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>조건문</title>
</head>
<body>
<form action="jstlEx2ok.jsp" method="post">
  <input type="text" name="name">
  <input type="text" name="age">
  <input type="submit" value="확인">
</form>
</body>
</html>

 

jstlEx2ok.jsp-----------------------
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>조건문</title>
</head>
<body>

<br/>---------
<c:if test="true">무조건 수행</c:if>

<br/>---------
${param.name }
${param.age }

<c:if test="${param.name=='bk'}">
name 파라미터의 값이 ${param.name }입니다
</c:if>

<c:if test="${18<=param.age}">
당신의 나이는 18세 이상입니다.
</c:if>

<br/>---------

<c:choose>
  <c:when test="${param.name=='bk'}">이름:${param.name}</c:when>
  <c:when test="${param.age>=18}">나이:${param.age}</c:when>
  <c:otherwise>bk아니고, 18이상 아님</c:otherwise>
</c:choose>

<br/>---------

</body>
</html>


jstlEx3.jsp-------------------------

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>   
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>반복문</title>
</head>
<body>

<c:forEach begin="1" end="5" var="cnt">
  <font size=${cnt}>야호</font>
</c:forEach>
<br/>-----------------<br/>

1부터 100까지 숫자 중에서 짝수 만 출력
<br/>-----------------<br/>
<c:forEach begin="1" end="100" var="k">
  <c:if test="${k%2==0}">
    <c:out value="${k }"/>
  </c:if>
</c:forEach>


</body>
</html>

'..열심히 공부하세.. > MVC' 카테고리의 다른 글

[04] 서블릿 작동원리 및 기초  (0) 2012.06.20
[03] 커스텀태그  (0) 2012.06.19
[01] 표현언어  (0) 2012.06.18
Servlet 기초 예제  (0) 2012.03.08
서블릿 환경설정하기  (0) 2012.03.08

 

[표현언어:EL]

- expression Language
- JSP페이지에서 자바 코드의 역할을 대신하기 위해서 개발된 언어
- 데이터 처리 결과를 출력하는 JSP페이지에 주로 사용
- 복잡한 데이터 처리 로직을 구사할 수 없다
- JSP2.0에서 새롭게 추가된 스크립트 언어
- JSTL과 연동
- 표현언어(EL)의 표현식
  . 변수와 연산자를 포함한다.
  . JSP의 영역(page, request, session, application)에 저장된 어떤 속성 및 자바빈이라는 표현언어(EL)의 변수로 사용될 수 있다.
  . ${식}
   식 안에는 데이터이름, 연산자를 포함하는 EL식
- ${num}은 <%=num%>(표현식)와 결과가 같다
- JSP스크립트 내부에서는 쓸수 없다 <%%>, <%!%>, <%=%>
- 표현언어의 내장객체
  . pageScope
  . requestScope
  . sessionScope
  . applicationScope
  . param 모든 request 파라미터들을 문자열로 가진 콜렉션


- 연산자를 사용 elEx1.jsp
- 파라미터값 처리 elEx2.jsp -> elEx2ok.jsp
- 내장객체의 사용 elEx3.jsp
- 표현언어에서 자바 클래스의 메소드 사용 elEx4.jsp
  1) 자바 클래스 파일을 작성한다(.java)
  2) 태그 라이브러리에 대한 설정 정보를 담고 있는 TLD파일을 작성한다.
  3) web.xml 파일에 tld파일을 사용할 수 있는 설정 정보를 추가한다
  4) 자바 클래스의 메소드에 접근하는 JSP페이지를 작성한다

 

=============================
- JSP에서 자바클래스를 사용하는 방법
  1) <%@ page import="part.el.Compute" %>
  2) 자바빈 활용
      <jsp:useBean id="cmp2"
             class="part.el.Compute"
             scope="page"/>
  3) 표현언어에서 활용

============================

- 표현언어에서 자바 클래스의 메소드 사용 작성 순서
   1) Compute.java 작성
   2) /WEB-INF/tlds 폴더 생성
   3) /WEB-INF/tlds/el-functions.tld 파일 생성 (New->File->Source탭)

    //메소드 1개당 function태그 1개
    <function>
        <description> x 와 y의 합</description> //설명
        <name>add</name> //메소드명. ()는 생략되어야 한다
        <function-class>part.el.Compute</function-class>
       //사용할 메소드가 정의되어 있는 클래스명을 기술. 패키지명 포함
        <function-signature>
        int add(java.lang.String,java.lang.String)
       //매개변수의 타입은 객체형일 경우 패키지명을 포함한 풀네임을 써야 한다.
        </function-signature>
   </function>

 
   4) web.xml (배치기술자)

  <jsp-config>
    <taglib>
        //tld파일의 가르키는 것 (네임스페이스)
        <taglib-uri>mycompute</taglib-uri>

        //tld파일의 실제 물리적인 경로
        <taglib-location>/WEB-INF/tlds/el-functions.tld</taglib-location>
    </taglib>
  </jsp-config>


=============================
HTML+XML ->
XHTML ->
HTML+XHTML ->
HTML4(웹) 가장 일반화 ->
HTML5(스마트앱용)
=============================

 

- xml 문법
   . 사용자 만들어서 사용하는 태그
     예를들어) <green>그린컴퓨터학원</green>
   . 프로그램 개발시 자주 사용하는 문법은 아니다.
   . 서버에서 배치기술자라고 하는 web.xml에서 사용한다
   . 여는 태그가 있으면 반드시 닫는 태그가 와야 한다.
   . 여는 태그와 닫는 태그를 동시에 할수도 있다 <br/>

 

 

elEx1.jsp------------------------------

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>표현언어</title>
</head>
<body>

<%
String name="홍길동";
int kor=70,eng=80;
int aver=(kor+eng)/2;

if(aver>=70)
{
%>
   <a href="#"><%=name %> ${70}</a>
<%
}
else{
%>
   <a href="#">수박</a>
<%
}
%>

<br/>------------------
<br/>
<H3>간단한 표현언어(EL)예제</H3>
<P>
연산자를 사용한 예와 내장객체의 사용한 예:

<TABLE BORDER="1">
  <THEAD>
    <TD><B>표현식</B></TD>
    <TD><B>값</B></TD>
  </THEAD>
  <TR>
    <TD>\${2 + 5}</TD>
    <TD>${2 + 5}</TD>
  </TR>
  <TR>
    <TD>\${4/5}</TD>
    <TD>${4/5}</TD>
  </TR>
  <TR>
    <TD>\${5 div 6}</TD>
    <TD>${5 div 6}</TD>
  </TR>
  <TR>
    <TD>\${5 mod 7} 나머지</TD>
    <TD>${5 mod 7}</TD>
  </TR>
  <TR>
    <TD>\${2 < 3}</TD>
    <TD>${2 < 3}</TD>
  </TR>
  <TR>
    <TD>\${2 gt 3} </TD>
    <TD>${2 gt 3}</TD>
  </TR>
  <TR>
    <TD>\${(5 > 3) ? 5 : 3}</TD>
    <TD>${(5 > 3) ? 5 : 3}</TD>
  </TR>
  <TR>
    <TD>\${header["host"]}</TD>
    <TD>${header["host"]}</TD>
  </TR>

</TABLE>
</body>
</html>

 

 

elEx2.jsp-----------------------

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<TITLE>표현언어의 사용예제2</TITLE>
</HEAD>

<BODY>

<H3>표현언어의 사용예제2 -파라미터값 처리</H3>
<P>
<FORM action="elEx2ok.jsp" method="post">
   이름 : <input type="text" name="id">
   비번 : <input type="text" name="passwd">
       <input type="submit" value="확인">
</FORM>
</BODY>
</HTML>

 

elEx2ok.jsp---------------------------

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<% request.setCharacterEncoding("euc-kr");%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%
String id=request.getParameter("id");
String passwd=request.getParameter("passwd");
%>
1)변수대입-----------<br/>
아이디:<%=id %><br/>
비번:<%=passwd %><br/>

2)request객체 직접 접근-----------<br/>
아이디:<%=request.getParameter("id") %><br/>
비번:<%=request.getParameter("passwd") %><br/>

3)표현언어 파라미터값 처리------------<br/>
아이디:${param.id}<br/>
비번:${param.passwd }<br/>

 

</body>
</html>

 

elEx3.jsp---------------------------------

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>표현언어 내장객체</title>
</head>
<body>
<%
String str="대한민국";
pageContext.setAttribute("name", "홍길동");//해당페이지에서만 생존
request.setAttribute("id", "user1");//request영역
session.setAttribute("pass", "1234");//session영역
%>

str : <%=str %> <br/>
str : ${str }<br/>
name : ${name }<br/>

표현언어로 접근------------<br/>
id : ${requestScope.id }<br/>
pass : ${sessionScope.pass }<br/>
name : ${pageScope.name }<br/>
param : ${param.name }<br/>

 

 


</body>
</html>

 

elEx4.jsp------------------------------

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>

<jsp:useBean id="cmp2"
             class="part.el.Compute"
             scope="page"/>
            
<%
int res=cmp2.add("5", "8");
out.print(res);
%>

<%--

1)첫번째 방법
<%@ page import="part.el.Compute" %>

<%
Compute cmp=new Compute();
int res=cmp.add("3", "5");
out.print(res);
%>

--%>

 

 

elEx5.jsp----------------

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<TITLE>표현언어에서 함수사용하기</TITLE>
</HEAD>

<BODY>

<H3>표현언어에서 함수사용하기 -두 숫자의 덧셈</H3>
<P>
<FORM action="elEx5ok.jsp" method="post">
   X : <input type="text" name="x" >
   <BR>
   Y : <input type="text" name="y" >
   <input type="submit" value="덧셈">
</FORM>

</BODY>
</HTML>

 

elEx5ok.jsp-----------------------

 

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
   
<%@ taglib prefix="test" uri="mycompute" %>

<% request.setCharacterEncoding("euc-kr");%>   
   
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<TITLE>표현언어에서 함수사용하기</TITLE>
</HEAD>

<BODY>

<H3>표현언어에서 함수사용하기 -두 숫자의 덧셈</H3>
<P>

합은 : ${test:add(param.x,param.y)} 입니다.
<br/>
빼기 : ${test:sub(param.x,param.y)} 입니다.
<br/>
곱하기 : ${test:mul(param.x,param.y)} 입니다.
<br/>
나누기 : ${test:divide(param.x,param.y)} 입니다.
<br/>
나머지 : ${test:modulus(param.x,param.y)} 입니다.

</BODY>
</HTML>

 


 

 

 

 

 

 

 

 

 

'..열심히 공부하세.. > MVC' 카테고리의 다른 글

[04] 서블릿 작동원리 및 기초  (0) 2012.06.20
[03] 커스텀태그  (0) 2012.06.19
[02] JSTL  (0) 2012.06.19
Servlet 기초 예제  (0) 2012.03.08
서블릿 환경설정하기  (0) 2012.03.08

* 함수
- function, method, 멤버함수
- 처리해야 할 명령어들을 모아 놓은 것
- 함수는 메이커측에서 제공되는 함수가 있는데
   대부분 객체형태로 제공된다
- 사용자 정의 함수 (user defined)
- 함수작성(정의), 함수호출


* 함수의 호출관계
- 파라미터값이 있으냐? 없느냐?
- return값이 있으냐? 없느냐?
- parameter (전달값)

 

* 함수 만드는 형식

리턴되는값의자료형 함수이름()
{
    처리해야 하는 명령어
}

- 리턴값이 없는 함수 void형
- main() 함수는 사용자가 호출하는 함수가 아니다
- 함수를 작성할 때 main()함수 안에 작성 불가

 

* 함수의 흐름
- 함수호출 -> 함수실행후 -> 해당 함수를 호출한 곳으로 리턴한다
- 리턴할때 리턴되는 값이 없을경우 return명령어는 생략가능
- 리턴값은 오로지 1개만 리턴할수 있다.
   리턴값이 있을경우 리턴값의 자료형을 써 줘야 한다
   더이상 void형이 아님

 

------------------------------------------

 

#include <stdio.h>


void test()
{
   printf("HAPPY");
   return;

}//함수정의


void test2(int n)
{
   printf("%d",n);
   return;
}


void chart(int n,char ch)
{
   for(int p=1; p<=n; p++)
   {
       printf("%c",ch);
   }

   return;
}


int abs(int n)
{
   if(n<0)
    return n*-1;
   else
    return n;
}


int fact(int n)
{
   int gop=1;
   int p;
   for(p=n; p>=1; p--)
   {
      gop=gop*p;
   }

   return gop;
}

int max(int p,int q,int r)
{
   int m;
   m=(p<q) ? q : p ;
   m=(m<r) ? r : m ;
   return m;
}

void main()
{

    //파라미터값이 없는 경우
    //test(); //함수호출

 //파라키터값이 1개 있는 경우
 //test2(456);

 //★문자를 8번찍는 함수 작성
 //chart(8,'#');


 //리턴값이 있을 경우
    int res=abs(-5); //함수 호출

    printf("%d",res);


 //팩토리얼값 구하기
 res=fact(5);
    printf("%d",res);


 //세개의 숫자 중에서 제일 큰 값 리턴
 res=max(10,20,30);
    printf("%d",res);

 

 

}

 

'..열심히 공부하세.. > C 입문' 카테고리의 다른 글

[10] 다차원 배열  (0) 2012.05.31
[정렬 알고리즘]  (0) 2012.05.29
[요일구하는 프로그램]  (0) 2012.05.25
[09] 배열 Array  (0) 2012.05.25
[08] while문, do~while문  (0) 2012.05.25

 

* 다차원 배열

1차원
[열, 칸, column, field]


2차원
[행, 줄, row][칸]


3차원
[면][행][열]

--------------------


int idx;
int p[5]={11,22,33,44,55}; //1차원 배열
for(idx=0; idx<5; idx++)
{
   printf("p[%d]=%d ",idx,p[idx]);
}

printf("\n");

int q[2][4]={
                     {10,20,30,40},
                     {50,60,70,80},
                  };

int a,b;
for(a=0; a<=1; a++)
{
   for(b=0; b<=3; b++)
   {
       printf("%d ",q[a][b]);
   }//칸

    printf("\n");

}//열


int su[4][4]={
                     {2,5,3,0},
                     {4,8,9,0},
                     {6,8,7,0},
                     {0,0,0,0}
                   };

//출력결과
2   5   3  10
4   8   8  20
6   8   7  21
12 21 19 
---------------
//가로행의 합
su[0][3]=su[0][0]+su[0][1]+su[0][2]
su[1][3]=su[1][0]+su[1][1]+su[1][2]
su[2][3]=su[2][0]+su[2][1]+su[2][2]

//세로행의 합
su[3][0]=su[0][0]+su[1][0]+su[2][0]
su[3][1]=su[0][1]+su[1][1]+su[2][1]
su[3][2]=su[0][2]+su[1][2]+su[2][2]

for(a=0; a<=2; a++)
{
   for(b=0; b<=2; b++)
   {
       su[a][3]+=su[a][b];//가로행
       su[3][a]+=su[b][a];//세로행
   }
}


for(a=0; a<=3; a++)
{
   for(b=0; b<=3; b++)
   {
       printf("%d ",su[a][b]);
   }//칸

    printf("\n");

}//열

 

 

-----------------------------------------------------

 

#include <stdio.h>

void main()
{

int idx;
int p[5]={11,22,33,44,55}; //1차원 배열
for(idx=0; idx<5; idx++)
{
   printf("p[%d]=%d ",idx,p[idx]);
}

printf("\n");

int q[2][4]={
                     {10,20,30,40},
                     {50,60,70,80},
                  };

int a,b;
for(a=0; a<=1; a++)
{
   for(b=0; b<=3; b++)
   {
       printf("%d ",q[a][b]);
   }//칸

    printf("\n");

}//열


int su[4][4]={
                     {2,5,3,0},
                     {4,8,9,0},
                     {6,8,7,0},
                     {0,0,0,0}
                   };

for(a=0; a<=2; a++)
{
   for(b=0; b<=2; b++)
   {
       su[a][3]+=su[a][b];//가로행
       su[3][a]+=su[b][a];//세로행
   }
}


for(a=0; a<=3; a++)
{
   for(b=0; b<=3; b++)
   {
       printf("%d ",su[a][b]);
   }//칸

    printf("\n");

}//열


}

 

 

 

 

 

 

 

'..열심히 공부하세.. > C 입문' 카테고리의 다른 글

[11] 함수  (0) 2012.05.31
[정렬 알고리즘]  (0) 2012.05.29
[요일구하는 프로그램]  (0) 2012.05.25
[09] 배열 Array  (0) 2012.05.25
[08] while문, do~while문  (0) 2012.05.25

* Sort 정렬
- 어느 키값을 기준으로 배치를 다시 하는 것 
- 오름차순 Ascending
   1--->10
   A---> Z
   a--->z
   ㄱ-->ㅎ
- 내림차순 Descending
- 소트의 종류 : Sellection, Bubble, Shell, Quick...

 

 


int su[5]={10,-5,20,7,8};

//문) 음수의 갯수를 구하시오
/*
if(su[0]<0)
if(su[1]<0)
if(su[2]<0)
if(su[3]<0)
if(su[4]<0)
*/

int cnt=0;
int idx;
for(idx=0; idx<=4; idx++)
{
   if(su[idx]<0) cnt++;
}

printf("%d\n",cnt);


//int su[5]={10,-5,20,7,8};

//문)su[1]번째의 등수를 구하시오

int rank=1;
for(idx=0; idx<=4; idx++)
{
   if(su[1]<su[idx]) rank=rank+1;
}


printf("%d\n",rank);


//성적프로그램

char name[5][10]={"무궁화","개나리","진달래","봉선화","라일락"};
int kor[5]={70,80,40,50,90};
int eng[5]={50,60,20,90,40};
int mat[5]={40,80,60,30,20};


//총점과 평균구하기
int tot[5], aver[5];
int idx;
for(idx=0; idx<=4; idx++)
{
   tot[idx]=kor[idx]+eng[idx]+mat[idx];
   aver[idx]=tot[idx]/3;
}


//출력하기
for(idx=0; idx<=4; idx++)
{
   printf("%s %d %d %d ",name[idx],kor[idx],eng[idx],mat[idx]);
   printf("%d %d\n",tot[idx],aver[idx]);

}


//평균을 기준으로 무궁화의 등수를 구하시오
/*
int rank=1;
for(idx=0; idx<=4; idx++)
{
   if(aver[0]<aver[idx]) rank=rank+1;
}

printf("%d\n",rank);
*/


//평균을 기준으로 반전체의 등수를 구하시오
int rank[5]={1,1,1,1,1}
int n;

for(idx=0; idx<=4; idx++)
{
    for(n=0; n<=4; n++)
    {
       if(aver[idx]<aver[n]) rank[idx]=rank[idx]+1;
    }
}

//출력하기
for(idx=0; idx<=4; idx++)
{
   printf("%s %d %d %d ",name[idx],kor[idx],eng[idx],mat[idx]);
   printf("%d %d ",tot[idx],aver[idx]);
   printf("%d",rank[idx]);

}


//1등과 5등의 평균점수 차이는 ?
int max,min;

for(idx=0; idx<=4; idx++)
{
   if(rank[idx]==1) max=aver[idx];
   if(rank[idx]==5) min=aver[idx];
}

printf("%d\n", max-min);

 

 


int su[5]={10,-5,20,7,8};

int idx;
for(idx=0; idx<=4; idx++)
{
   printf("%d ",su[idx]);
}

printf("\n");

//Sellection Sort
int p,q;
for(p=0; p<4; p++)
{
   for(q=p+1; q<=4; q++)
   {
       if(su[p]>su[q])
       {
           int temp;
           temp=su[p];
           su[p]=su[q];
           su[q]=temp;
       }
   }
}

 

 

//Bubble sort

for(p=3; p>=0; p--)
{
   for(q=0; q<=p; q++)
   {
       if(su[q]<su[q+1])
       {
           int temp;
           temp=su[q+1];
           su[q+1]=su[q];
           su[q]=temp;
       }
   }
}

 

 

'..열심히 공부하세.. > C 입문' 카테고리의 다른 글

[11] 함수  (0) 2012.05.31
[10] 다차원 배열  (0) 2012.05.31
[요일구하는 프로그램]  (0) 2012.05.25
[09] 배열 Array  (0) 2012.05.25
[08] while문, do~while문  (0) 2012.05.25

* 알고리즘

 

- 서기 1년1월1일~서기 2012년 5월 25일 총 일수 구하기
   총일수 % 7 -> 나머지 1월 2화 ... 0일요일

 

1) 서기1년~서기2011년
    윤년 +=366
    평년 +=365

2) hap+= 1월 31
              2월 29
              3월 31
              4월 30
              5월 31
              6월 30
              7월 31
              8월 31
              9월 30
              10월 31
              11월 30
              12월 31


3) hap+=25

4) hap%7


int year=2012, month=5, day=25;
int hap=0;
int y,m,d;

for(y=1; y<year; y++)
{
   if(y%4==0 && y%100!=0 || y%400==0)
      hap=hap+366;
   else
      hap=hap+365;
}

int mon[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
if(year%4==0 && year %100!=0 || year%400==0) mon[2]=29;

for(m=1; m<month; m++)
{
   hap=hap+mon[m];
}


hap=hap+day;

printf("%d\n",hap);


switch(hap%7)
{
   case 1: printf("월"); break;
   case 2: printf("화"); break;
   case 3: printf("수"); break;
   case 4: printf("목"); break;
   case 5: printf("금"); break;
   case 6: printf("토"); break;
   case 0: printf("일"); break;
}


//문) 본인이 살아온 날수?

'..열심히 공부하세.. > C 입문' 카테고리의 다른 글

[10] 다차원 배열  (0) 2012.05.31
[정렬 알고리즘]  (0) 2012.05.29
[09] 배열 Array  (0) 2012.05.25
[08] while문, do~while문  (0) 2012.05.25
[07] 이중 for문   (0) 2012.05.24

* 배열 Array

- 동일한 자료형의 집합


/*
int kor[5];

kor[0]=10;
kor[1]=11;
kor[2]=12;
kor[3]=13;
kor[4]=14;

printf("kor[0]=%d\n",kor[0]);
printf("kor[1]=%d\n",kor[1]);
printf("kor[2]=%d\n",kor[2]);
printf("kor[3]=%d\n",kor[3]);
printf("kor[4]=%d\n",kor[4]);

*/

int kor[5]={11,12,13,14,15}; //배열의 초기 선언
int idx;
for(idx=0; idx<=4; idx++)
{
   printf("kor[%d]=%d\n",idx,kor[idx]);
}

//문1) kor배열요소의 전체 합을 구하시오
int hap=0;
//kor[0]+kor[1]+kor[2]+kor[3]+kor[4]
for(idx=0; idx<=4; idx++)
{
   hap=hap+kor[idx];
}

printf("%d\n",hap);

 

//문2) kor배열요소중에서 짝수의 갯수를 구하시오
/*
if(kor[0]%2==0)
if(kor[1]%2==0)
if(kor[2]%2==0)
if(kor[3]%2==0)
if(kor[4]%2==0)
*/

int cnt=0;
for(idx=0; idx<=4; idx++)
{
   if(kor[idx]%2==0) cnt++;
}

printf("%d\n",cnt);

 

 

'..열심히 공부하세.. > C 입문' 카테고리의 다른 글

[정렬 알고리즘]  (0) 2012.05.29
[요일구하는 프로그램]  (0) 2012.05.25
[08] while문, do~while문  (0) 2012.05.25
[07] 이중 for문   (0) 2012.05.24
[06] 반복문 (for문)  (0) 2012.05.22

* 반복문

for(초기값; 종료값 또는 조건식; 증감)
{

}


while(조건문)
{
    처리내용;
}

 

int n=5;
while(n<10)
{
   printf("happy");
   n=n+1;

}


do{

  처리내용

} while(조건문);


int n=5;

do{
  printf("happy");
} while(n<10);


* while문 do~while문은 조건이 맞으면 결과값은 동일하다.

  조건이 틀리면 결과값이 다르다(주의)

* do~while문은 조건과 무관하게 무조건 1회는 실행된다.


// 조건이 맞았을 경우

int p=5, q=5;

while(p<10)
{
   printf("happy");
   p++;
}

printf("p=%d\n",p);


do{
  printf("happy");
  q++;
} while(q<10);

printf("q=%d\n",q);


// 조건이 맞이 않았을 경우

int p=50, q=50;

while(p<10)
{
   printf("happy");
   p++;
}

printf("p=%d\n",p);


do{
  printf("happy");
  q++;
} while(q<10);

printf("q=%d\n",q);

----------------------------

- for반복문은 반복횟수를 정확히 파악하는 경우에 주로 사용된다
- while문은 반복횟수를 정확히 알지 못할때 주로 사용될 수 있다.
   예) 마지막 데이터를 만날때까지 반복해라
        EOF (End Of File)
        BOF (Begin Of File)
- do~while 메인카테고리 접근시 주로 사용된다.

----------------------------------

* break문
  switch~case문을 빠져나올때
  반복문을 빠져나올때


int n;
for(n=1; n<10; n++)
{
   printf("happy");
   if(n==5) break;
}

* continue문
  반복문으로 다시 가서 수행

int n;
for(n=1; n<10; n++)
{
   if(n==5) continue;
   printf("happy");
}

-------------------------------------------

 

#include <stdio.h>
void main()
{

/*
int n=5;
while(n<10)
{
   printf("happy");
   n=n+1;

}
*/

/*
int n=5;

do{
  printf("happy");
  n=n+1;
} while(n<10);

*/
/*
int p=5, q=5;

while(p<10)
{
   printf("happy");
   p++;
}

printf("p=%d\n",p);


do{
  printf("happy");
  q++;
} while(q<10);

printf("q=%d\n",q);


*/

/*
int p=50, q=50;

while(p<10)
{
   printf("happy");
   p++;
}

printf("p=%d\n",p);


do{
  printf("happy");
  q++;
} while(q<10);

printf("q=%d\n",q);

*/
/*
int n;
for(n=1; n<10; n++)
{
   printf("happy");
   if(n==5) break;
}
*/

 

}

 

 

'..열심히 공부하세.. > C 입문' 카테고리의 다른 글

[요일구하는 프로그램]  (0) 2012.05.25
[09] 배열 Array  (0) 2012.05.25
[07] 이중 for문   (0) 2012.05.24
[06] 반복문 (for문)  (0) 2012.05.22
[05] switch~case문  (0) 2012.05.22

+ Recent posts