page지시어,import,include지시어

- page 지시어
<%@ page 지시어 %>
지시어 종류

language="java"
import="java.util.*"
contentType="text/html;KSC5601"
session 은 기본적으로 트루
autoFlush=true
isThreadSafe는 다중쓰래드로 안전한가? true,false
errorPage 에러매시지
pageEncoding="KSC5601"
isELIgnored : 익스프래션 쓸탠가

- 에러처리
<%@ page errorPage="/oops.jsp" %>

oops.jsp에는 아래디랙티브가 있어야한다
<%@ page isErrorPage="true"%>

구구jsp에서
문자올경우 에러처리
===================
<%

int dan = Integer.parseInt(request.getParameter("dan"));
for(int i = 1; i < 10;i++){
 out.println(dan + " * " + i + " = " + i*dan + "<br>");
}
%>
----------------------
errorPage="/error.jsp"
=====================
- 임포트 백터클래스 사용
import="java.util.*"

<%
Vector<String> v = new Vector<String>();
int dan = Integer.parseInt(request.getParameter("dan"));
for(int i = 1; i < 10;i++){
 v.add(dan + " * " + i + " = " + i*dan + "<br>");
}
for(int j = 0; j < v.size();j++){
 out.println(v.get(j));
}
%>
==========================
- include 지시어
기본 파일 내용을 추가

<%@include file="/Cal.jsp"%>

import javax.swing.*;
import javax.swing.border.*;
import javax.swing.table.*;
import java.awt.*;
import java.awt.event.*;
import java.sql.*;
import java.util.*;

public class Print extends JPanel implements ActionListener
{
 JPanel printPanel1, printPanel2;
 JTextArea printArea1, printArea2;
 JLabel printLabel1, printLabel2;
 JButton bt1, bt2, bt3,bt4,bt5,bt6,bt7;
 JScrollPane scroll1,scroll2,scroll3,scroll4,scroll5;
 JTable table1, table2, table3, table4;
 String str1,str2="",value;
 int row,col;
 int index=1;
// JTableModel model;
 DataModel dm;
 PersistenceManager pm = new PersistenceManager();
 
 Vector totalPrice = new Vector();
 Vector insertDBmcode = new Vector();
 Vector insertDBamount = new Vector();
 Vector insertDBmname = new Vector();
 Vector insertDBmprice = new Vector();

 public Print()
 {
  this.setLayout(null);
  this.setBounds(200,100,400,600);
  this.setBackground(Color.white);

  printPanel1=new JPanel();
  printPanel1.setLayout(null);
  printPanel1.setBounds(10,10,370,40);
  printPanel1.setBackground(Color.white);
 
  bt1=new JButton("appetizer");
  bt1.setBounds(5,5,90,30);
  bt1.setBackground(Color.white);
  bt1.addActionListener(this);
  bt2=new JButton("main");
  bt2.setBounds(95,5,90,30);
  bt2.setBackground(Color.white);
  bt2.addActionListener(this);
  bt3=new JButton("dessert");
  bt3.setBounds(185,5,90,30);
  bt3.setBackground(Color.white);
  bt3.addActionListener(this);
  bt4=new JButton("drink");
  bt4.setBounds(275,5,90,30);
  bt4.setBackground(Color.white);
  bt4.addActionListener(this);

  printPanel1.add(bt1);
  printPanel1.add(bt2);
  printPanel1.add(bt3);
  printPanel1.add(bt4);
 
  selectMenuType(index);  

  table1=new JTable(dm);
  scroll1 = new JScrollPane(table1);//텍스트영역에 스크롤바 달기
  scroll1.getVerticalScrollBar().setValue (scroll1.getVerticalScrollBar().getMaximum());
  scroll1.setBounds(10,50,370,200);
  scroll1.setBorder(new TitledBorder(new EtchedBorder(),"Menu"));
  scroll1.setBackground(Color.white);
  scroll1.validate(); //최근값으로 스크롤바 이동하기.

  TableColumn column = null;
  for(int i=0;i
   column = table1.getColumnModel().getColumn(i);
   if(i==1) column.setPreferredWidth(150); // default width is 75.
   else column.setPreferredWidth(30);
  }

  TableColumn lastNameColumn = table1.getColumnModel().getColumn(3);
  JTextField tf = new JTextField();
  tf.addActionListener(new ActionListener(){
   public void actionPerformed(ActionEvent e) {

     Object o = e.getSource();
     if(o instanceof JTextField) value=((JTextField)o).getText();
     row = table1.getSelectedRow();
     col = table1.getSelectedColumn();
    if(Integer.parseInt(dm.getValueAt(row,3).toString ())!=0){//수량에 0적지않으면 실행됨
     if(dm.getValueAt(row,1).toString().length()>7){
     str2=str2+dm.getValueAt(row,1)+" "+dm.getValueAt(row,2)+" "+value+" ";
     }else str2=str2+dm.getValueAt(row,1)+" "+dm.getValueAt(row,2)+" "+value+" ";

     dm.fireTableCellUpdated(row, col); 
    }
   }
  });
  lastNameColumn.setCellEditor(new DefaultCellEditor(tf));

  printPanel2=new JPanel();
  printPanel2.setLayout(null);
  printPanel2.setBounds(10,250,370,40);
  printPanel2.setBackground(Color.white);
 
  bt5=new JButton("주문");
  bt5.setBounds(5,5,120,30);
  bt5.setBackground(Color.cyan);
  bt5.addActionListener(this);
  bt6=new JButton("취소");
  bt6.setBounds(125,5,120,30);
  bt6.setBackground(Color.yellow);
  bt6.addActionListener(this);

  bt7=new JButton("주문완료");
  bt7.setBounds(245,5,120,30);
  bt7.setBackground(Color.green);
  bt7.addActionListener(this);
 
  printPanel2.add(bt5);
  printPanel2.add(bt6);
  printPanel2.add(bt7);

  printArea2=new JTextArea(6,32);
  scroll5 = new JScrollPane(printArea2);
  scroll5.getVerticalScrollBar().setValue (scroll5.getVerticalScrollBar().getMaximum());
  scroll5.setBounds(10,290,370,150);
  scroll5.setBorder(new TitledBorder(new EtchedBorder(),"Order"));
  scroll5.setBackground(Color.white);

  str1="메뉴 가격 수량 ";
  printArea2.setText(str1);
  scroll5.validate();

  add(printPanel1);
  add(scroll1);
        add(printPanel2);
  add(scroll5);
 }
 
 public void selectMenuType(int i){//검색할 매뉴파트
  try{
   
   ResultSet rs = pm.executeSQL("select * from menulist where m_part_no =" + i);
   dm = new DataModel(rs);
  }catch(Exception ex){}
 }

 public static void main(String[] args){
  show1();  
 }

 public void actionPerformed(ActionEvent e)
 {
  JButton jb=(JButton) e.getSource();
  if (jb==bt1)
  {
   dm.rows.clear();
   remove(1);
   selectMenuType(index);  

   table1=new JTable(dm);
   scroll1 = new JScrollPane(table1);//텍스트영역에 스크롤바 달기
   scroll1.getVerticalScrollBar().setValue (scroll1.getVerticalScrollBar().getMaximum());
   scroll1.setBounds(10,50,370,200);
   scroll1.setBorder(new TitledBorder(new EtchedBorder(),"Menu"));
   scroll1.setBackground(Color.white);
   scroll1.validate(); //최근값으로 스크롤바 이동하기.

   TableColumn column = null;
   for(int i=0;i
    column = table1.getColumnModel().getColumn(i);
    if(i==1) column.setPreferredWidth(150); // default width is 75.
    else column.setPreferredWidth(30);
   }

   TableColumn lastNameColumn = table1.getColumnModel().getColumn(3);
   JTextField tf = new JTextField();
   tf.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e) {
      Object o = e.getSource();
      if(o instanceof JTextField) value=((JTextField)o).getText();
      row = table1.getSelectedRow();
      col = table1.getSelectedColumn();
     if(Integer.parseInt(dm.getValueAt(row,3).toString ())!=0){//수량에 0적지않으면 실행됨
      if(dm.getValueAt(row,1).toString().length()>7){
     str2=str2+dm.getValueAt(row,1)+" "+dm.getValueAt(row,2)+" "+value+" ";
     }else str2=str2+dm.getValueAt(row,1)+" "+dm.getValueAt(row,2)+" "+value+" ";

      dm.fireTableCellUpdated(row, col); 
     }
    }
   });
   lastNameColumn.setCellEditor(new DefaultCellEditor(tf));
   add(scroll1,1);
   
  }
  else if (jb==bt2)
  {
   dm.rows.removeAllElements ();
   remove(1);
   selectMenuType(index+1);  

   table2=new JTable(dm);
   scroll2 = new JScrollPane(table2);//텍스트영역에 스크롤바 달기
   scroll2.getVerticalScrollBar().setValue (scroll2.getVerticalScrollBar().getMaximum());
   scroll2.setBounds(10,50,370,200);
   scroll2.setBorder(new TitledBorder(new EtchedBorder(),"Menu"));
   scroll2.setBackground(Color.white);
   scroll2.validate(); //최근값으로 스크롤바 이동하기.

   TableColumn column = null;
   for(int i=0;i
    column = table2.getColumnModel().getColumn(i);
    if(i==1) column.setPreferredWidth(150); // default width is 75.
    else column.setPreferredWidth(30);
   }

   TableColumn lastNameColumn = table2.getColumnModel().getColumn(3);
   JTextField tf = new JTextField();
   tf.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e) {
      Object o = e.getSource();
      if(o instanceof JTextField) value=((JTextField)o).getText();
      row = table2.getSelectedRow();
      col = table2.getSelectedColumn();
      if(Integer.parseInt(dm.getValueAt(row,3).toString ())!=0){//수량에 0적지않으면 실행됨
       if(dm.getValueAt(row,1).toString().length()>7){
     str2=str2+dm.getValueAt(row,1)+" "+dm.getValueAt(row,2)+" "+value+" ";
     }else str2=str2+dm.getValueAt(row,1)+" "+dm.getValueAt(row,2)+" "+value+" ";

      dm.fireTableCellUpdated(row, col); 
     }
    }
   });
   lastNameColumn.setCellEditor(new DefaultCellEditor(tf));
   add(scroll2,1);
  }
  else if (jb==bt3)
  {
   dm.rows.clear();
     remove(1);
   selectMenuType(index+2);  

   table3=new JTable(dm);
   scroll3 = new JScrollPane(table3);//텍스트영역에 스크롤바 달기
   scroll3.getVerticalScrollBar().setValue (scroll3.getVerticalScrollBar().getMaximum());
   scroll3.setBounds(10,50,370,200);
   scroll3.setBorder(new TitledBorder(new EtchedBorder(),"Menu"));
   scroll3.setBackground(Color.white);
   scroll3.validate(); //최근값으로 스크롤바 이동하기.

   TableColumn column = null;
   for(int i=0;i
    column = table3.getColumnModel().getColumn(i);
    if(i==1) column.setPreferredWidth(150); // default width is 75.
    else column.setPreferredWidth(30);
   }

   TableColumn lastNameColumn = table3.getColumnModel().getColumn(3);
   JTextField tf = new JTextField();
   tf.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e) {
      Object o = e.getSource();
      if(o instanceof JTextField) value=((JTextField)o).getText();
      row = table3.getSelectedRow();
      col = table3.getSelectedColumn();
      if(Integer.parseInt(dm.getValueAt(row,3).toString ())!=0){//수량에 0적지않으면 실행됨
      if(dm.getValueAt(row,1).toString().length()>7){
     str2=str2+dm.getValueAt(row,1)+" "+dm.getValueAt(row,2)+" "+value+" ";
     }else str2=str2+dm.getValueAt(row,1)+" "+dm.getValueAt(row,2)+" "+value+" ";

      dm.fireTableCellUpdated(row, col); 
     }
    }
   });
   lastNameColumn.setCellEditor(new DefaultCellEditor(tf));
   add(scroll3,1);
 
  }
  else if (jb==bt4)
  {
      dm.rows.clear();
      remove(1);
   selectMenuType(index+3);  

   table4=new JTable(dm);
   scroll4 = new JScrollPane(table4);//텍스트영역에 스크롤바 달기
   scroll4.getVerticalScrollBar().setValue (scroll4.getVerticalScrollBar().getMaximum());
   scroll4.setBounds(10,50,370,200);
   scroll4.setBorder(new TitledBorder(new EtchedBorder(),"Menu"));
   scroll4.setBackground(Color.white);
   scroll4.validate(); //최근값으로 스크롤바 이동하기.

   TableColumn column = null;
   for(int i=0;i
    column = table4.getColumnModel().getColumn(i);
    if(i==1) column.setPreferredWidth(150); // default width is 75.
    else column.setPreferredWidth(30);
   }

   TableColumn lastNameColumn = table4.getColumnModel().getColumn(3);
   JTextField tf = new JTextField();
   tf.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e) {
      Object o = e.getSource();
      if(o instanceof JTextField) value=((JTextField)o).getText();
      row = table4.getSelectedRow();
      col = table4.getSelectedColumn();
     if(Integer.parseInt(dm.getValueAt(row,3).toString ())!=0){//수량에 0적지않으면 실행됨
      if(dm.getValueAt(row,1).toString().length()>7){
     str2=str2+dm.getValueAt(row,1)+" "+dm.getValueAt(row,2)+" "+value+" ";
     }else str2=str2+dm.getValueAt(row,1)+" "+dm.getValueAt(row,2)+" "+value+" ";

      dm.fireTableCellUpdated(row, col); 
     }
    }
   });
   lastNameColumn.setCellEditor(new DefaultCellEditor(tf));
   add(scroll4,1);
   
  }
  else if (jb==bt5)//입력
  {
   if(Integer.parseInt(dm.getValueAt(row,3).toString ())!=0){
    printArea2.setText(str1+str2);
    insertDBmcode.add(dm.getValueAt(row,0).toString ());
    insertDBamount.add(dm.getValueAt(row,3).toString ());
    int tt =Integer.parseInt(dm.getValueAt(row,2).toString ()) *Integer.parseInt(dm.getValueAt(row,3).toString ());
    totalPrice.add(tt);  
    insertDBmname.add(dm.getValueAt(row,1).toString ());
    insertDBmprice.add(dm.getValueAt(row,2).toString ());
   }


  }
  else if (jb==bt6)//취소
  {
   str2="";
   printArea2.setText(str1+"");
   totalPrice.clear ();
   insertDBmcode.clear ();
   insertDBamount.clear ();
   
   for (int i = 0 ; i < dm.getRowCount()  ; i++ )
   {
    dm.setValueAt(0,i,3);
   }
  }

  else if (jb==bt7)//주문완료버튼
  {
   
   int total=0;
   
   for (int j = 0 ; j < totalPrice.size() ; j++ )
   {
    total += (Integer)totalPrice.get(j);
   }

   int i = JOptionPane.showConfirmDialog(this,"총[ "+total+" ]원입니다 주문하시겠습니까?");
   if (i==JOptionPane.YES_OPTION)
   {
    JOptionPane.showMessageDialog(this,"주문완료 되었습니다");
    str2="";
    printArea2.setText(str1+"");
       
    try{
     ResultSet rs1 = pm.executeSQL("select count(j_no) from jungsan");
     rs1.next();    
     int j_no=rs1.getInt(1)+1;
     rs1.close();
     
     for (int idx = 0 ; idx < insertDBmcode.size() ; idx++)
     {            
      ResultSet rs2 = pm.executeSQL("insert into jungsan values("+j_no+","+insertDBmcode.get(idx)+","+insertDBamount.get(idx)+","+totalPrice.get(idx)+",sysdate)");

      ChatClient cc=new ChatClient("1");
      cc.sendMessage("메뉴: "+insertDBmname.get(idx)+"/가격:"+insertDBmprice.get(idx)+"/수량:"+ insertDBamount.get(idx)+"/총가격:"+totalPrice.get(idx));

      j_no++;
     }    
    totalPrice.clear ();
    }catch(Exception ex){System.out.println(ex);}
   }else JOptionPane.showMessageDialog(this,"계속주문 하겠습니다");
  }
 }
 
 public static void show1() {
  JFrame.setDefaultLookAndFeelDecorated(true);
        JFrame frame = new JFrame("주문하기");
//        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  frame.setBounds(500,60,390,500);

        Print print = new Print();
        //print.setOpaque(true); //content panes must be opaque
        frame.setContentPane(print);//판넬을 붙인다(setContentPane)

       
        //frame.pack();
  frame.setVisible(true);
    }
}

class PersistenceManager{
 Statement stmt;
 PersistenceManager(){
  try{
   DriverManager.registerDriver (new oracle.jdbc.driver.OracleDriver());
   Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ora92","rest","asdf");
   stmt = con.createStatement();
  }catch(Exception e){
   e.printStackTrace();
  }
 }

 ResultSet executeSQL(String str) throws SQLException{
  return stmt.executeQuery(str);
 }
}

class DataModel extends AbstractTableModel{
 String[] columnNames = {"매뉴번호","메뉴명","가격","수량"};
 Vector rows = new Vector();
 
 DataModel(ResultSet rs) throws SQLException{
  /*ResultSetMetaData metaData = rs.getMetaData();

  int numberOfColumns = metaData.getColumnCount();
  columnNames = new String[numberOfColumns];

  for (int column =0; column < numberOfColumns; column++){
   columnNames[column] = metaData.getColumnLabel(column+1);
  }*/

  rows = new Vector();
  while(rs.next()){
   Vector newRow = new Vector();
   for(int i=1; i<= getColumnCount();i++){
    if(getColumnCount()!=i){
    newRow.addElement(rs.getObject(i));
    }else newRow.addElement(0);
   }
   rows.addElement(newRow);
  }
 }
 public String getColumnName(int column){
  if(columnNames[column] != null) {
   return columnNames[column];
  }else{
   return "";
  }
 }
 public int getColumnCount(){
  return columnNames.length;
 }
 public int getRowCount() {
  return rows.size();
 }
 public Object getValueAt(int aRow,int aColumn){
  Vector row = (Vector)rows.elementAt(aRow);
  //System.out.println(row.elementAt(aColumn));
  return row.elementAt(aColumn);
 }

 public boolean isCellEditable(int r, int c){ // 테이블 편집가능하게 한다.
   return (c == 3 ) ? true:false ;
  }

 public Class getColumnClass(int c) {
   if(c==3) return new Integer(1).getClass();//3번째 컬럼은 무조건 인티져클래스형 리턴  
   return getValueAt(0, c).getClass();
  }

  public void setValueAt(Object obj, int r, int c){ // 테이블의 필드 값 입력으로 값이 변함
 Vector row = (Vector)rows.elementAt(r);
   row.add(c,obj);
   fireTableCellUpdated(r, c);
  }
}