2008. 9. 17. 17:52

Chap 1. 서블릿과 JSP는 어디에 쓰는 물건인고?

학습 목표 : GET, POST 등 HTTP 메소드에 대해 장점과 기능을 알아봅시다.

GET 는 서버로부터 뭔가를 돌려 받는다고 생각하시면 됩니다.
GET 메소드는 폼 데이터를 URL 뒤에 추가합니다.
POST는 서버에게 자원을 요청할 때 필요한 정보를 함께 넘겨줍니다.
POST 메소드는 요청의 몸체(body)에 폼 데이터를 포함합니다.

사용자 삽입 이미지
사용자 삽입 이미지

MINE 타입은 브라우저에게 어떤 종류의 데이터를 받을 것이라는 정보를 미리 알려주어, 브라우저가 데이터를 어떻게 다룰지 준비하도록 합니다.


'수업 > Head First Servlets & JSP' 카테고리의 다른 글

로그인, 회원가입, 정보수정, 탈퇴  (2) 2008.09.26
[0923]jspBean, forward, include  (0) 2008.09.23
2008. 9. 11. 18:18

[기타] 성적 처리 프로그램 - 포스팅 중

학생의 번호, 이름, 국어, 영어, 수학 점수를 입력 받아 총점, 평균, 등급(A~F), 랭킹을 구하시오.
설계 과정
1. 기본값 출력 테스트
각 필드의 변수명을 정하고 출력 되는지 확인한다.
2. 변수 입력 받은 후 출력
입력 받은 변수명을 연산하고 출력한다.
3. 유효성 검사
유효하지 않은 값과 입력 시, 에러를 해결한다.
4. (1~3까지의 1명의 성적을 처리했다면) 여러 명의 점수를 입력 받아서 처리한다.
5. Swing로 대체한다.
===========1. 기본값 출력 테스트 ===================================================
===============================
Score.java
package scorecalc;
public class Score {
 protected int num;
 protected String name;
 protected int kor;
 protected int eng;
 protected int math;
 protected int total;
 protected double avg;
 protected char grade='*';
 protected int rank;
 public void outPut(){
  System.out.println(num+" "+name+" "+kor+" "+eng+" "+math+" "+total+" "+avg+" "+grade+" "+rank);
 }
 public void titlePrint(){
  System.out.println("번호"+" "+"이름"+" "+"국어"+" "+"영어"+" "+"수학"+" "+"총점"+" "+"평균"+" "+"등급"+" "+"랭킹");
 }
}
===========================================
ScoreMain.java
package scorecalc;
public class ScoreMain {
 public static void main(String[] args) {
  Score sc = new Score();
  sc.titlePrint();
  sc.outPut();
 }
}
===========2. 변수를 입력 받은 후 출력 ==============================================
=======================
Score.java
package scorecalc;
public class Score {
 protected int num;
 protected String name;
 protected int kor;
 protected int eng;
 protected int math;
 protected int total;
 protected double avg;
 protected char grade='*';
 protected int rank;
}
=======================
ScoreIO.java
package scorecalc;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class ScoreIO extends Score{
 public void outPut(){
  System.out.println(num+" "+name+" "+kor+" "+eng+" "+math+" "+total+" "+avg+" "+grade+" "+rank);
 }
 public void titlePrint(){
  System.out.println("성적처리를 시작합니다.");
  System.out.println("번호"+" "+"이름"+" "+"국어"+" "+"영어"+" "+"수학"+" "+"총점"+" "+"평균"+" "+"등급"+" "+"랭킹");
 }
 public void standInput() throws IOException {
  BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  System.out.println("번호를 입력하세요.");
  num = Integer.parseInt(br.readLine().trim());
  System.out.println("이름을 입력하세요.");
  name = br.readLine().trim();
  System.out.println("국어점수를 입력하세요.");
  kor = Integer.parseInt(br.readLine().trim());
  System.out.println("영어점수를 입력하세요.");
  eng = Integer.parseInt(br.readLine().trim());
  System.out.println("수학점수를 입력하세요.");
  math = Integer.parseInt(br.readLine().trim());
  calc();
 }
 public void calc(){
  total = kor + eng + math;
  avg = (double)total/3.;
  if(avg>100 || avg <0)grade='*';  
  else if(avg>=90)grade='A';
  else if(avg>=80)grade='B';
  else if(avg>=70)grade='C';
  else if(avg>=60)grade='D';
  else grade='F';
 }
}
=======================
ScoreMain.java
package scorecalc;
import java.io.IOException;
public class ScoreMain {
 public static void main(String[] args) throws IOException {
  ScoreIO sc = new ScoreIO();
  sc.standInput();
  sc.titlePrint();
  sc.outPut();
 }
}
============ 3. 유효성 검사 ========================================================
유효성 검사를 위해서 별도의 메서드(inputCheck)를 만들어 ScoreIO.java 파일의 standInput() 메서드를 다시 기술한다.
파일명 ScoreIO.java

protected void standInput() throws IOException {
  BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  num = inputCheck("번호?", br);
  System.out.println("이름을 입력하세요."); // 이름은 String형이므로 inputCheck에서 제외
  name = br.readLine().trim();
  kor = inputCheck("국어?",br);
  eng = inputCheck("영어",br);
  math = inputCheck("수학?", br);
  calc();
 }
 private int inputCheck(String str, BufferedReader br) throws IOException{
  System.out.println(str);
  int temp=-1;
  try {
   temp=Integer.parseInt(br.readLine().trim());
   if(str.startsWith("번호")) return temp;
   else if (temp>=0 && temp<=100) return temp;
  } catch (NumberFormatException e) {
   System.out.println("숫자를 다시 입력 해 보세요");
  }
  temp=inputCheck(str,br);
  return temp;    
 }
=============== 4. 여러명 처리 =====================================================
여러명의 데이터를 입력 받아 처리하기 위해 ArrayList로 처리한다.
파일명 ScoreArray.java
package scorecalc;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
public class ScoreArray {
 private ArrayList<Score> stus = new ArrayList<Score>();
 public void init(){
  stus.add(new Score());
  BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
  System.out.println("추가로 입력? y/n");
  try {
   String yn=br.readLine().trim();
   if(yn.equalsIgnoreCase("y")) init();
   else {
    Collections.sort(stus);
    output();
   }
  } catch (IOException e) {
   e.printStackTrace();
  }
 }
 public void output(){
  if(stus==null || stus.size()==0){
   System.out.println("출력할 자료가 없음");
   return;
  }
  for(Score s:stus)
   s.output();
  /*for(int i=0;i<stus.size();i++){ // for문 해석문
   stus.get(i).outPut();
  }*/
 }
}
==========================
파일명 ScoreArrayUse.java
package scorecalc;
public class ScoreArrayUse {
 public static void main(String[] args) {
  ScoreArray stus=new ScoreArray();
  stus.init();
 }
}
============ 5. Swing으로 화면 연결 ================================================
===================================================================================
===================================================================================
===================================================================================
===================================================================================
===================================================================================
===================================================================================
===================================================================================


2008. 9. 9. 15:26

Part 7. Applet과 스레드 I - Applet

애플릿(Applet)이란?
보통 애플리케이션은 main 함수가 꼭 포함되어 있지만
자바 애플릿은 HTML 페이지에 포함되어 웹 브라우저에 의해 실행되는 자바 프로그램입니다.

애플릿은 Applet 클래스를 상속 받아야 합니다.
import java.applet.Applet;
주의 사항 : 애플릿을 상속받는 클래스는 public로 선언되어야 웹 브라우져에서 실행이 가능합니다.
ex : public class AppletTest extends Applet{}

애플릿의 주기
위에서 보셨듯 애플리케이션은 main 메서드를 시작점으로 하지만 애플릿은 main 메서드를 제공하지 않으므로 5가지의 메서드가 웹 브라우저의 상태에 따라 호출됩니다.

메소드

설명

init()

애플릿이 웹 브라우저에 로드될 때 호출

start()

해당 페이지를 사용자가 잠시 떠났다가 다시 돌아왔을 때마다 실행

paint()

애플릿 화면을 다시 그려야 하는 경우에 호출

stop()

페이지를 떠날 때 호출

destroy()

웹 브라우저를 종료하게 되면 호출

메서드의 실행결과를 애플릿 프로그램을 실행중인 웹 브라우저에서 살펴보려면
[도구] - [Sun Java 콘솔] 메뉴를 선택하면 됩니다.

사용자 삽입 이미지


repaint() : paint() 메서드가 다시 호출이 되어야 할때 사용하는 메서드로서
repaint() 메서드를 호출하면 paint() 메서드가 웹브라우저에 의해서 자동으로 호출됩니다.

애플릿 이벤트 처리
애플릿에서 마우스와 관련된 이벤트는 MouseEvent(클래스 : MouseAdapter, 인터페이스 : MouseListener)가 있습니다.
아래는 MouseEvent와 관련된 메서드 입니다.

주요 메소드

설명

public void mousePressed(MouseEvent e)

마우스 버튼이 눌렸을 때

public void mouseReleased(MouseEvent e)

마우스 버튼이 눌려졌다가 떼어졌을 때

public void mouseEntered(MouseEvent e)

마우스가 영역 안으로 들어 왔을 때

public void mouseExited(MouseEvent e)

마우스가 영역 밖으로 나갈 때

public void mouseClicked(MouseEvent e)

마우스가 클릭되었을 때

============== 애플릿에서 마우스가 클릭된 위치에 점 출력 ============================
import java.applet.Applet;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class AppletExam03 extends Applet{
 int x,y;
 public void init(){
  addMouseListener(new MouseAdapter(){
   public void mouseClicked(MouseEvent e){
    x=e.getX();
    y=e.getY();
    repaint();
   }
  }
  );
 }
 public void start(){
  x=-1; y=-1;
  repaint();
 }
 public void paint(Graphics g){
  if(x!=-1 || y!=-1){
   g.fillOval(x, y, 10, 10);
  }
 }
}
========================== 애플릿 불러오는 html ====================================
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
 <HEAD>
  <TITLE> Applet fillOval </TITLE>
  <META NAME="Generator" CONTENT="EditPlus">
  <META NAME="Author" CONTENT="">
  <META NAME="Keywords" CONTENT="">
  <META NAME="Description" CONTENT="">
 </HEAD>

 <BODY>
  <applet code="AppletExam03.class" width="300" height="300"></applet>
 </BODY>
</HTML>
===================================================================================