EmployeeV1.zip


dbinfo.properties


 com.javaexpert.apache 패키지

DBConnection.java

package com.javaexpert.apache;


import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;


public class DBConnection {

public static Connection getConnection(String poolName)

   throws SQLException {

       return DriverManager.getConnection(

           "jdbc:apache:commons:dbcp:/"+poolName);

   }

}



DBClose.java

package com.javaexpert.apache;


import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;


public class DBClose {

public static void close(Connection conn, Statement stmt, ResultSet rs){

try {

if(rs != null)rs.close();

if(stmt != null) stmt.close();

if(conn != null) conn.close();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}



DBCPInint.java

package com.javaexpert.apache;


import java.util.StringTokenizer;


import javax.servlet.ServletConfig;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;


public class DBCPInit extends HttpServlet {

public void init(ServletConfig config) throws ServletException {

        try {

            String drivers = config.getInitParameter("jdbcdriver");

            StringTokenizer st = new StringTokenizer(drivers, ",");

            while (st.hasMoreTokens()) {

                String jdbcDriver = st.nextToken();

                Class.forName(jdbcDriver);

            }            

            Class.forName("org.apache.commons.dbcp.PoolingDriver");            

        } catch(Exception ex) {

            throw new ServletException(ex);

        }

    }

}



lib 패키지

Calc.java

package lib;


import java.sql.SQLException;


import model.EmployeeBean;

import model.GetGradeDAO;

import model.GetPartDAO;


public class Calc {

private EmployeeBean employee;

public Calc(EmployeeBean employee) throws SQLException{

this.employee = employee;

}

public void calc() throws SQLException{

// 사원번호 잘라서 부서명 찾기

String part = String.valueOf(this.employee.getSabun().charAt(0));

String name = this.getPart(part);

this.employee.setName(name);

// 사원번호 잘라서 직무급 찾기

String jik = String.valueOf(this.employee.getSabun().charAt(1));

int jikcost = this.getGrade(jik);

this.employee.setJikcost(jikcost);

// 기본급 호봉 * 10000;

int kicost = this.employee.getKicost() * 10000;

this.employee.setKicost(kicost);

// 야근수당 야근시간 * 15000;

int yacost = this.employee.getYacost() * 15000;

this.employee.setYacost(yacost);

// 가족수당 부양가족수 * 15000;

int facost = this.employee.getFacost() * 15000;

this.employee.setFacost(facost);

int totcost = kicost + yacost + facost + jikcost;

this.employee.setTotcost(totcost);

double tax = totcost * 0.1;

this.employee.setTax(tax);

double realcost = totcost - tax;

this.employee.setRealcost(realcost);

}

public String getPart(String part) throws SQLException{

return GetPartDAO.selectPart(part);

}

public int getGrade(String jik) throws SQLException{

return GetGradeDAO.selectGrade(jik);

}

}



model 패키지

EmployeeBean.java

package model;


public class EmployeeBean {

private String sabun;

private String name;

private int kicost;

private int jikcost;

private int yacost;

private int facost;

private int totcost;

private double tax;

private double realcost;

public EmployeeBean() {}

public EmployeeBean(String sabun,  int kicost,  int yacost, int facost) {

this.sabun = sabun;

this.kicost = kicost;

this.yacost = yacost;

this.facost = facost;

}

public String getSabun() {

return sabun;

}

public void setSabun(String sabun) {

this.sabun = sabun;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getKicost() {

return kicost;

}

public void setKicost(int kicost) {

this.kicost = kicost;

}

public int getJikcost() {

return jikcost;

}

public void setJikcost(int jikcost) {

this.jikcost = jikcost;

}

public int getYacost() {

return yacost;

}

public void setYacost(int yacost) {

this.yacost = yacost;

}

public int getFacost() {

return facost;

}

public void setFacost(int facost) {

this.facost = facost;

}

public int getTotcost() {

return totcost;

}

public void setTotcost(int totcost) {

this.totcost = totcost;

}

public double getTax() {

return tax;

}

public void setTax(double tax) {

this.tax = tax;

}

public double getRealcost() {

return realcost;

}

public void setRealcost(double realcost) {

this.realcost = realcost;

}

}



EmployeeDAO.java

package model;


import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import java.util.Vector;


import com.javaexpert.apache.DBConnection;


public class EmployeeDAO {

public static Vector<EmployeeBean> selectAll(Connection conn)

throws SQLException {

Statement stmt = conn.createStatement();

ResultSet rs = stmt.executeQuery("SELECT * FROM Employee ORDER BY realcost DESC");

Vector<EmployeeBean> vector = new Vector<EmployeeBean>(1,1);


while(rs.next()){

EmployeeBean employee = new EmployeeBean();

employee.setSabun(rs.getString("sabun"));

employee.setName(rs.getString("name"));

employee.setKicost(rs.getInt("kicost"));

employee.setJikcost(rs.getInt("jikcost"));

employee.setYacost(rs.getInt("yacost"));

employee.setFacost(rs.getInt("facost"));

employee.setTotcost(rs.getInt("totcost"));

employee.setTax(rs.getInt("tax"));

employee.setRealcost(rs.getInt("realcost"));

vector.addElement(employee);

}

if(rs != null) rs.close();

if(stmt != null) stmt.close();

if(conn != null)conn.close();

return vector;

}

public static void insert(Connection conn, EmployeeBean employee)

throws SQLException {

StringBuffer sb = new StringBuffer();

sb.append("INSERT INTO Employee VALUES(?,?,?,?,?,?,?,?,?)");

PreparedStatement pstmt = conn.prepareStatement(sb.toString());

pstmt.setString(1, employee.getSabun());

pstmt.setString(2, employee.getName());

pstmt.setInt(3, employee.getKicost());

pstmt.setInt(4, employee.getJikcost());

pstmt.setInt(5, employee.getYacost());

pstmt.setInt(6, employee.getFacost());

pstmt.setInt(7, employee.getTotcost());

pstmt.setDouble(8, employee.getTax());

pstmt.setDouble(9, employee.getRealcost());

pstmt.executeUpdate();

if(pstmt != null) pstmt.close();

}

}




GetGradeDAO.java

package model;


import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import java.util.Vector;


import com.javaexpert.apache.DBClose;

import com.javaexpert.apache.DBConnection;


public class GetGradeDAO {

public static int selectGrade(String jik) throws SQLException{

int jikcost = 0;

Connection conn = DBConnection.getConnection("pool");

Statement stmt = conn.createStatement();

ResultSet rs = stmt.executeQuery("SELECT cost FROM Grade WHERE rank ='" + jik + "'");


while(rs.next()){

jikcost = rs.getInt(1);

}

DBClose.close(conn, stmt, rs);

return jikcost;

}


}


GetPartDAO.java

package model;


import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import java.util.Vector;


import com.javaexpert.apache.DBClose;

import com.javaexpert.apache.DBConnection;


public class GetPartDAO {

public static String selectPart(String part) throws SQLException{

String name = "";

Connection conn = DBConnection.getConnection("pool");

Statement stmt = conn.createStatement();

ResultSet rs = stmt.executeQuery("SELECT name FROM Part WHERE code ='" + part + "'");


while(rs.next()){

name = rs.getString(1);

}

DBClose.close(conn, stmt, rs);

return name;

}

}



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" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">

  <display-name>EmployeeV1</display-name>

  <welcome-file-list>

    <welcome-file>index.jsp</welcome-file>

  </welcome-file-list>


  <servlet>

     <servlet-name>DBCPInit</servlet-name>

     <servlet-class>com.javaexpert.apache.DBCPInit</servlet-class>

     <load-on-startup>1</load-on-startup>

     <init-param>

        <param-name>jdbcdriver</param-name>

        <param-value>com.mysql.jdbc.Driver</param-value>

     </init-param>

  </servlet>

</web-app>



input.html


<!doctype html>

<html lang="en">

 <head>

  <meta charset="UTF-8">

  <title>사원 봉급 정보 입력창</title>

  <style>

h1{text-align:center;}

hr{width:60%;}

table{margin:auto;border-collapse:collapse; border:1px solid orange;}

th{ border: 1px solid white;padding:5px; text-align:right;}

td{ border: 1px solid white;padding:5px;}

th{font-size:1.2em; color :  white; background-color:blue;width:150px;}

  </style>

 </head>

 <body>

<h1>사원 봉급 정보 입력</h1>

<hr>

<form method="post" action="input.jsp">

<table>

<tr>

<th>사번 : </th>

<td><input type="text" name="sabun" required autofocus></td>

</tr>

<tr>

<th>호봉 : </th>

<td><input type="text" name="kicost" required></td>

</tr>

<tr>

<th>야근시간 : </th>

<td><input type="text" name="yacost" required maxlength="6"></td>

</tr>

<tr>

<th>부양가족수 : </th>

<td><input type="text" name="facost" required></td>

</tr>

<tr>

<td colspan="2"></td>

</tr>

<tr>

<td colspan="2" align="center">

<input type="submit" value="입력하기" class="btn btn-info">&nbsp;&nbsp;&nbsp;

<input type="reset" value="취소하기" class="btn btn-warning">

</td>

</tr>

</table>

</form>

 </body>

</html>



index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"  %>

<%@ page import="java.util.Vector" %>

<%@ page import="model.*" %>

<jsp:directive.page import="com.javaexpert.apache.DBConnection, com.javaexpert.apache.DBClose" />

<jsp:directive.page import="java.sql.*" />   

<%

Connection conn = DBConnection.getConnection("pool"); //파일의 이름 앞자리만 따는것임

Vector<EmployeeBean> vector = EmployeeDAO.selectAll(conn); 

%>

<!DOCTYPE html>

<html lang="ko">

<head>

<meta charset="UTF-8">

<title>사원 봉급 정보 출력창</title>

<link rel="stylesheet" href="css/style.css">

</head>

<body>

<h1>사원 봉급 정보 리스트</h1>

<table>

<tr>

<td class="left">[<a href="input.html">입력하기</a>]</td>

<td class="right">명 데이타</td>

</tr>

</table>

<table>

<caption>사원 봉급 리스트</caption>

<thead>

<tr>

<th>사번</th>

<th>부서</th>

<th>기본급</th>

<th>직무급</th>

<th>야근수당</th>

<th>가족수당</th>

<th>총지급액</th>

<th>소득세</th>

<th>실수령액</th>

</tr>

</thead>

<tbody>

<%

if(vector != null && vector.size() != 0){

for(int i = 0 ; i < vector.size(); i++){ 

EmployeeBean employ = vector.get(i);

%>

<tr>

<td><%=employ.getSabun() %></td>

<td><%=employ.getName() %></td>

<td><%=employ.getKicost() %></td>

<td><%=employ.getJikcost() %></td>

<td><%=employ.getYacost() %></td>

<td><%=employ.getFacost() %></td>

<td><%=employ.getTotcost() %></td>

<td><%=employ.getTax() %></td>

<td><%=employ.getRealcost() %></td>

</tr>

<%

}else{

%>

<tr><td><%=vector.size() %>표시할 데이터가 없습니다. </td></tr>

<%

}

%>

</tbody>

</table>

</body>

</html>


input.jsp

<%@ page contentType="text/html; charset=UTF-8" %>

<jsp:directive.page import="model.*" />

<jsp:directive.page import="com.javaexpert.apache.*" />

<jsp:directive.page import="lib.Calc" />

<jsp:directive.page import="java.sql.Connection" />

<%

request.setCharacterEncoding("utf-8");


EmployeeBean employee = new EmployeeBean(

                   request.getParameter("sabun"),

                   Integer.parseInt(request.getParameter("kicost")),

                   Integer.parseInt(request.getParameter("yacost")),

                   Integer.parseInt(request.getParameter("facost"))

); 

Calc calc = new Calc(employee);

calc.calc();

Connection conn = DBConnection.getConnection("pool");


EmployeeDAO.insert(conn, employee);

response.sendRedirect("index.jsp");

%>










http://commons.apache.org/ 접속.

DBCP 누르고, Downloads 누르고, commons-dbcp-1.4-bin.zip 다운.

다시 http://commons.apache.org/ 가서

Pool 누르고, Downloads 누르고,  Apache Commons Pool Downloads page 누르고,

commons-pool-1.6-bin.zip 다운.

다운받은 두개의 알집파일을 풀고 commons-dbcp-1.4.jar 파일과 commons-ppol-1.6.jar 파일을 작업폴더의 lib폴더로 옮긴다.

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

DBCP 1.4 API 의 사용방법


1. DBCP 관련 Jar 파일 및 JDBC 드라이버 Jar 파일 설치하기

   1)Downloads

- DBCP API ==> http://commons.apache.org/proper/commons-dbcp/download_dbcp.cgi

- Pool API ==> http://commons.apache.org/proper/commons-pool/download_pool.cgi

   2)Downloads Jar files

- DBCP API 관련 Jar 파일 : commons-dbcp-1.4-bin.zip

- DBCP API 가 사용하는 자카르타 Pool API 의 Jar 파일 : commons-pool-1.6-bin.zip

   3)위의 파일의 압축을 풀고 각각의 jar 파일을 WEB-INF\lib\ 폴더에 import 한다.

        - commons-dbcp-1.4.jar, commons-pool-1.6.jar


   

2. 커넥션 풀 관련 설정 파일 및 초기화하기

   1) 설정파일은 jocl 로 만들어지며 WEB-INF\classes\ 폴더밑에 저장한다.

  

   소스파일) \WEB-INF\classes\pool.jocl

*********************************************************************************************************

<object class="org.apache.commons.dbcp.PoolableConnectionFactory"

    xmlns="http://apache.org/xml/xmlns/jakarta/commons/jocl">

   <object class="org.apache.commons.dbcp.DriverManagerConnectionFactory">

      <string value="jdbc:oracle:thin:@localhost:1521:XE" />   <!-- URL -->

      <string value="scott" />                                     <!-- user -->

      <string value="tiger" />                                     <!-- password -->

   </object>

  

   <object class="org.apache.commons.pool.impl.GenericObjectPool">

      <object class="org.apache.commons.pool.PoolableObjectFactory" null="true" />

      <int value="10" />                                          <!--  maxActive -->

      <byte value="1" />                                         <!--  wait mode -->

      <long value="10000" />                                  <!--  wait time 10000 ms -->   

      <int value="10" />                                           <!-- maxIdel -->

      <int value="3" />                                             <!-- minIdel --> 

      <boolean value="true" />                                

      <boolean value="true" />

      <long value="600000" />

      <int value="5" />

      <long value="3600000" />

      <boolean value="true" />

   </object>

  

   <object class="org.apache.commons.pool.impl.GenericKeyedObjectPoolFactory" null="true" />



   <string null="true" />

  

   <boolean value="false" />

  

   <boolean value="true" />

</object>


*********************************************************************************************************


3. 커넥션 풀 관련 드라이버 로딩하기


소스파일) \WEB-INF\src\com\javasoft\db\DBCPInit.java

*********************************************************************************************************

package com.javasoft.apache;


import javax.servlet.http.HttpServlet;

import javax.servlet.ServletConfig;

import javax.servlet.ServletException;

import java.util.StringTokenizer;


public class DBCPInit extends HttpServlet {

    public void init(ServletConfig config) throws ServletException {

        try {

            String drivers = config.getInitParameter("jdbcdriver");

            StringTokenizer st = new StringTokenizer(drivers, ",");

            while (st.hasMoreTokens()) {

                String jdbcDriver = st.nextToken();

                Class.forName(jdbcDriver);

            }            

            Class.forName("org.apache.commons.dbcp.PoolingDriver");            

        } catch(Exception ex) {

            throw new ServletException(ex);

        }

    }

}


*********************************************************************************************************


4. 웹 어플리케이션이 시작될 때 DBCPInit 서블릿 클래스가 시작될 수 있도록 지정하기


소스파일) \WEB-INF\web.xml

*********************************************************************************************************

<?xml version="1.0" encoding="euc-kr"?>

....

....

  <servlet>

     <servlet-name>DBCPInit</servlet-name>

     <servlet-class>com.javasoft.apache.DBCPInit</servlet-class>

     <load-on-startup>1</load-on-startup>

     <init-param>

        <param-name>jdbcdriver</param-name>

        <param-value>oracle.jdbc.driver.OracleDriver</param-value>

     </init-param>

  </servlet>

</web-app>

*********************************************************************************************************


5. 커넥션을 가져오는 DBUtil 클래스

  - 커넥션을 구하는 클래스인 별도의 DBConn 클래스를 작성하는것이 개발하는데 편리하다.


소스파일) \WEB-INF\com\javasoft\apache\DBConn.java

********************************************************************************************************

package com.javasoft.apache;


import java.sql.DriverManager;

import java.sql.Connection;

import java.sql.SQLException;


public class DBConn {

    public static Connection getConnection(String poolName)

    throws SQLException {

        return DriverManager.getConnection(

            "jdbc:apache:commons:dbcp:/"+poolName);

    }

}

*********************************************************************************************************

6. 사용방법

    - 커넥션을 구하는 곳에 다음과 같이 해주면 된다.

try {

   conn = DBConn.getConnection("pool");

*********************************************************************************************************

JNDI를 이용한 Connection Pooling 방식


1. JNDI(Java Naming Directory Interface)

2. 자바의 명명 또는 디렉토리 서비스

3. name/value 방식으로 저장하고, name 을 통해 value를 얻는 방법

4. 대표적인 방식은 DNS 이다.

5. www.naver.com  도메인 이름으로 검색하면, DNS Server는 IP를 넘겨준다.

   도메인 이름은 name 이고, IP는 value이다.

6. 데이터베이스에서 JNDI를 사용할 때의 명명규칙은 jdbc/이름



STEP 1. server.xml 환경설정하자.

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

<Context docBase="0620" path="/0620" reloadable="true" source="org.eclipse.jst.jee.server:0620">

<Resource

 auth = "Container" 

 driverClassName = "oracle.jdbc.driver.OracleDriver"

 maxActive = "10"

 maxIdle = "10"

 maxWait = "10000"

 name = "jdbc/myoracle"

 username="scott"

 password = "tiger"

 type="javax.sql.DataSource"

 url = "jdbc:oracle:thin:@192.168.228.132:1521:orcl"

/> 

/>

STEP 2. web.xml 

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

<resource-ref>

  <description>JNDI 연습</description>

  <res-ref-name>jdbc/myoracle</res-ref-name>

  <res-type>javax.sql.DataSource</res-type>

  <res-auth>Container</res-auth>

</resource-ref>


STEP 3. 

*********************************************************************************************************


Connection을 만드는 4가지 방법. jdbc, singleton, dbcp, jndi의 data source를 이용.


dbinfo.properties

DBDRIVER=oracle.jdbc.driver.OracleDriver

DBURL=jdbc:oracle:thin:@192.168.89.130:1521:orcl

DBUSER=scott

DBPWD=tiger


jdbcdemo.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8" errorPage="/error/error.jsp" %>

<%@ page import = "java.sql.*" %>

<%@ page import="java.util.Properties" %>

<%@ page import="java.io.FileInputStream, java.io.File" %>    

<%

Properties info = new Properties();

String path = application.getRealPath("/security/dbinfo.properties");

File file = new File(path);

info.load(new FileInputStream(file));

Class.forName(info.getProperty("DBDRIVER"));

Connection conn = DriverManager.getConnection(

                      info.getProperty("DBURL"),

                      info.getProperty("DBUSER"),

                      info.getProperty("DBPWD"));

Statement stmt = conn.createStatement();

ResultSet rs = stmt.executeQuery("SELECT empno, ename, job, hiredate, sal FROM emp");

while(rs.next()){

int empno = rs.getInt("empno"); 

String ename = rs.getString("ename");

String job = rs.getString("job");

Date hiredate = rs.getDate("hiredate");

double sal = rs.getDouble("sal");

out.println(String.format("%s,%s,%s,%s,%.2f", empno, ename, job, hiredate, sal));

out.println("<br />");

}

rs.close();

stmt.close();

conn.close();

%>


singleton.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8" errorPage="/error/error.jsp" %>

<%@ page import = "java.sql.*" %>

<%@ page import="java.util.Properties" %>

<%@ page import="java.io.FileInputStream, java.io.File" %>    

<%

Properties info = new Properties();

String path = application.getRealPath("/security/dbinfo.properties");

File file = new File(path);

info.load(new FileInputStream(file));

Class.forName(info.getProperty("DBDRIVER"));

Connection conn = DriverManager.getConnection(

                      info.getProperty("DBURL"),

                      info.getProperty("DBUSER"),

                      info.getProperty("DBPWD"));

Statement stmt = conn.createStatement();

ResultSet rs = stmt.executeQuery("SELECT empno, ename, job, hiredate, sal FROM emp");

while(rs.next()){

int empno = rs.getInt("empno"); 

String ename = rs.getString("ename");

String job = rs.getString("job");

Date hiredate = rs.getDate("hiredate");

double sal = rs.getDouble("sal");

out.println(String.format("%s,%s,%s,%s,%.2f", empno, ename, job, hiredate, sal));

out.println("<br />");

}

rs.close();

stmt.close();

conn.close();

%>

jdbcdemo.jsp와 singleton.jsp 의 출력은 아래와 같다.

7369,SMITH,CLERK,1980-12-17,800.00 

7499,ALLEN,SALESMAN,1981-02-20,1600.00 

7521,WARD,SALESMAN,1981-02-22,1250.00 

7566,JONES,MANAGER,1981-04-02,2975.00 

7654,MARTIN,SALESMAN,1981-09-28,1250.00 

7698,BLAKE,MANAGER,1981-05-01,2850.00 

7782,CLARK,MANAGER,1981-06-09,2450.00 

7788,SCOTT,ANALYST,1987-04-19,3000.00 

7839,KING,PRESIDENT,1981-11-17,5000.00 

7844,TURNER,SALESMAN,1981-09-08,1500.00 

7876,ADAMS,CLERK,1987-05-23,1100.00 

7900,JAMES,CLERK,1981-12-03,950.00 

7902,FORD,ANALYST,1981-12-03,3000.00 

7934,MILLER,CLERK,1982-01-23,1300.00 

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

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" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">

  <display-name>0620</display-name>

  

  <servlet>

     <servlet-name>DBCPInit</servlet-name>

     <servlet-class>com.javaexpert.apache.DBCPInit</servlet-class>

     <load-on-startup>1</load-on-startup>

     <init-param>

        <param-name>jdbcdriver</param-name>

        <param-value>oracle.jdbc.driver.OracleDriver</param-value>

     </init-param>

  </servlet>

</web-app>


error.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"  isErrorPage="true"  %>

<%

String str = "<br /><span style='color:red;font-size:1.2em;font-weight:bold'>";

%>

<div align="center">

<img src="images/2.jpg" />

<%

if(exception instanceof NullPointerException){

out.print(str);

out.println("Null" + "</span>");

}else if(exception instanceof ArithmeticException){

out.print(str);

out.println("분모를 0으로 놓지 마십시오." + "</span>");

}else if(exception instanceof java.sql.SQLException){

out.print(str);

out.println("SQL 에러" + "</span>");

}else if(exception instanceof java.io.IOException){

out.print(str);

out.println("IO 에러" + "</span>");

}

%>

</div>


pool.jocl

<object class="org.apache.commons.dbcp.PoolableConnectionFactory"

    xmlns="http://apache.org/xml/xmlns/jakarta/commons/jocl">

   <object class="org.apache.commons.dbcp.DriverManagerConnectionFactory">

      <string value="jdbc:oracle:thin:@192.168.89.130:1521:orcl" />   <!-- URL -->

      <string value="scott" />                                     <!-- user -->

      <string value="tiger" />                                     <!-- password -->

   </object>

  

   <object class="org.apache.commons.pool.impl.GenericObjectPool">

      <object class="org.apache.commons.pool.PoolableObjectFactory" null="true" />

      <int value="10" />                                          <!--  maxActive -->

      <byte value="1" />                                         <!--  wait mode -->

      <long value="10000" />                                  <!--  wait time 10000 ms -->   

      <int value="10" />                                           <!-- maxIdel -->

      <int value="3" />                                             <!-- minIdel --> 

      <boolean value="true" />                                

      <boolean value="true" />

      <long value="600000" />

      <int value="5" />

      <long value="3600000" />

      <boolean value="true" />

   </object>

  

   <object class="org.apache.commons.pool.impl.GenericKeyedObjectPoolFactory" null="true" />



   <string null="true" />

  

   <boolean value="false" />

  

   <boolean value="true" />

</object>


com.javaexpert.apache 패키지의

DBConnection.java

package com.javaexpert.apache;


import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;


public class DBConnection {

public static Connection getConnection(String poolName)

   throws SQLException {

       return DriverManager.getConnection(

           "jdbc:apache:commons:dbcp:/"+poolName);

   }

}


DBClose.java

package com.javaexpert.apache;


import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;


public class DBClose {

public static void close(Connection conn, Statement stmt, ResultSet rs){

try {

if(rs != null)rs.close();

if(stmt != null) stmt.close();

if(conn != null) conn.close();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}


DBCPInint.java

package com.javaexpert.apache;


import java.util.StringTokenizer;


import javax.servlet.ServletConfig;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;


public class DBCPInit extends HttpServlet {

public void init(ServletConfig config) throws ServletException {

        try {

            String drivers = config.getInitParameter("jdbcdriver");

            StringTokenizer st = new StringTokenizer(drivers, ",");

            while (st.hasMoreTokens()) {

                String jdbcDriver = st.nextToken();

                Class.forName(jdbcDriver);

            }            

            Class.forName("org.apache.commons.dbcp.PoolingDriver");            

        } catch(Exception ex) {

            throw new ServletException(ex);

        }

    }

}



com javaexpert.libs 패키지의

DBConnection.java

package com.javaexpert.libs;


import java.io.File;

import java.io.FileInputStream;

import java.io.IOException;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;

import java.util.Properties;


//Singletone Pattern

public class DBConnection {

private static Connection instance;

public static Connection getInstance(String file){

if(instance == null) instance = create(file);

return instance;

}

private DBConnection(){}  //Constructor}

private Connection getConnection(String file){

Properties info = new Properties();

Connection conn = null;

try{

info.load(new FileInputStream(new File(file)));

Class.forName(info.getProperty("DBDRIVER"));

conn = DriverManager.getConnection(info.getProperty("DBURL"),

                                 info.getProperty("DBUSER"), 

                                 info.getProperty("DBPWD"));

}catch(IOException ex){

System.out.println(ex.toString());

}catch(ClassNotFoundException ex){

System.out.println("Class Not Found");

}catch(SQLException ex){

System.out.println(ex.toString());

}

return conn;

}

private static Connection create(String file){

return new DBConnection().getConnection(file);

}

}


DBClose.java

package com.javaexpert.libs;


import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;


public class DBClose {

public static void close(Connection conn, Statement stmt, ResultSet rs){

try {

if(rs != null)rs.close();

if(stmt != null) stmt.close();

if(conn != null) conn.close();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

dbcpdemo.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8" errorPage="/error/error.jsp" %>

<jsp:directive.page import="com.javaexpert.apache.DBConnection, com.javaexpert.apache.DBClose" />

<jsp:directive.page import="java.sql.*" />

<%

Connection conn = DBConnection.getConnection("pool");

Statement stmt = conn.createStatement();

ResultSet rs = stmt.executeQuery("SELECT empno, ename, job, hiredate, sal FROM emp");

while(rs.next()){

int empno = rs.getInt("empno"); 

String ename = rs.getString("ename");

String job = rs.getString("job");

Date hiredate = rs.getDate("hiredate");

double sal = rs.getDouble("sal");

out.println(String.format("%s,%s,%s,%s,%.2f", empno, ename, job, hiredate, sal));

out.println("<br />");

}

DBClose.close(conn, stmt, rs);

%>

출력은 jdbcdemo.jsp나 singletondemo.jsp 와 같다.

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

server.xml 의 context 추가할 때 아래처럼

      <Context docBase="0620" path="/0620" reloadable="true" source="org.eclipse.jst.jee.server:0620">

       <Resource

         auth = "Container" 

         driverClassName = "oracle.jdbc.driver.OracleDriver"

         maxActive = "10"

         maxIdle = "10"

         maxWait = "10000"

         name = "jdbc/myoracle"

         username="scott"

         password = "tiger"

         type="javax.sql.DataSource"

         url = "jdbc:oracle:thin:@192.168.89.130:1521:orcl"

       />

      </Context>


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" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">

  <display-name>0620</display-name>

  

  <resource-ref>

  <description>JNDI 연습</description>

  <res-ref-name>jdbc/myoracle</res-ref-name>

  <res-type>javax.sql.DataSource</res-type>

  <res-auth>Container</res-auth>

  </resource-ref>

  

  

    

  <servlet>

     <servlet-name>DBCPInit</servlet-name>

     <servlet-class>com.javaexpert.apache.DBCPInit</servlet-class>

     <load-on-startup>1</load-on-startup>

     <init-param>

        <param-name>jdbcdriver</param-name>

        <param-value>oracle.jdbc.driver.OracleDriver</param-value>

     </init-param>

  </servlet>

  

</web-app>


kr.co.javaexpert.libs.db 패키지의

DBConnection.java

package kr.co.javaexpert.libs.db;


import java.sql.Connection;

import java.sql.SQLException;


import javax.naming.Context;

import javax.naming.InitialContext;

import javax.naming.NamingException;

import javax.sql.DataSource;


public class DBConnection {

public static Connection getConnection(){

Connection conn = null;

try{

Context context = new InitialContext();

Context other = (Context)context.lookup("java:comp/env");

DataSource ds = (DataSource)other.lookup("jdbc/myoracle");

conn = ds.getConnection();

}catch(NamingException ex){

System.out.println(ex.toString());

}catch(SQLException ex){

System.out.println(ex.toString());

}

return conn;

}

}


DBClose.java

package kr.co.javaexpert.libs.db;


import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;


public class DBClose {

public static void close(Connection conn, Statement stmt, ResultSet rs){

try {

if(rs != null)rs.close();

if(stmt != null) stmt.close();

if(conn != null) conn.close();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}


jndidemo.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8" errorPage="/error/error.jsp" %>

<jsp:directive.page import="kr.co.javaexpert.libs.db.DBConnection, kr.co.javaexpert.libs.db.DBClose" />

<jsp:directive.page import="java.sql.*" />

<%

Connection conn = DBConnection.getConnection();

Statement stmt = conn.createStatement();

ResultSet rs = stmt.executeQuery("SELECT empno, ename, job, hiredate, sal FROM emp");

while(rs.next()){

int empno = rs.getInt("empno"); 

String ename = rs.getString("ename");

String job = rs.getString("job");

Date hiredate = rs.getDate("hiredate");

double sal = rs.getDouble("sal");

out.println(String.format("%s,%s,%s,%s,%.2f", empno, ename, job, hiredate, sal));

out.println("<br />");

}

DBClose.close(conn, stmt, rs);

%>


출력은 역시 같다.

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

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

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

자바빈

JavaBean?


1. Java Web 에서 사용하기 위한 Java Component(Java Class)

2. Java Web 에서 사용하기 위한 자바 클래스파일들

3. 스펙

  - 상속에 제한이 없다.

  - 반드시 클래스는 패키지화 돼야 한다.

  - 필요에 따라 직렬화를 할 수 있다.

  - 필요에 따라 기본 생성자를 생성할 수 있다.

  - 자바빈에서 사용하는 멤버변수를 property 라고 부른다.

  - 반드시 property 는 private 이어야 한다.

  - private 으로 되어 있는 프라퍼티에 접근하기 위해 메소드가 필요하며,

    그 메소드는 public 이어야 한다.

  - 그 페블릭 메소드를 우리는 setter, getter 라고 부른다.

  - setXxx(), getXxx()

  - 프라퍼티의 데이타티입이 boolean일 경우에는 isXxx() 를 만들 수 있다.


4. <jsp:useBean />

  - 자바 객체를 생성하거나 이미 생성된 객체를 추출하는 태그

  - 자바 객체의 기본생성자만 호출

  1)Syntax

    <jsp:useBean id="instanceName" class="package.ClassName"

        scope="page | request | session | application" />

  2)id

    - Java 식별자 규칙을 사용

    - 영문대소문자, 숫자, _만 사용가능

    - 대소문자 구별

    - 주어진 페이지내의 유일한 이름

    - 문자로 시작해야

  3)class

    - 사용하고자 하는 클래스를 패키지 이름과 같이 기술

  4)scope

    - page | request | session | application

    - 생략하면 page scope 가 적용

    - JavaBean 클래스의 유효기간과 사용 범위 즉 lifecycle 을 결정


5. <jsp:setProperty />

  - JavaBean 의 프라퍼티의 값을 설정 혹은 수정할 때 사용

  - JavaBean 의 setter 즉 setXxx() 메소드를 호출

  - 값을 설정할 때 리터럴로 할 것인지, 아니면 파라미터로 할 것인지를 결정가능

  1) Syntax

    <jsp:setProperty name="useBean의 아이디" 

       { property = "*" | property = "propertyName" }

       { value="propertyValue" | param = "paramValue" }

    />

    - name

      useBean의 id와 동일한 이름

    - property

      JavaBean의 프라퍼티 이름(멤버변수 이름)

      --> setXxx() setter호출됨


6. <jsp:getProperty />

   - JavaBean 의 프라퍼티의 값을 읽어올 때 사용

   - JavaBean 의 getXxx() 즉 getter 호출

   1)Syntax

     <jsp:getProperty name="useBean의 아이디" property="멤버변수 이름" />



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

usebeandemo.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<jsp:useBean id="today" class="java.util.Date" />

<%--

    Date today = new Date();

--%>

오늘은 <%=today %>


출력:

오늘은 Fri Jun 20 14:30:12 KST 2014

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

package org.javaexpert.libs패키지의 LoginBean.java

package org.javaexpert.libs;


public class LoginBean {

private String userid; //필드가 아니라 프라퍼티라고 한다.

private String passwd;

public String getUserid() {

return userid;

}

public void setUserid(String userid) {

this.userid = userid;

}

public String getPasswd() {

return passwd;

}

public void setPasswd(String passwd) {

this.passwd = passwd;

}

}

usebean.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<jsp:directive.page import="org.javaexpert.libs.LoginBean" />

<jsp:useBean id="log" class="org.javaexpert.libs.LoginBean" />

<body>

<h1>useBean 연습</h1>

<%

log.setUserid("javaexpert");

log.setPasswd("123456");

%>

사용자 아이디 : <%=log.getUserid() %> <br /> 

패스워드 : <%=log.getPasswd() %>

</body>

</html>


출력:

useBean 연습

사용자 아이디 : javaexpert 

패스워드 : 123456 

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

usebeanscope.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<%@ page import="org.javaexpert.libs.*" %>


<jsp:useBean id="aaa" class="org.javaexpert.libs.LoginBean" scope="session" />

<body>

<h1>Bean 의 Scope 연습</h1>

<%

aaa.setUserid("Sally");

aaa.setPasswd("P@$$W0rd");

%>

사용자 아이디 : <%=aaa.getUserid() %> <br /> 

패스워드 : <%=aaa.getPasswd() %>

</body>


usebeanscope1.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<%@ page import="org.javaexpert.libs.*" %>


<jsp:useBean id="aaa" class="org.javaexpert.libs.LoginBean" scope="session" />

<body>

사용자 아이디 : <%=aaa.getUserid() %> <br /> 

패스워드 : <%=aaa.getPasswd() %>

</body>

</html>


usebeanscope.jsp를 실행하면 아이디 비번이 설정된다. 그리고 usebeanscope1.jsp 을 실행하면 처음에 가졌던 정보를 유지하고있다. 

같은 session일 때 값을 저장한다. 다른 브라우저를 사용하거나 다시 브라우저를 실행시키면 기억하지못한다.

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

usebeanset.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

    

<%@ page import="org.javaexpert.libs.*" %>


<jsp:useBean id="bbb" class="org.javaexpert.libs.LoginBean" />


<jsp:setProperty property="userid" name="bbb" value="Michael" />

<jsp:setProperty property="passwd" name="bbb" value="123456" />

<body>


    사용자 아이디 : <%=bbb.getUserid() %> <br /> 

패스워드 : <%=bbb.getPasswd() %>

</body>

</html>


출력:

사용자 아이디 : Michael 

패스워드 : 123456 

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

login.html

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>로그인 창</title>

</head>

<body>

<form method="post" action="usebeanparam.jsp">

아이디 : <input type="text" name="userid" required><br />

패스워드 : <input type="text" name="passwd" required><br />

<input type="submit" value="로그인">

</form>

</body>

</html>


usebeanparam.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<%@ page import="org.javaexpert.libs.*" %>


<jsp:useBean id="ccc" class="org.javaexpert.libs.LoginBean" />


<%    //더이상 이렇게 사용 안함.

//String userid = request.getParameter("userid");

//String passwd = request.getParameter("passwd");

%>


<jsp:setProperty name="ccc" property="*" />

<body>

사용자 아이디 : <%=ccc.getUserid() %> <br /> 

패스워드 : <%=ccc.getPasswd() %>

</body>

</html>

property와 param이 같으므로 param 을 없애고 * 을 사용하여 몇개를 입력받던지 가능하다.

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

usebeanget.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<%@ page import="org.javaexpert.libs.*" %>


<jsp:useBean id="ddd" class="org.javaexpert.libs.LoginBean" />


<jsp:setProperty name="ddd" property="userid" value="oracleexpert" />

<jsp:setProperty name="ddd" property="passwd" value="7777" />

<body>

사용자 아이디 : <jsp:getProperty name="ddd" property="userid" /> <br /> 

패스워드 : <jsp:getProperty name="ddd" property="passwd" />

</body>

</html>


출력:

사용자 아이디 : oracleexpert 

패스워드 : 7777 

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

CountBean.java

package org.javaexpert.libs;


public class CountBean {

private int count;    //property


public int getCount() {

return ++count;

}


public void setCount(int count) {

this.count = count;

}

}

requestscope.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<jsp:directive.page import="org.javaexpert.libs.CountBean" />


<jsp:useBean id="cnt" class="org.javaexpert.libs.CountBean" scope="request" />

<jsp:setProperty name="cnt" property="count" value="1" />


<body>

<h1>Scope : request or page</h1>

방문자 수 : <jsp:getProperty name="cnt" property="count" />명<br />

<a href="requestscope.jsp">다시방문</a>

</body>

</html>

다시방문을 눌러도 방문자 수는 증가하지 않는다.

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

sessionscop.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<jsp:directive.page import="org.javaexpert.libs.CountBean" />


<jsp:useBean id="eee" class="org.javaexpert.libs.CountBean" scope="session">

<jsp:setProperty name="eee" property="count" value="1" />

</jsp:useBean>

<body>

<h1>Scope : session</h1>

방문자 수 : <jsp:getProperty name="eee" property="count" />명<br />

<a href="sessionscope.jsp">다시방문</a>

</body>

</html>

다시방문을 눌렀을 떄 방문자 수는 증가하지만 브라우저가 바뀌면 세션은 초기화된다.

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

application.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<jsp:directive.page import="org.javaexpert.libs.CountBean" />


<jsp:useBean id="fff" class="org.javaexpert.libs.CountBean" scope="application">

<jsp:setProperty name="fff" property="count" value="1" />

</jsp:useBean>


<body>

<h1>Scope : application</h1>

방문자 수 : <jsp:getProperty name="fff" property="count" />명<br />

<a href="applicationscope.jsp">다시방문</a>

</body>

</html>

다시방문을 눌러도 방문자 수가 증가하고, 브라우저가 바뀌어도 방문자 수는 초기화되지 않고 유지된다.



0620.zip



Action Tag

 - JSP 페이지에서 자바 코드 등의 스크립트요소(scriptlet, expression, declaraion)를 사용하지 않고도 다른 페이지의 서블릿이나 자바빈의 객체에 접근할 수 있도록 태그를 이용해서 구현된 기능

 - 개발자는 JSP 페이지의 내부적인 프로그램 로직을 감출 수 있다.

 - JSP 프레젠테이션 부분(JSP)과 비즈니스부분(Java Class)을 분리하는 것이 주 목적이다.

 - 어느 WAS에서도 동일하게 렌더링될 수 있도록 JSP 표준 스펙에 정의된 태그들

 - 반드시 jsp라는 접두사로 시작한다.

 - 반드시 Xml 코딩규칙을 지켜야 한다. 반드시 종결태그가 있어야 한다.

 - 대소문자 구별한다.

 - 종류

 <jsp:forward /> 

 <jsp:include />

 <jsp:param />

 <jsp:plug-in />

 <jsp:useBean />

 <jsp:getProperty />

 <jsp:setProperty />

 <jsp:directive />

 <jsp:scriptlet />

 <jsp:expression />

 <jsp:declaration />



1. <jsp:forward>

   1)

      ServletContext context = this.getServletContext();

      RequestDispatcher rd = context.getRequestDispatcher("/servlet/Hello");

      rd.forward(req, res);

   2)

     <% pageContext.forward("a.jsp"); %>

   3)

      <jsp:forward page="a.jsp"/>

      

   <jsp:forward page="moveTo.jsp">

       <jsp:param name="irum" value="조성모" />

       <jsp:param name="age" value="28" />

   </jsp:forward>


   <jsp:forward page="moveTo.jsp?irum=조성모&age=28" />


2. <jsp:include>

  1)

     ServletContext context = getServletContext();

     RequestDispatchere rd = context.getRequestDispatcher("포함될 페이지의 경로");

     rd.include(req, res);

  2)

     pageContext.include("포함될 페이지의 경로");

  3)

     <jsp:include page="포함될 페이지의 경로" flush="true | false" />

  4)

     <%@ include file="포함될 페이지의 경로" %>


  5)경로는 상대경로만 가능하다.


3. <jsp:param>


4. <jsp:plug-in />

  1)Java Applet 클래스 혹은 JavaBean 클래스를 클라이언트로 다운로드 받아서 사용할 수 있도록

     각 브라우저에 맞게 HTML 코드로 변환해 주는 역할

  2)서버부하를 줄여주는 효과

  3)Syntax

   <jsp:plugin type="applet | bean" codebase = "클래스파일의 위치"

                   code = "클래스파일명" width="넓이" height="높이" />

   <jsp:fallback />


5. 스크립트 요소 액션 태그들

   <jsp:expression /><jsp:declaration /><jsp:scriptlet />


  <jsp:useBean>

5. <jsp:getProperty>

6. <jsp:setProperty>

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

forward.html

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>

</head>

<body>

<form method="post" action="forward.jsp">

Name : <input type="text" name="irum" required><br />

Age : <input type="number" name="age" required><br />

<input type="submit" value="전송">

</form>

</body>

</html>


forward.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<% 

request.setCharacterEncoding("utf-8");

String irum = request.getParameter("irum");

int age = Integer.parseInt(request.getParameter("age"));

String path = "kid.jsp";

if(age < 10){

//절대경로 | 상대 경로 모두 가능

//response.sendRedirect("http://jr.naver.com/");   //방법2

%>

<%--       //방법2.스크립트문을통해 열기

<script>

//window.location.replace('http://jr.naver.com');

//window.location.href = 'http://jr.naver.com';    

window.location.href = "kid.jsp";

</script>

--%>

    <%-- <jsp:forward page="<%=path %>" />--%>

    <jsp:forward page="http://jr.naver.com" />        // 이렇게 /0619/http:/jr.naver.com 를 열려고하여 에러 발생.

<% }  %>



kid.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<body bgcolor='yellow'>

<h1>여기는 kid.jsp 페이지 입니다.</h1> 

</body>

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

includedemo.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<html lang="ko">

<body>

<h1>Welcome to My Home</h1>

<%-- <jsp:include page="date.jsp"  flush="true" /><br />--%>

<%@ include file="date.jsp" %><br />

// 위처럼 include 지시자를 사용하면 date.jsp를 컴파일 안하고, 그냥 붙이기 때문에

//D:\WebHome\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\0619\org\apache\jsp 폴더에는 date.class와 date.java가 만들어지지 않는다.


<img src="images/1.jpg"><br />

<jsp:include page="copyright.html" />

</body>

</html>


date.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<%@ page import="java.util.Date" %>

<%@ page import="java.text.SimpleDateFormat" %>


<%

Date now = new Date();

String pattern = "지금은 G yyyy년 MM월 dd일 EE a hh시 mm분 ss초 입니다.";

SimpleDateFormat sdf = new SimpleDateFormat(pattern);

out.println(sdf.format(now));

%>


copyright.html

<hr size="2" color="red" width="80%" />

<div align="center">Copyright All Reserved &copy;<br />

Please mail to me <a href="mailto:admin@aaa.com">WebMaster</a>

</div>

//각 include될 페이지들에겐 body를 따로쓰지않고 body안의 내용만을 적는 것이다.

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

PluginApplet.java

import java.applet.Applet;

import java.awt.Graphics;

//Servlet = Server + Applet

//Applet's lifecycle : init() --> start() or paint() --> destroy()

//Servlet's lifecycle : init() --> service() --> destroy()

public class PluginApplet extends Applet {

String name;

public void init(){

name =  getParameter("irum");

}

public void paint(Graphics g){

g.drawString(name, 10, 10);

}

}

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

plugindemo.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<body>

<h1>플러그인 액션 테스트</h1>

<jsp:plugin code="AppletEvent.class" codebase="./"

                 type="applet" width="300" height="300" />

<%-- <jsp:plugin code="PluginApplet.class"  codebase="./"  type="applet"

      width="300" height="300" >

      <jsp:params>

      <jsp:param name="irum" value="조성모"  />

      </jsp:params>

      <jsp:fallback>안타깝게도 현재 브라우저에서는 지원하지 않습니다.</jsp:fallback>

</jsp:plugin>--%>

</body>

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

actiontagdemo.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<html lang="ko">

    <head><title>두 수의 합</title></head>

<body>

<jsp:scriptlet>

int num1 = Integer.parseInt(request.getParameter("num1"));

int num2 = Integer.parseInt(request.getParameter("num2"));

int sum = add(num1, num2);

</jsp:scriptlet>

두 수의 합은 <jsp:expression>sum</jsp:expression>입니다.

</body>

</html>

<jsp:declaration>

private int add(int n, int n1){

return n + n1;

}

</jsp:declaration>

출력: http://localhost:8080/0619/actiontagdemo.jsp?num1=5&num2=4 이렇게 접속하면

두 수의 합은 9입니다. 

//이런식으로는 잘사용하지 않는다. 이런게 있다는 것만 알아두길.

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

date.jsp 에서 import 방법을 action tag를 이용한 방법

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<jsp:directive.page import="java.util.Date" />

<%@ page import="java.text.SimpleDateFormat" %>


<%

Date now = new Date();

String pattern = "지금은 G yyyy년 MM월 dd일 EE a hh시 mm분 ss초 입니다.";

SimpleDateFormat sdf = new SimpleDateFormat(pattern);

out.println(sdf.format(now));

%>

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

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

에러처리

errordemo.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8" errorPage="/error/error.jsp" %>

<%=4 / 0  %>


error.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"  isErrorPage="true"  %>

<%

String str = "<br /><span style='color:red;font-size:1.2em;font-weight:bold'>";

%>

<div align="center">

<img src="images/2.jpg" />

<%

if(exception instanceof NullPointerException){

out.print(str);

out.println("Null" + "</span>");

}else if(exception instanceof ArithmeticException){

out.print(str);

out.println("분모를 0으로 놓지 마십시오." + "</span>");

}else if(exception instanceof java.sql.SQLException){

out.print(str);

out.println("SQL 에러" + "</span>");

}else if(exception instanceof java.io.IOException){

out.print(str);

out.println("IO 에러" + "</span>");

}

%>

</div>

출력:

분모를 0으로 놓지 마십시오.

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

위의 경우에는 사용자가 다른 주소를 입력했을 때는 대처할 수 없다. 그래서 아래 코드를 이용해서 다른 주소를 입력했을 때 404에러가 아래페이지를 호출한다.

에러 타입별로 에러 페이지 지정하기

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" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">

  <display-name>0619</display-name>  

  <error-page>

  <error-code>404</error-code>

  <location>/error/error404.html</location>

  </error-page>

</web-app>



error404.html

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>

</head>

<body bgcolor='green'>

<div align='center'>

<h1>요청하신 페이지는 존재하지 않습니다.</h1>

<img src="images/0.jpg">

</div>

</body>

</html>

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

익셉션 타입별로 에러 페이지 지정하기

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" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">

  <display-name>0619</display-name>

  

  <error-page>

  <error-code>404</error-code>

  <location>/error/error404.html</location>

  </error-page>

  

  <error-page>

  <exception-type>java.lang.ArithmeticException</exception-type>

  <location>/error/arithmetic.jsp</location>

  </error-page>

</web-app>


errordemo.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8" %>

<%=4 / 0  %>

//여기서 errorpage를 쓰지 않았음.


arithmetic.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8" isErrorPage="true" %>

<%  response.setStatus(HttpServletResponse.SC_OK); %>

<div align="center">

<img src="images/3.jpg"><br />

Error Massage : <%=exception.getMessage()%>

</div>


출력:

Error Massage : / by zero 

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

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

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

www.mysql.com 접속 Downloads-Community 접속.

MySQL Connectors - Connector/ODBC 선택해서 Windows (x86, 32-bit), MSI Installer 다운.

MySQL Connectors - Connector/J 선택해서 Platform Independent 선택해서 Platform Independent (Architecture Independent), ZIP Archive 다운.

Connector/J의 다운받은 것을 알집 풀어.

어제 오라클 설정했던 것처럼

윈도우즈 EclipseEE 실행해서

밑에 Data source Explorer 에서

Database Connections 우측버튼 New  해서

MySQL 선택해서 이름은 My MySQL   해서 next

New Driver Definition 인 작은 아이콘 눌러서

MySQL 5.1 되어있는 것 선택해서

Jar List 탭눌러서 기존14로 되어있는 것 삭제해서

add jar 해서 위에서 알집 파일 푼 것에서 jar파일 선택함.

properties 탭에서 connection URL 을 jdbc:mysql://192.168.228.133:3306/test(아이피는 centos의 아이피)

Driver Class 는 oracle.jdbc.driver.OracleDriver 로하고,

User ID 는 root , Password 는 javamysql 로 해서 OK 누름. finish .

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

Connector/ODBC 에서 다운받은 파일 설치. 

제어판-관리도구-ODBC Data Sources (32-bit) 눌러서

User DSN탭에서 add누르면MYSQL ODBC5.3 Unicode Driver 누르고 finish.

Name에 My MySQL // Server의 아이피 쓰고 192.168.89.133  //

user : root  // password : javamysql  // database 에 test 해주고

details 눌러 character set에 utf8 해주고 OK. Ok

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ



SungjukMgmtV1.zip



SungjukMgmtV1 성적관리프로그램 : 좋은 방법아님

dbinfo.properties

DBDRIVER=com.mysql.jdbc.Driver

DBURL=jdbc:mysql://192.168.89.133:3306/test

DBUSER=root

DBPWD=javamysql


style.css

@CHARSET "utf-8";


h1 { text-align:center;}

table { margin:auto;width:900px;border-width:0px;  }

.left { text-align:left;}

.right{ text-align:right;}

table:last-child{

border-collapse:collapse; padding:10px; border:1px solid white;

}

table:last-child th, table:last-child td{

border:1px solid white;text-align:center;

}

table:last-child caption{

font-size:1.5em; margin-bottom:10px;

}

table:last-child tr{

height:30px; background-color:darkblue;color:white;

}

table:last-child td{

background-color:white;height:25px;color:black;

}


input.html

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>성적 데이터 입력 창</title>

<style>

fieldset{

width:300px;

margin:auto;

}

table{

width : 300px;

border-collapse: collapse;

}

th {

width:60px;

background-color:yellow;

}

input[type='text']{

width:220px;

font-size:1.2em;

}

</style>

</head>

<body>

<form method="post" action="input.jsp">

<fieldset>

<legend>성적데이터</legend>

<table>

<tr>

<th>학번</th>

<td><input type="text" name="hakbun" required></td>

</tr>

<tr>

<th>이름</th>

<td><input type="text" name="irum" required></td>

</tr>

<tr>

<th>국어</th>

<td><input type="text" name="kor" required></td>

</tr>

<tr>

<th>영어</th>

<td><input type="text" name="eng" required></td>

</tr>

<tr>

<th>수학</th>

<td><input type="text" name="mat" required></td>

</tr>

<tr>

<th>전산</th>

<td><input type="text" name="edp" required></td>

</tr>

<tr>

<td colspan="2" align="center">

<input type="submit" value="입력">

</td>

</tr>

</table>

</fieldset>

</form>

</body>

</html>


input.jsp

<%@ page contentType="text/html; charset=UTF-8" errorPage="/error/error.jsp" %>

<jsp:directive.page import="kr.co.javaexpert.libs.model.*" />

<jsp:directive.page import="kr.co.javaexpert.libs.controller.StudentCalc" />

<jsp:directive.page import="java.sql.Connection" />

<%

request.setCharacterEncoding("utf-8");


StudentDTO student = new StudentDTO(

                   request.getParameter("hakbun"),

                   request.getParameter("irum"),

                   Integer.parseInt(request.getParameter("kor")),

                   Integer.parseInt(request.getParameter("eng")),

                   Integer.parseInt(request.getParameter("mat")),

                   Integer.parseInt(request.getParameter("edp"))

);

StudentCalc calc = new StudentCalc(student);

calc.calc();

String path = application.getRealPath("/security/dbinfo.properties");

DBConnection db = new DBConnection(path);

db.loadDriver();

db.setConnection();

Connection conn = db.getConnection();

StudentDAO.insert(conn, student);

DBClose.close(conn);

response.sendRedirect("index.jsp");

%>


kr.co.javaexpert.libs.model의

DBClose.java

package kr.co.javaexpert.libs.model;


import java.sql.Connection;

import java.sql.SQLException;


public class DBClose {

public static void close(Connection conn) throws SQLException{

if(conn != null) conn.close();

}

}


DBConnection.java

package kr.co.javaexpert.libs.model;


import java.sql.Connection;

import java.sql.SQLException;


public class DBClose {

public static void close(Connection conn) throws SQLException{

if(conn != null) conn.close();

}

}


StudentDAO.java

package kr.co.javaexpert.libs.model;


import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import java.util.Vector;


public class StudentDAO {

public static StudentDTO selectOne(Connection conn, String hakbun) 

throws SQLException{

String sql = "SELECT * FROM Student WHERE hakbun = ?";

PreparedStatement pstmt = conn.prepareStatement(sql);

pstmt.setString(1, hakbun);

ResultSet rs = pstmt.executeQuery();

rs.next();

StudentDTO student = new StudentDTO();

student.setHakbun(rs.getString("hakbun"));

student.setIrum(rs.getString("irum"));

student.setKor(rs.getInt("kor"));

student.setEng(rs.getInt("eng"));

student.setMat(rs.getInt("mat"));

student.setEdp(rs.getInt("edp"));

student.setTot(rs.getInt("tot"));

student.setAvg(rs.getDouble("avg"));

student.setGrade(rs.getString("grade").charAt(0));

pstmt.close();

return student;

}

public static Vector<StudentDTO> selectAll(Connection conn)

throws SQLException{

String sql = "SELECT hakbun, irum FROM Student ORDER BY tot DESC";

Statement stmt = conn.createStatement();

ResultSet rs = stmt.executeQuery(sql);

Vector<StudentDTO> vector = new Vector<StudentDTO>(1,1);

while(rs.next()){

StudentDTO student = new StudentDTO();

student.setHakbun(rs.getString("hakbun"));

student.setIrum(rs.getString("irum"));

vector.addElement(student);

}

stmt.close();

return vector;

}

public static void insert(Connection conn, StudentDTO student)

throws SQLException{

String sql = "INSERT INTO Student VALUES(?,?,?,?,?,?,?,?,?)";

PreparedStatement pstmt = conn.prepareStatement(sql);

pstmt.setString(1, student.getHakbun());

pstmt.setString(2, student.getIrum());

pstmt.setInt(3, student.getKor());

pstmt.setInt(4, student.getEng());

pstmt.setInt(5, student.getMat());

pstmt.setInt(6, student.getEdp());

pstmt.setInt(7, student.getTot());

pstmt.setDouble(8, student.getAvg());

pstmt.setString(9, String.valueOf(student.getGrade()));

pstmt.executeUpdate();

pstmt.close();

}

}



StudentDTO.java

package kr.co.javaexpert.libs.model;


public class StudentDTO {

private String hakbun;

private String irum;

private int kor;

private int eng;

private int mat;

private int edp;

private int tot;

private double avg;

private char grade;

public StudentDTO(){}

public StudentDTO(String hakbun, String irum, int kor, int eng, int mat, int edp) {

this.hakbun = hakbun;

this.irum = irum;

this.kor = kor;

this.eng = eng;

this.mat = mat;

this.edp = edp;

}

public String getHakbun() {

return hakbun;

}

public void setHakbun(String hakbun) {

this.hakbun = hakbun;

}

public String getIrum() {

return irum;

}

public void setIrum(String irum) {

this.irum = irum;

}

public int getKor() {

return kor;

}

public void setKor(int kor) {

this.kor = kor;

}

public int getEng() {

return eng;

}

public void setEng(int eng) {

this.eng = eng;

}

public int getMat() {

return mat;

}

public void setMat(int mat) {

this.mat = mat;

}

public int getEdp() {

return edp;

}

public void setEdp(int edp) {

this.edp = edp;

}

public int getTot() {

return tot;

}

public void setTot(int tot) {

this.tot = tot;

}

public double getAvg() {

return avg;

}

public void setAvg(double avg) {

this.avg = avg;

}

public char getGrade() {

return grade;

}

public void setGrade(char grade) {

this.grade = grade;

}

}


kr.co.javaexpert.libs.controller의

StudentCalc.java

package kr.co.javaexpert.libs.controller;


import kr.co.javaexpert.libs.model.StudentDTO;


public class StudentCalc {

private StudentDTO student;


public StudentCalc(StudentDTO student) {

this.student = student;

}

public void calc(){

int total = getTotal(this.student.getKor(), this.student.getEng(),

                  this.student.getMat(), this.student.getEdp());

double avg = getAvg(total);

char grade = getGrade(avg);

this.student.setTot(total);

this.student.setAvg(avg);

this.student.setGrade(grade);

}

private int getTotal(int kor, int eng, int mat, int edp){

return kor + eng + mat + edp;

}

private double getAvg(int total){

return total / 4.;

}

private char getGrade(double avg){

char grade = '\0';

switch((int)(avg / 10)){

case 10 :

case 9 :   grade = 'A'; break;

case 8 :   grade = 'B'; break;

case 7 :   grade = 'C'; break;

case 6 :   grade = 'D'; break;

default :   grade = 'F'; break;

}

return grade;

}

}


index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8" errorPage="/error/error.jsp" %>

<%@ page import="kr.co.javaexpert.libs.model.*" %>   

<%@ page import="java.sql.Connection" %> 

<%@ page import="java.util.Vector" %>

<%

String path = application.getRealPath("/security/dbinfo.properties");

DBConnection db = new DBConnection(path);

db.loadDriver();

db.setConnection();

Connection conn = db.getConnection();

Vector<StudentDTO> vector = StudentDAO.selectAll(conn);

%>

<!DOCTYPE html>

<html lang="ko">

<head>

<meta charset="UTF-8">

<title>성적 관리 프로그램</title>

<link rel="stylesheet" href="css/style.css">

</head>

<body>

<h1>성적 관리 프로그램</h1>

<table>

<tr>

<td class="left">[<a href="input.html">학생데이터입력</a>]</td>

<td class="right"><%=vector.size() %>명</td>

</tr>

</table>

<table>

<caption>자바고등학교 3학년 2반 성적데이터</caption>

<thead>

<tr>

<th>학번</th>

<th>이름</th>

</tr>

</thead>

<tbody>

<%  

for(int i = 0 ; i < vector.size(); i++){ 

StudentDTO student = vector.get(i);

%>

<tr>

<td><%=student.getHakbun() %></td>

<td><a href="content.jsp?hakbun=<%=student.getHakbun()%>"><%=student.getIrum() %></a></td>

</tr>

<% }  %>

</tbody>

</table>

</body>

</html>

<%

DBClose.close(conn);

%>


content.jsp

<%@ page contentType="text/html;charset=utf-8" %>

<%@ page import="kr.co.javaexpert.libs.model.*" %>   

<%@ page import="java.sql.Connection" %>


<%

String hakbun = request.getParameter("hakbun");

hakbun = hakbun.trim();

String path = application.getRealPath("/security/dbinfo.properties");

DBConnection db = new DBConnection(path);

db.loadDriver();

db.setConnection();

Connection conn = db.getConnection();

StudentDTO student = StudentDAO.selectOne(conn, hakbun);

%>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>성적 데이터 내용 창</title>

<style>

table{

margin:auto;

width : 300px;

border-collapse: collapse;

}

th {

width:60px;

background-color:yellow;

}

th,td{

border:1px solid blue;

font-size:1.5em;

text-align:center;

}

</style>

</head>

<body>

<table>

<tr>

<th>학번</th>

<td><%=student.getHakbun() %></td>

</tr>

<tr>

<th>이름</th>

<td><%=student.getIrum() %></td>

</tr>

<tr>

<th>국어</th>

<td><%=student.getKor() %></td>

</tr>

<tr>

<th>영어</th>

<td><%=student.getEng() %></td>

</tr>

<tr>

<th>수학</th>

<td><%=student.getMat() %></td>

</tr>

<tr>

<th>전산</th>

<td><%=student.getEdp() %></td>

</tr>

<tr>

<th>총점</th>

<td><%=student.getTot() %></td>

</tr>

<tr>

<th>평균</th>

<td><%=student.getAvg() %></td>

</tr>

<tr>

<th>학점</th>

<td><%=student.getGrade() %></td>

</tr>

<tr>

<td colspan="2" align="center">

<input type="button" value="수정">&nbsp;&nbsp;

<input type="button" value="삭제">&nbsp;&nbsp;

<input type="button" value="목록으로 가기" onclick="javascript:location.replace('/SungjukMgmtV1/');">

</td>

</tr>

</table>

</body>

</html>

<%

DBClose.close(conn);

%>

3. pageContext

  - javax.servlet.jsp.PageContext 

  - 다른 8개의 기본객체를 생성 혹은 액세스 가능

  - 페이지간의 제어 즉 요청 재전송(RequestDispatcher) 가능

  - 페이지의 내부 영역(scope) 속성 설정 및 액세스

  - 주요메소드

    getXxx()

    include()

    forward()

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

pageContext은 요청 재전송 할 수있다.

pageContextDemo.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<%@ page import="java.io.IOException" %>

<%!

private void clientInfo(PageContext pc) throws IOException{

//9개의 내장객체를 사용할 수 없다.

ServletRequest sr = pc.getRequest();

HttpServletRequest request = (HttpServletRequest)sr;

JspWriter out = pc.getOut();

out.println("Client's IP = " + request.getRemoteAddr());

}

%>

<%

//_jspService() 에서는 9개의 내장객체를 사용할 수 있다.

clientInfo(pageContext);

%>

출력:

Client's IP = 0:0:0:0:0:0:0:1 

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

pageContextDemo1.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<body bgcolor='yellow'>

<h1>이 페이지는 사용자에게 보여지지 않는다.</h1>

<%

pageContext.forward("pageContextDemo2.jsp");

%>

</body>


pageContextDemo2.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<body bgcolor='green'>

<h1>이 페이지는 pageContextDemo2.jsp 입니다.</h1>

<hr>

<% pageContext.include("pageContextDemo3.jsp"); %>

</body>


pageContextDemo3.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<img src="images/jimin.jpg">

<hr>

<h1>이것은 include 될 페이지입니다.</h1>

//출력은 pageContextDemo1.jsp 를 실행하면 pageContextDemo2와 pageContextDemo3의 내용이 출력된다.

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

4. session

  - javax.servlet.http.HttpSession

  - page directive <%@ page 에서 session="true"일 경우에만 사용가능

  - 주요 메소드

     Object getAttribute(java.lang.String name)

     String getId()

     int getMaxInactiveInterval()

     void invalidate()

     isNew()

     void removeAttribute(java.lang.String name)   하나만 삭제할 때

     void setAttribute(java.lang.String name, java.lang.Object value)

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

sessiondemo.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8" session="true" %>

<%@ page import="java.util.Date" %>    


Session ID : <%=session.getId() %><br />

Session isNew : <%=session.isNew() %><br />

Session Creation Time : <%=new Date(session.getCreationTime()) %><br />

Session Last Time : <%=new Date(session.getLastAccessedTime()) %>

출력:

Session ID : 35BEBAA34E279FDC8E1984B46318828F

Session isNew : false

Session Creation Time : Wed Jun 18 10:18:24 KST 2014

Session Last Time : Wed Jun 18 10:46:44 KST 2014

//creation은 만들어진 시간이고 last time은 최근 접근한 시간.

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

sessiondemo1.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<%

String name = request.getParameter("name");

if(session.isNew() || session.getAttribute("event") == null){

//session 이 처음이라면

session.setAttribute("event", name);

session.setMaxInactiveInterval(30);   //30초 동안 세션정보유지

out.println(name + "님의 이름으로 이벤트를 등록했습니다");

}else{

//session 이 처음이 아니라면

String eventName = (String)session.getAttribute("event");

%>

        <%=eventName %>님은 이미 이벤트 등록되어 있습니다.

   <% } %>

출력:

http://localhost:8080/0618/sessiondemo1.jsp 처음에 접속하면 name은 null 상태이다.

http://localhost:8080/0618/sessiondemo1.jsp?name=조성모 접속하면 name 에 조성모가 들어오고, 이 세션은 30초간 유지한다.

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ


application은 모든 사용자들이 공유하려고, session은 이 사용자만 사용하려는 것이 다르다.

crossContext는 다른 폴더를 불러올수 있는지의 여부이다. <Context docBase="0617" path="/0617" crossContext="true" reloadable="true" source="org.eclipse.jst.jee.server:0617"/>

이렇게 crossContext를 true로 주어 사용할수 있게한다.

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

6. config

  - javax.servlet.ServletConfig

  - 서블릿의 환경설정에 대한 정보

  - config 객체는 WAS 당 한 개의 객체 생성해서 같은 컨테이너를 서비스하는 모든

    페이지는 같은 객체를 공유

  - 주요 메소드

    String getInitParameter(java.lang.String name)

    Enumeration<java.lang.String> getInitParameterNames()


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" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">

  <display-name>Welcome! 0618 Page...</display-name>

  <servlet>

  <servlet-name>configDemo</servlet-name>

  <jsp-file>/configDemo.jsp</jsp-file>

  <init-param>

  <param-name>DBURL</param-name>

  <param-value>jdbc:oracle:thin:@localhost:1521:orcl</param-value>

  </init-param>

  <init-param>

  <param-name>DBDRIVER</param-name>

  <param-value>oracle.jdbc.driver.OracleDriver</param-value>

  </init-param>

  <init-param>

  <param-name>DBID</param-name>

  <param-value>scott</param-value>

  </init-param>

  <init-param>

  <param-name>DBPWD</param-name>

  <param-value>tiger</param-value>

  </init-param>

  </servlet>

  <servlet-mapping>

  <servlet-name>configDemo</servlet-name>

  <url-pattern>/configDemo.jsp</url-pattern>

  </servlet-mapping>

</web-app>


configDemo.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<%@ page import="java.util.Enumeration" %>    

<%

Enumeration<String> enums = config.getInitParameterNames();

%>

<table border='1' cellpadding='0' cellspacing='0'>

<thead>

<tr>

<th>파라미터이름</th>

<th>파라미터값</th>

</tr>

</thead>

<tbody>

   <% while(enums.hasMoreElements()){ 

    String name = enums.nextElement();

   %>

<tr>

<td><%=name %></td>

<td><%=config.getInitParameter(name) %></td>

</tr>

<%} %>

</tbody>

</table>

출력:

파라미터이름 파라미터값 

DBPWD tiger 

fork false 

DBID scott 

xpoweredBy false 

DBURL jdbc:oracle:thin:@localhost:1521:orcl 

DBDRIVER oracle.jdbc.driver.OracleDriver 

jspFile /configDemo.jsp 

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

5. application

  - javax.servlet.ServletContext

  - 하나의 웹 어플리케이션 정보를 저장

  - 웹 어플리케이션이 실행되는 서버측의 설정정보와 자원에 대해 정보를 제공하거나

    어플리케이션이 실행되는 동안에 발생하는 이벤트 혹은 로그를 기록등의 관련 기능

  - 어플리케이션 당 하나의 객체생성

  - 어플리케이션안에서의 공유변수, 혹은 전역변수 역할

  - 주로 방문자 수같은 카운터 측정시 사용

  - 주요 메소드

    String getServerInfo()

    String getMimeType(java.lang.String file)

    URL getResource(java.lang.String path) throws java.net.MalformedURLException

    String getRealPath(java.lang.String path)

    ServletContext getContext(java.lang.String uripath)

    void log(java.lang.String msg)

    String getInitParameter(java.lang.String name)

    Enumeration<java.lang.String> getInitParameterNames()

dbinfo.properties

DBDRIVER=oracle.jdbc.driver.OracleDriver

DBURL=jdbc:oracle:thin:@192.168.89.130:1521:orcl

DBUSER=scott

DBPWD=tiger

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" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">

  <display-name>Welcome! 0618 Page...</display-name>

  

  <context-param>

  <description>데이터베이스 연결 정보 파일</description>

  <param-name>dbinfo</param-name>

  <param-value>d:\\Downloads\\dbinfo.properties</param-value>

  </context-param>

</web-app>


applicationdemo.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<%@ page import="java.io.File, java.io.FileInputStream, java.io.IOException" %>

<%@ page import="java.util.Properties" %>

<%

String path = application.getInitParameter("dbinfo");

File file = new File(path);

Properties info = new Properties();

try{

info.load(new FileInputStream(file));

}catch(IOException ex){

out.println("File Not Found");

}

%>

DBURL : <%=info.getProperty("DBURL") %> <br />

DBDRIVER : <%=info.getProperty("DBDRIVER") %> <br />

DBUSER : <%=info.getProperty("DBUSER") %> <br />

DBPWD : <%=info.getProperty("DBPWD") %> <br />

출력:

DBURL : jdbc:oracle:thin:@192.168.89.130:1521:orcl 

DBDRIVER : oracle.jdbc.driver.OracleDriver 

DBUSER : scott 

DBPWD : tiger 


config는 sevlet의 init-param 에 써주고

application은 context-param 에 적는다.

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

application의 log

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<%

application.log("Hello, World");

%>

이렇게하면 console창에서 INFO: Hello, World 이렇게 출력을 한다.

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

방문자 수 이미지로 출력

count.txt 는 누적된 숫자가 기록되는 곳이고,

count.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<%@ page import="java.io.RandomAccessFile" %>

<%@ page import="java.io.File, java.io.IOException" %>


<%

String path = application.getRealPath("/count.txt");

File file = new File(path);

RandomAccessFile raf = new RandomAccessFile(file, "rw");

String strCount = raf.readLine();  //"12345"

int count = Integer.parseInt(strCount.trim());

strCount = String.valueOf(++count);

%>

방문자 수 : 

<%   

     for(int i = 0; i < (6 - strCount.length()) ; i++){

%>

<img src="images/0.gif">

<%

     }

for(int i = 0 ; i < strCount.length() ; i++){

%>

        <img src="images/<%=strCount.charAt(i) %>.gif">

        

<% }

raf.seek((long)0);

raf.writeBytes(strCount);

raf.close();

%>

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

7. out

  - javax.servlet.jsp.JspWriter

  - JSP 페이지 결과를 웹 브라우저(웹 서버)에게 전송해 주는 출력 스트림

  - JSP 페이지가 웹브라우저에게 보내는 모든 정보는 out 객체를 통해서 전달된다.

  - 주요 메소드

    void clear() throws java.io.IOException

    void clearBuffer() throws java.io.IOException

    void close() throws java.io.IOException

    void flush() throws java.io.IOException

    int getBufferSize()

    int getRemaining()

    boolean isAutoFlush()

    print(), println()


outdemo.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8" buffer="4kb" %>

<%

for(int i = 1 ; i < 101 ; i++){

out.print(i);

}

%>

<hr>

버퍼 사이즈 : <%= out.getBufferSize() %><br />

남은 버퍼 사이즈 : <%=out.getRemaining() %><br />

플러쉬 여부 : <%=out.isAutoFlush() %>

출력:

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 

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

버퍼 사이즈 : 4096

남은 버퍼 사이즈 : 3861

플러쉬 여부 : true

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

outdemo1.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<%

out.println("이 글자는 출력되지 않습니다.");

out.clearBuffer();

out.println("버퍼 사이즈 : " + out.getBufferSize());

out.flush();

%>

출력:

버퍼 사이즈 : 8192 

//clearBuffer가 글씨를 모두 삭제하므로 버퍼사이즈는 그대로.

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

8. page

  - java.lang.Object

9. exception

  - java.lang.Throwable


Scope

1. page scope  --> pageContext --> javax.servlet.jsp.PageContext

  - 현재 브라우저에 보여지는 웹 페이지 자체

  - 다른 페이지로 이동하면 정보가 사라진다.


2. request scope

  - 브라우저에게 요청하고 서버에서 응답까지의 범위를 의미

  - 사용자 입장에서 브라우저에서 보여지는 정보를 저장

  - 다른 페이지로 이동하더라도 forward, include 하면 정보를 계속 저장 가능


3. session scope

  - 브라우저의 Lifecycle 과 동일한 scope 를 가짐

  - 브라우저를 종료하지 않으면 여러 페이지에서도 정보를 기억

  - 다른 브라우저를 사용하면 정보를 기억하지 않는다.

  - 하지만, 일반적으로는 session time-out 을 이용한다.


4. application scope

  - 하나의 웹 어플리케이션(context) 와 lifecycle 이 일치한다.

  - 웹 어플리케이션이 존재하는 동안 모든 서블릿과 모든 JSP 에서 접근 가능

  - WAS를 재시작하거나, 해당 Context를 reload하면 소멸


scopedemo.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<%-- page scope --%>

<%

pageContext.setAttribute("pageScope", "pageValue");

request.setAttribute("requestScope", "requestValue");

%>


pageValue = <%=pageContext.getAttribute("pageScope") %><br />

requestValue = <%=request.getAttribute("requestScope") %><br />

<%

pageContext.forward("scopedemo1.jsp");

%>

scopedemo1.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

    

pageValue = <%=pageContext.getAttribute("pageScope") %><br />

requestValue = <%=request.getAttribute("requestScope") %><br />


출력:

pageValue = null

requestValue = requestValue

만약 scopedemo1.jsp로 forward하지 않으면 

출력은 아래와 같을 것이다.

pageValue = pageValue

requestValue = requestValue

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

scopdemo.html

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Scope and Attribute demo</title>

</head>

<body>

<form method="post" action="applicationScopeDemo.jsp">

<table border="1">

<tr><td colspan="2">Application Scope에 저장할 내용</td></tr>

<tr>

<td>이름</td>

<td><input type="text" name="irum"></td>

</tr>

<tr>

<td>Email</td>

<td><input type="text" name="email"></td>

</tr>

<tr>

<td>ID</td>

<td><input type="text" name="userid"></td>

</tr>

<tr>

<td colspan="2" align='center'>

<input type="submit" value="전송"></td>

</tr>

</table>

</form>

</body>

</html>


applicationdemo.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<% request.setCharacterEncoding("utf-8");  %>


<%

String irum = request.getParameter("irum");

String email = request.getParameter("email");

String id = request.getParameter("userid");


if(irum != null && email != null && id != null){

application.setAttribute("irum", irum);

application.setAttribute("email", email);

application.setAttribute("id", id);

}

%>

<h2><%=irum %>(<%=email %>)님! 반갑습니다.<br />

<%=irum %>님의 아이디는 <%=id %>입니다.</h2>

<form method="post" action="sessionScopeDemo.jsp">

<table border="1">

<tr><td colspan="2">Session Scope에 저장할 내용</td></tr>

<tr>

<td>전화번호</td>

<td><input type="tel" name="tel"></td>

</tr>

<tr>

<td>우편번호</td>

<td><input type="text" name="zipcode"></td>

</tr>

<tr>

<td>집주소</td>

<td><input type="text" name="address"></td>

</tr>

<tr>

<td colspan="2" align='center'>

<input type="submit" value="전송"></td>

</tr>

</table>

</form>


sessionscopedemo.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<%-- session scope --%>

<% request.setCharacterEncoding("utf-8");   %>


<%

String tel = request.getParameter("tel");

String zipcode = request.getParameter("zipcode");

String address = request.getParameter("address");

session.setAttribute("tel", tel);

session.setAttribute("zipcode", zipcode);

session.setAttribute("address", address);

String irum = (String)application.getAttribute("irum");

%>

<%=irum %>님의 소중한 정보가 잘 저장됐습니다.<br />

확인하기 위해 <a href="scopedemo2.jsp">여기</a>를 클릭해 주세요.


scopedemo2.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<%-- application scope & session scope 확인하기 --%>

<table border="1">

<tr><td colspan="2">Application Scope Information</td></tr>

<tr>

<td>이름</td>

<td><%=(String)application.getAttribute("irum") %></td>

</tr>

<tr>

<td>Email</td>

<td><%=(String)application.getAttribute("email") %></td>

</tr>

<tr>

<td>ID</td>

<td><%=(String)application.getAttribute("id") %></td>

</tr>

</table>

<hr>

<table border="1">

<tr><td colspan="2">Session Scope Information</td></tr>

<tr>

<td>전화번호</td>

<td><%=(String)session.getAttribute("tel") %></td>

</tr>

<tr>

<td>우편번호</td>

<td><%=(String)session.getAttribute("zipcode") %></td>

</tr>

<tr>

<td>집주소</td>

<td><%=(String)session.getAttribute("address") %></td>

</tr>

</table>

//session scope는 브라우저를 x해서 재실행하면 초기화되고, application scope는 tomcat을 재시작했을 때 정보가 초기화된다.

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

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

Action Tag


1. <jsp:forward>

   1)

      ServletContext context = this.getServletContext();

      RequestDispatcher rd = context.getRequestDispatcher("/servlet/Hello");

      rd.forward(req, res);

   2)

     <% pageContext.forward("a.jsp"); %>

   3)

      <jsp:forward page="a.jsp"/>

      

   <jsp:forward page="moveTo.jsp">

       <jsp:param name="irum" value="조성모" />

       <jsp:param name="age" value="28" />

   </jsp:forward>


   <jsp:forward page="moveTo.jsp?irum=조성모&age=28" />




2. <jsp:include>

3. <jsp:param>

4. <jsp:useBean>

5. <jsp:getProperty>

6. <jsp:setProperty>

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

forward.html

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>

</head>

<body>

<form method="post" action="forwarddemo.jsp">

이름 : <input type="text" name="irum"><br />

나이 : <input type="number" name="age"><br />

아이디 : <input type="text" name="userid"><br />

<input type="submit" value="전송">

</form>

</body>

</html>


forwarddemo.hsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<%

request.setCharacterEncoding("utf-8");


    String irum = request.getParameter("irum");

    int age = Integer.parseInt(request.getParameter("age"));

    String userid = request.getParameter("userid");


    if(age < 10){

%> 

    <jsp:forward page="kid.jsp" />

    <% }else if(age >= 10 && age < 19){ %>

    <jsp:forward page="teen.jsp" />

    <% }else{ %>

    <jsp:forward page="adult.jsp">

    <jsp:param name="irum" value="<%=irum %>" />

    <jsp:param name="userid" value="<%=userid %>" />

    </jsp:forward>

    <% } %>

    

    kid.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<body bgcolor='yellow'>

<h1>여기는 kid.jsp 페이지 입니다.</h1>

</body>


teen.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<body bgcolor='green'>

<h1>여기는 teen.jsp 페이지입니다.</h1>

</body>


adult.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<body bgcolor='red'>

<h1>여기는 성인 사이트 입니다.</h1>

이름 : <%=request.getParameter("irum") %><br />

아이디 : <%=request.getParameter("userid") %>

</body>


kid.jsp를 가든 teen.jsp를 가든 어디로 가든 url은 forwarddemo.jsp 로 표시되고 있다.

속성을 가지고갈 때는 param 을 쓴다.

버츄얼 우분투 켜서

cd /usr/local/tomcat7/conf

sudo gedit server.xml 들어가서 0616 폴더 path 추가.

WebHome 폴더로 이동해서 sudo mkdir 0616

cd 0616 들어가서 WEB-INF 폴더만들어주고,

0616폴더에 web.xml을 만들어줌.

web.xml

<?xml version="1.0" encoding="ISO-8859-1"?>




<web-app xmlns="http://java.sun.com/xml/ns/javaee"


  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"


  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee


                      http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"


  version="3.0"


  metadata-complete="true">




  <display-name>Welcome to 0616 Web Project </display-name>


 


</web-app>

해서 만들어주고, 어제했던 jsp 파일들 가져와서 0616폴더에서

sudo cp /home/mino/Desktop/*.jsp .

sudo chmod 755 *.*

해주고 서비스를 올려주면

sudo /usr/local/tomcat7/bin/startup.sh

sudo service httpd start

준비작업 끝.

http://localhost/0616/test.jsp 들어가지나 확인.

/usr/local/tomcat7/work/Catalina/localhost/0616/org/apache/jsp 폴더에서 jsp의 java 파일과 class파일이 생성된 것을 볼 수 있다.

버츄얼우분투 종료.


오라클 깔려있는 버추얼 centos

오라클 start 해주고,

su - oracle

tnslsnr start

lsnrctl start

sqlplus /nolog

connsys as sysdba

startup;

conn scott/tiger

select count(*) from zipcode;

---------

윈도우즈 EclipseEE 실행해서

밑에 Data source Explorer 에서

Database Connections 우측버튼 New  해서

Oracle 선택해서 이름은 My Oracle   해서 next

New Driver Definition 인 작은 아이콘 눌러서

Oracle Thin Driver 의 버전 11을 눌러서

Jar List 탭눌러서 기존14로 되어있는 것 삭제해서

add jar 해서 ojdbc.jar 선택함.

properties 탭에서 connection URL 을 jdbc:oracle:thin:@192.168.89.130:1521:orcl(아이피는 centos의 아이피)

Driver Class 는 oracle.jdbc.driver.OracleDriver 로하고,

User ID 는 scott , Password 는 tiger 로 해서 OK 누름. finish .

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

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

2. Scriptlet    <% Java Codes %>

3. Expression   <%= %>

expressiondemo.jsp

<%@ page contentType="text/html; charset=utf-8" %>

<%

java.util.Calendar now = java.util.Calendar.getInstance();

int year = now.get(java.util.Calendar.YEAR);

int month = now.get(java.util.Calendar.MONTH) + 1;

int day = now.get(java.util.Calendar.DATE);

int hour = now.get(java.util.Calendar.HOUR);

String str = "Hello, World";

%>

귀하가 방문한 날짜는 <span style='color:red;font-weight:bold'>

<%=year %> 년 <%=month %>월 <%=day %>일 입니다.

</span>

<p>오전/오후 ? <%=(hour >= 12) ? "PM" : "AM" %>

<%-- <p>str = <%=str; %></p>--%>

출력:

귀하가 방문한 날짜는 2014 년 6월 17일 입니다. 

오전/오후 ? AM 

//주의할 점은 <%=year; %> 이렇게  <%= %> 안에 세미콜른(;) 을 쓰면 안된다.

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

expressiondemo1.jsp

<%@ page contentType="text/html;charset=utf-8" %>


Math.PI = <%=Math.PI %><br />

Integer' Max value = <%=Integer.MAX_VALUE %><br />

1부터 10까지의 합 = <%=1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 %>

출력:

Math.PI = 3.141592653589793

Integer' Max value = 2147483647

1부터 10까지의 합 = 55

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

구구단

<%@ page contentType="text/html; charset=UTF-8" %>

<style>

table { border-collapse:collapse;

          margin:auto;

}

table td.a, th.a {

border:1px solid black;

}

</style>

<table>

<caption>구구단</caption>

<thead>

<tr>

<th class="a">단</th>

<th class="a">값</th>

</tr>

</thead>

<tbody>

<tr>

<td class="a">

<table>

<% for(int i = 2 ; i < 10 ; i++){ %>

<tr>

<th><span style="color:blue"><%=i %></span></th>

</tr>

<% } %>

</table>

</td>

<td class="a">

<table style="width:450px;border:0px;">

<% for(int i = 2; i < 10 ; i++){ %>

<tr>

<% for(int j = 1 ; j < 10 ; j++){ %>

<td style="text-align:center;width:50px"><%=i * j %></td>

<% } %>

</tr>

<%} %>

</table>

</td>

</tr>

</tbody>

</table>

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

4. Declaration    <%! %>

declarationdemo.jsp

<%@ page contentType="text/html; charset=UTF-8" %>

<body>

<%! String msg = null;  //member variable %>

<%!

//declaration 영역

public int checkLength(String str){   //member method

return str.length();

}

%>

<% msg = "Good Morning"; %>

<%=msg %>의 문자열의 길이는 <%=checkLength(msg) %> 자 입니다.

</body>

출력:

Good Morning의 문자열의 길이는 12 자 입니다

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

5. Directive 지시자, 지시어

expressiondemo.jsp 에서 import 하는 방법으로 page 사용.

<%@ page contentType="text/html; charset=utf-8" %>

<%@ page import="java.util.Calendar" %>

<%@ page import="java.util.Date, java.util.Enumeration, java.util.Stack" %>

<%@ page import="java.io.*" %>

<%

Calendar now = Calendar.getInstance();

int year = now.get(Calendar.YEAR);

int month = now.get(Calendar.MONTH) + 1;

int day = now.get(Calendar.DATE);

int hour = now.get(Calendar.HOUR);

String str = "Hello, World";

%>

귀하가 방문한 날짜는 <span style='color:red;font-weight:bold'>

<%=year %> 년 <%=month %>월 <%=day %>일 입니다.

</span>

<p>오전/오후 ? <%=(hour >= 12) ? "PM" : "AM" %>

<%-- <p>str = <%=str; %></p>--%>

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

pagedirectivedemo.jsp

<%@ page contentType="text/html; charset=UTF-8" %>

<%@ page import="java.util.Date, java.text.SimpleDateFormat" %>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>

</head>

<body>

<%

String pattern = "HH시 mm분 ss초";

SimpleDateFormat sdf = new SimpleDateFormat(pattern);

String str = sdf.format(new Date());

%>

귀하가 방문한 시간은 <span  style='color:red;font-size:1.5em;'><%=str %></span>입니다.

</body>

</html>

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

pagedirectivedemo1.jsp

<%@ page contentType="text/html; charset=UTF-8" buffer="4kb" %>

<%

for(int i = 1 ; i <= 2000 ; i++){

%>

<%=i %>&nbsp;&nbsp;&nbsp;

<% }  %>

출력하면 1~2000까지 버퍼가 4kb가 차면 내보내게된다. 

만약 autoFlush="false"를 추가하면 자동으로 내보내지 않기에 오류가 발생한다.

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

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

9개의 JSP 내장객체(implicit object, 기본객체)

  - 개발자들이 직접 생성해서 활용하는 객체말고, JSP 내부적으로 생성되어 활용되는 즉

     바로 사용할 수 있는 객체들

  - int, double 과 같은 primitive type처럼 선언없이 바로 사용가능

  - JSP Container(JSP Engine, WAS)가 제공하는 객체

  - 주의할 점

    1) 내장객체들은 _jspService() 메소드 안에서만 사용하는 지역변수개념이기 때문에, 

        declaration 에서는 사용할 수 없다.

    2) exception 객체는 page 지시자에서 isErrorPage = true 로 지정된 jsp 페이지에서만 사용가능


1. request

  - javax.servlet.ServletRequest or javax.servlet.http.HttpServletRequest

  - 클라이언트의 요청정보를 처리

  - 웹브라우저에서 JSP 페이지로 전달되는 정보의 집합

  - 한글 정보 확인

  - 주요메소드

    String getParameter(java.lang.String name)

    String[] getParameterValues(java.lang.String name)

    Enumeration<java.lang.String> getParameterNames()

    String getMethod()

    StringBuffer getRequestURL()

    String getRequestURI()

    String getProtocol()

    String getServerName()

    String getRemoteAddr()

    String getRemoteHost()

2. response

  - javax.servlet.ServletResponse or javax.servlet.http.HttpServletResponse

  - 클라이언트의 브라우저에 데이터 정보를 저장하는 역할

  - 응답정보를 Header 설정하거나 Redirect 등의 기능 제공

  - 주요메소드


  void setContentType(java.lang.String type)  : "text/html;charset=utf-8"

  String getCharacterEncoding()

  void addCookie(Cookie cookie)

  boolean containsHeader(java.lang.String name)

  void setHeader(java.lang.String name, java.lang.String value)

  void addHeader(java.lang.String name, java.lang.String value)

  void setStatus(int sc)

  void sendError(int sc, java.lang.String msg) throws java.io.IOException

  void sendRedirect(java.lang.String location) throws java.io.IOException

  String encodeRedirectURL(java.lang.String url)


3. pageContext

  - javax.servlet.jsp.PageContext 

  - 다른 8개의 기본객체를 생성 혹은 액세스 가능

  - 페이지간의 제어 즉 요청 재전송(RequestDispatcher) 가능

  - 페이지의 내부 영역(scope) 속성 설정 및 액세스

  - 주요메소드

    getXxx()

    include()

    forward()


4. session

  - javax.servlet.http.HttpSession

  - page directive <%@ page 에서 session="true"일 경우에만 사용가능

  - 주요 메소드

     Object getAttribute(java.lang.String name)

     String getId()

     int getMaxInactiveInterval()

     void invalidate()

     isNew()

     void removeAttribute(java.lang.String name)

     void setAttribute(java.lang.String name, java.lang.Object value)

     void setMaxInactiveInterval(int interval)

          

5. application

  - javax.servlet.ServletContext

  - 하나의 웹 어플리케이션 정보를 저장

  - 웹 어플리케이션이 실행되는 서버측의 설정정보와 자원에 대해 정보를 제공하거나

    어플리케이션이 실행되는 동안에 발생하는 이벤트 혹은 로그를 기록등의 관련 기능

  - 어플리케이션 당 하나의 객체생성

  - 어플리케이션안에서의 공유변수, 혹은 전역변수 역할

  - 주로 방문자 수같은 카운터 측정시 사용

  - 주요 메소드

    String getServerInfo()

    String getMimeType(java.lang.String file)

    URL getResource(java.lang.String path) throws java.net.MalformedURLException

    String getRealPath(java.lang.String path)

    ServletContext getContext(java.lang.String uripath)

    void log(java.lang.String msg)

    String getInitParameter(java.lang.String name)

    Enumeration<java.lang.String> getInitParameterNames()


6. config

  - javax.servlet.ServletConfig

  - 서블릿의 환경설정에 대한 정보

  - config 객체는 WAS 당 한 개의 객체 생성해서 같은 컨테이너를 서비스하는 모든

    페이지는 같은 객체를 공유

  - 주요 메소드

    String getInitParameter(java.lang.String name)

    Enumeration<java.lang.String> getInitParameterNames()


7. out

  - javax.servlet.jsp.JspWriter

  - JSP 페이지 결과를 웹 브라우저(웹 서버)에게 전송해 주는 출력 스트림

  - JSP 페이지가 웹브라우저에게 보내는 모든 정보는 out 객체를 통해서 전달된다.

  - 주요 메소드

    void clear() throws java.io.IOException

    void clearBuffer() throws java.io.IOException

    void close() throws java.io.IOException

    void flush() throws java.io.IOException

    int getBufferSize()

    int getRemaining()

    boolean isAutoFlush()

    print(), println()


8. page

  - java.lang.Object

9. exception

  - java.lang.Throwable


Scope

1. page scope  --> pageContext --> javax.servlet.jsp.PageContext

  - 현재 브라우저에 보여지는 웹 페이지 자체

  - 다른 페이지로 이동하면 정보가 사라진다.


2. request scope

  - 브라우저에게 요청하고 서버에서 응답까지의 범위를 의미

  - 사용자 입장에서 브라우저에서 보여지는 정보를 저장

  - 다른 페이지로 이동하더라도 forward, include 하면 정보를 계속 저장 가능


3. session scope

  - 브라우저의 Lifecycle 과 동일한 scope 를 가짐

  - 브라우저를 종료하지 않으면 여러 페이지에서도 정보를 기억

  - 다른 브라우저를 사용하면 정보를 기억하지 않는다.

  - 하지만, 일반적으로는 session time-out 을 이용한다.


4. application scope

  - 하나의 웹 어플리케이션(context) 와 lifecycle 이 일치한다.

  - 웹 어플리케이션이 존재하는 동안 모든 서블릿과 모든 JSP 에서 접근 가능

  - WAS를 재시작하거나, 해당 Context를 reload하면 소멸

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

Requestdemo.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<!DOCTYPE html>

<html lang="ko">

<head>

<meta charset="UTF-8">

<title>Insert title here</title>

</head>

<body>

<ul type="circle">Request Information

<li>Server Info : <%=request.getServerName() %></li>

<li>Server Port : <%=request.getServerPort() %></li>

<li>Context Name : <%=request.getContextPath() %></li>

<li>Request URI : <%=request.getRequestURI() %></li>

<li>Request URL : <%=request.getRequestURL() %></li>

<li>Client IP : <%=request.getRemoteAddr() %></li>

<li>Client Host Name : <%=request.getRemoteHost() %></li>

<li>Real path("/") : <%=request.getRealPath("/") %></li>

<li>Method : <%=request.getMethod() %></li>

<li>Protocol : <%=request.getProtocol() %></li>

</ul>

</body>

</html>


출력:

Request Information ◦Server Info : localhost

◦Server Port : 8080

◦Context Name : /0617

◦Request URI : /0617/requestdemo.jsp

◦Request URL : http://localhost:8080/0617/requestdemo.jsp

◦Client IP : 0:0:0:0:0:0:0:1

◦Client Host Name : 0:0:0:0:0:0:0:1

◦Real path("/") : D:\WebHome\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\0617\

◦Method : GET

◦Protocol : HTTP/1.1

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

회원가입 할 때 유용

member.html

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>회원가입</title>

</head>

<body>

<form method="post" action="member.jsp">

<fieldset>

<legend>가입 필수 정보</legend>

<p><label>이름 : <input type="text" required name="irum"></label></p>

<p><label>성별 : </label>

     <input type="radio" required name="gender" value="남자"><label>남자</label>&nbsp;&nbsp;

     <input type="radio" required name="gender" value="여자"><label>여자</label></p>

<p><label>Hobby : </label>

     <input type="checkbox" name="hobby" value="등산"><label>등산</label>&nbsp;&nbsp;

     <input type="checkbox" name="hobby" value="독서"><label>독서</label>&nbsp;&nbsp;

     <input type="checkbox" name="hobby" value="낚시"><label>낚시</label><br />

     <input type="checkbox" name="hobby" value="바둑"><label>바둑</label>&nbsp;&nbsp;

     <input type="checkbox" name="hobby" value="운동"><label>운동</label>&nbsp;&nbsp;

     <input type="checkbox" name="hobby" value="게임"><label>게임</label></p>

<p><label>C.P</label>

 <select name="cp1" required>

  <option>--선택--</option>

  <option value="010">010</option>

  <option value="011">011</option>

  <option value="016">016</option>

  <option value="019">019</option>

 </select> - <input type="text" name="cp2" required placeholder="1234-5678"></p>

   <p><label>Birthday : <input type="date" name="birthday"></label></p>

   <p><label>자기소개 : </label>

         <textarea rows="5" cols="30" name="self" required></textarea></p>

   <p><input type="submit" value="가입하기"></p>

</fieldset>

</form>

</body>

</html>


member.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<%

request.setCharacterEncoding("utf-8");   //항상 제일 먼저, POST 방식만

%>


이름 : <%=request.getParameter("irum") %><br />

성별 : <%=request.getParameter("gender") %><br />

<%

String [] array = request.getParameterValues("hobby");

String hobby = "";

for(int i = 0 ; i < array.length ; i++){

hobby += array[i] + ",";

}

%>

취미 : <%=hobby.substring(0, hobby.length() - 1) %><br />

핸드폰번호 : <%=request.getParameter("cp1") %> - <%=request.getParameter("cp2") %><br />

생년월일 : <%=request.getParameter("birthday") %><br />

자기 소개 : <%=request.getParameter("self") %>

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

요청 헤더 정보의 처리

requestdemo1.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<%@ page import="java.util.Enumeration" %>    

<ul>Request Header Information

<%

Enumeration<String> enums = request.getHeaderNames();

while(enums.hasMoreElements()){

String name = enums.nextElement();

%>

<li><%=name %> :

    <font color = 'blue'><%=request.getHeader(name) %></font></li>

<%

}

%>

출력:

Request Header Information 

accept : image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, */* 

accept-language : en-US,en;q=0.7,ko;q=0.3 

cache-control : no-cache 

user-agent : Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.2; Win64; x64; Trident/7.0) 

ua-cpu : AMD64 

accept-encoding : gzip, deflate 

host : localhost:8080 

connection : Keep-Alive 

cookie : JSESSIONID=674B703405F700185D99137002A1ABC4 

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

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

centos에 우편번호 테이블 한글로 넣기

버츄얼 centos 켜서

zipcode1.sql은 아래와같이 변경

CREATE TABLE zipcode (


SEQ INT(5) PRIMARY KEY,


ZIPCODE VARCHAR(7),


SIDO VARCHAR(20),


GUGUN VARCHAR(50),


DONG VARCHAR(100),


BUNJI VARCHAR(200)


) DEFAULT CHARACTER SET utf8;

su

gedit /etc/my.cnf 들어가서

제일 위에다가

  [client]

character-sets-dir = utf8

default-character-set = utf8

를 추가하고

[mysqld] 부분 밑에는

init_connect = SET collation_connection = utf8_general_ci

init_connect = SET NAMES utf8

character-set-server = utf8

collation-server=utf8_general_ci 

를 추가. 저장후 나온 다음에.

service mysqld restart

mysql -u root -p

use test;

ALTER database test default character set utf8; 해주고

source /home/mino/Desktop/zipcode1.sql

source /home/mino/Desktop/zipcode2.sql

commit;

select count(*) from zipcode;

select * from zipcode

where dong LIKE '%상하%';

sql gete 에서 character set을 utf-8로 바꿔서 접속.

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

라디오박스를 선택해서 바꾸기 버튼을 누르면 그 위치로 이동.

responsedemo.html

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>

<script>

window.onload = setup;

function setup(evt){

document.getElementById('btn').addEventListener("click", myclick, false);

}

function myclick(evt){

var array = document.getElementsByTagName('input');

for(var i = 1 ; i < array.length ; i++){

if(array[i].checked) window.location.href = array[i].value;

}

}

</script>

</head>

<body>

<div style='text-align:center'>사용하시는 검색엔진은?<br />

<form>

<input type="button" value="바꾸기" id="btn">

<input type="radio" id="search" name="search" 

    value="http://www.naver.com">네이버<br />

<input type="radio" id="search" name="search" 

    value="http://www.daum.net">다음<br />

<input type="radio" id="search" name="search" 

    value="http://www.google.co.kr">구글<br />

<input type="radio" id="search" name="search" 

value="http://www.nate.com">네이트<br />

</form>

</div>

</body>

</html>

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

위 코드를 post로 해서 jsp파일 써서

responsedemo.html

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>

</head>

<body>

<div style='text-align:center'>사용하시는 검색엔진은?<br />

<form method="post" action="responsedemo.jsp">

<input type="submit" value="바꾸기" id="btn"><br />

<input type="radio" id="search" name="search" 

    value="http://www.naver.com">네이버<br />

<input type="radio" id="search" name="search" 

    value="http://www.daum.net">다음<br />

<input type="radio" id="search" name="search" 

    value="http://www.google.co.kr">구글<br />

<input type="radio" id="search" name="search" 

value="http://www.nate.com">네이트<br />

</form>

</div>

</body>

</html>

responsedemo.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<%

String search = request.getParameter("search");   //serach의 값을 이용해 redirect

response.sendRedirect(search);

%>

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

일반 이클립스로 실행.

RequestPacketInfo.java

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.net.ServerSocket;

import java.net.Socket;

public class RequestPacketInfo {

private ServerSocket server;

private Socket client;

RequestPacketInfo(){

try {

this.server = new ServerSocket(80);

System.out.println("Server Ready...");

client = server.accept();

} catch (IOException e) {

System.out.println(e.toString());

}

}

private void service(){

BufferedReader br = null;

try {

br = new BufferedReader(new InputStreamReader(

                           this.client.getInputStream()));

String str = null;

while((str = br.readLine()) != null){

System.out.println(str);

}

} catch (IOException e) {

System.out.println(e.toString());

}

}

public static void main(String[] args) {

new RequestPacketInfo().service();

}


}

브라우저에서 localhost로 접속하면 이클립스에 접속정보.

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

ResponseInfo.java

import java.io.IOException;

import java.net.URL;

import java.net.URLConnection;

import java.util.Iterator;

import java.util.List;

import java.util.Map;

import java.util.Scanner;

import java.util.Set;


public class ResponseInfo {

public static void main(String[] args) throws IOException{

Scanner scan = new Scanner(System.in);

System.out.print("URL : ");

String urlStr = scan.next().trim();

URL url = new URL(urlStr);

URLConnection conn = url.openConnection();

Map<String, List<String>> map = conn.getHeaderFields();

Set<String> keys = map.keySet();

Iterator<String> iters = keys.iterator();

while(iters.hasNext()){

String key = iters.next();

System.out.print(key + " --> ");

List<String> list = map.get(key);

for(int i = 0 ;i < list.size() ; i++){

System.out.print(list.get(i) + ",");

}

System.out.println();

}

}


}

출력:

URL : http://www.naver.com

Transfer-Encoding --> chunked,

null --> HTTP/1.1 200 OK,

Cache-Control --> no-cache, no-store, must-revalidate,

Server --> nginx,

Connection --> close,

Vary --> Accept-Encoding,User-Agent,

Pragma --> no-cache,

P3P --> CP="CAO DSP CURa ADMa TAIa PSAa OUR LAW STP PHY ONL UNI PUR FIN COM NAV INT DEM STA PRE",

Date --> Tue, 17 Jun 2014 08:10:17 GMT,

Content-Type --> text/html; charset=UTF-8,

JSP의 9가지의 구성요소


1. comment

a. HTML <-- -->    브라우저 소스보기에서 보인다.

b. Java //, /* ~ */   서블릿에서는 코드가 보인다.(.java파일을 보면) 

c. JSP <%--  --%>   브라우저의 소스보기나, .java파일 모두에서 안보인다. tomcat은 코딩조차 하지않음.

2. Scriptlet

<% Java Codes %>

3. Expression

<%= %>

4. Declaration

<%! %>

5. Directive 지시자, 지시어

<%@ %>

a. page

b. include

c. taglib

6. Implcit object(내장객체, 기본객체) --> 9가지

7. Action Tag

<jsp: >

a. include

b. forward

c. usebean

d. getProperty

e. setProperty

8. Custom Tag

<aaa:bbb />

9. EL & JSTL

Expression Language, JSP Standard Tag Library

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

window-web browser-default system web browser 로 하면 실행시 기본 인터넷으로 설정한 브라우저로 열림

window-preference 에서 Web의 CSS Files , HTML Files, JSP Files 의 encoding을 모두 UTF-8로 변경.

comment 예제

<%@ page contentType="text/html" %>

<body>

<%-- 

<p>Hello, World</p>

<!-- <p>Javascript</p> -->

<p>Java Server Page</p>

<hr>

<%

String str = "Hello, World";

str += "안녕하세요";

out.println("<font face='Arial' size='5' color='red'>");

out.println(str + "</font>");

%>

--%>


</body>


한글 할 때

<%@ page contentType="text/html; charset=utf-8" %>

<font size='7' face='Arial' color='green'>Hello, 한글</font>

//꼭 위처럼 해줘야 한글 가능.

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

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

버츄얼 centos 켜서

www.cmake.org 접속. resources-download 클릭. cmake-3.0.0.tar.gz 다운.

다운받은 폴더 이동해서  tar xvfz cmake*.tar.gz  알집 풀어주고,

cd cmake-3.0.0

su 로 루트계정으로 바꿔주고

gcc --version 으로 gcc가 깔려있는지 확인하고 없으면 다음을 깔아줌.

yum install gcc

yum install gcc-c++

./bootstrap

gmake

gmake install

이상으로 cmake 설치 끝.

http://www.mysql.com/ 접속. Downloads 탭에서

MySQL Community Edition 의 Downloads 클릭.

MySQL Community Server 클릭.

MySQL Community Server 5.6.19 에서 select Platform: 에서 Source Code 선택.

Generic Linux (Architecture Independent), Compressed TAR Archive 의 Download 클릭. Download 해서.

다운받은 폴더이동해서

tar xvfz mysql*.tar.gz

cd mysql-5.6.19

cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DWITH_EXTRA_CHARSETS=all -DMYSQL_DATADIR=/usr/local/mysql/data \

> -DENABLED_LOCAL_INFILE=1  \

> -DWITH_INNOBASE_STORAGE_ENGINE=1  \

> -DMYSQL_UNIX_ADDR=/tmp/mysql.sock  \

> -DSYSCONFDIR=/etc  \

> -DDEFAULT_CHARSET=utf8  \

> -DDEFAULT_COLLATION=utf8_general_ci  \

> -DMYSQL_TCP_PORT=3306

다되면 figuring incomplete, errors occurred! 이렇게 나오는 것을 확인한뒤

yum install ncurses-devel

rm CMakeCache.txt 하고 y

cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DWITH_EXTRA_CHARSETS=all -DMYSQL_DATADIR=/usr/local/mysql/data -DENABLED_LOCAL_INFILE=1  -DWITH_INNOBASE_STORAGE_ENGINE=1  -DMYSQL_UNIX_ADDR=/tmp/mysql.sock  -DSYSCONFDIR=/etc  -DDEFAULT_CHARSET=utf8  -DDEFAULT_COLLATION=utf8_general_ci  -DMYSQL_TCP_PORT=3306

위에서 했던 것을 다시 해줌.

make

make install

cd /usr/local  에서 ls보면 mysql 이 있다.

useradd -M -s /bin/false mysql    그룹을 만들지않고 유저만 만들어줌.false를 줌으로써 홈을 만들어주지않음.

cd mysql

cd support-files

cp my-default.cnf /etc/my.cnf  하고 y

gedit /etc/my.cnf 들어가서

# basedir = ..... 부분부터 아래처럼 바꿔줌.

basedir = /usr/local/mysql

datadir = /usr/local/mysql/data

port = 3306

해서 저장하고 나옴.

cd ..

chown -R mysql .

cd scripts

./mysql_install_db \

> --defaults-file=/etc/my.cnf \

> --user=mysql \

> --basedir=/usr/local/mysql \

> --datadir=/usr/local/mysql/data

해서 DB를 인스톨한다.

gedit /etc/profile 들어가서 마지막 줄에 

export PATH=$PATH:/usr/local/mysql/bin 를 추가. 저장 후 나오고.

source /etc/profile

/usr/local/mysql/bin/mysqld_safe &  하면 mysql safe 가 시작된다.

ctrl+c 로 나와주고

cd ..

cd support-files

cp mysql.server /etc/init.d/mysqld

chkconfig --add mysqld

chkconfig --list | grep mysqld

이렇게 등록을 해줫으니 mysql의 서비스를 올릴 때는 mysqld 의 이름으로 켜주고 꺼주면 됨.

service mysqld status 로 mysql 서비스 상태확인.

service mysqld stop

service mysqld start

mysqld  하면 mysql에 들어가짐.

quit

mysqladmin -u root password javamysql  비번설정하고

mysql -u root -p javamysql

select user, host, password FROM mysql.user

그럼 비번 설정이 안된것이 두개 있음 이거 두개 지움


DELETE FROM mysql.user WHERE user='';


UPDATE mysql.user SET password=password('javamysql') WHERE user='root';

flush privileges;

quit;


mysql -u root -p 


GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'javamysql';



flush privileges;

방화벽 열어서 포트를 3306 번 열어준다. apply 해주고 나옴.

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

dbinfo.properties

DBDRIVER=oracle.jdbc.driver.OracleDriver

DBURL=jdbc:oracle:thin:@192.168.246.128:1521:orcl

DBUSER=scott

DBPWD=tiger


insert.html

<!doctype html>

<html lang="en">

 <head>

  <meta charset="UTF-8">

  <title>열차 좌석 예매 페이지</title>

  <style>

h1{text-align:center;}

hr{width:60%;}

table{margin:auto;border-collapse:collapse; border:1px solid orange;}

th,td{ border: 1px solid white;padding:5px;}

th{font-size:1.2em; color :  white; background-color:blue;width:150px;}

  </style>

  <link rel="stylesheet" href='/Korail/css/bootstrap.css'>

 </head>

 <body>

<h1>열차 좌석 예매 페이지</h1>

<hr>

<form method="post" action="/Korail/servlet/Insert">

<table>

<tr>

<th>열차좌석코드 : </th>

<td><input type="text" name="tscode" required autofocus></td>

</tr>

<tr>

<th>장소코드 : </th>

<td><input type="text" name="rcode" required></td>

</tr>

<tr>

<th>주민등록번호 : </th>

<td><input type="text" name="min1" required maxlength="6"> - <input type="text" name="min2" required maxlength="7"></td>

</tr>

<tr>

<th>할증코드 : </th>

<td><input type="text" name="dcode" required></td>

</tr>

<tr>

<td colspan="2"></td>

</tr>

<tr>

<td colspan="2" align="center">

<input type="submit" value="예약하기" class="btn btn-info">&nbsp;&nbsp;&nbsp;

<input type="reset" value="취소하기" class="btn btn-warning">

</td>

</tr>

</table>

</form>

 </body>

</html>


model 패키지

DBClose.java

package model;


import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;


public class DBClose {

public static void close(Connection conn){

try {

if(conn != null) conn.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

}


DBConnection.java

package model;


import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;

import java.util.Properties;


public class DBConnection {

public static Connection getConnection(String filename){

Properties info = new Properties();

Connection conn = null;

try {

info.load(new FileInputStream(filename + "dbinfo.properties"));

Class.forName(info.getProperty("DBDRIVER"));

conn = DriverManager.getConnection(

                          info.getProperty("DBURL"), 

                          info.getProperty("DBUSER"), 

                          info.getProperty("DBPWD"));

System.out.println("Connection Success");

} catch (FileNotFoundException e) {

System.out.println("File Not Found");

} catch (IOException e) {

e.printStackTrace();

} catch(ClassNotFoundException e){

System.out.println("Class Not Found");

} catch(SQLException e){

System.out.println("Connection Failure");

}

return conn;

}

}


DiscountDTO.java

package model;


public class DiscountDTO {

private String dcode;

private String type;

private String percent;

public String getDcode() {

return dcode;

}

public void setDcode(String dcode) {

this.dcode = dcode;

}

public String getType() {

return type;

}

public void setType(String type) {

this.type = type;

}

public String getPercent() {

return percent;

}

public void setPercent(String percent) {

this.percent = percent;

}

}

RegionDTO.java

package model;


public class RegionDTO {

private String rcode;

private String rname;

private String km;

public String getRcode() {

return rcode;

}

public void setRcode(String rcode) {

this.rcode = rcode;

}

public String getRname() {

return rname;

}

public void setRname(String rname) {

this.rname = rname;

}

public String getKm() {

return km;

}

public void setKm(String km) {

this.km = km;

}

}

TrainDTO.java

package model;


public class TrainDTO {

private String no; // 입력번호

private String region; // 지역

private String gender; // 성별

private String tname; // 열차명

private String sname; // 좌석

private String type; // 할증종류

private String discost; // 할인액

private String totcost; // 차비

public TrainDTO() {}

public TrainDTO(String no, String region, String gender, String tname,

String sname, String type) {

this.no = no; // 입력 순서

this.region = region; // 지역 코드가 들어감

this.gender = gender; // 성별

this.tname = tname; // 열차 코드가 들어감

this.sname = sname; // 좌석 코드가 들어감

this.type = type; // 할증 코드가 들어감

}


public String getNo() {

return no;

}


public void setNo(String no) {

this.no = no;

}


public String getRegion() {

return region;

}


public void setRegion(String region) {

this.region = region;

}


public String getGender() {

return gender;

}


public void setGender(String gender) {

this.gender = gender;

}


public String getTname() {

return tname;

}


public void setTname(String tname) {

this.tname = tname;

}


public String getSname() {

return sname;

}


public void setSname(String sname) {

this.sname = sname;

}


public String getType() {

return type;

}


public void setType(String type) {

this.type = type;

}


public String getDiscost() {

return discost;

}


public void setDiscost(String discost) {

this.discost = discost;

}


public String getTotcost() {

return totcost;

}


public void setTotcost(String totcost) {

this.totcost = totcost;

}

}


TsDTO.java

package model;


public class TsDTO {

private String tcode;

private String tname;

private String scode;

private String sname;

public String getTcode() {

return tcode;

}

public void setTcode(String tcode) {

this.tcode = tcode;

}

public String getTname() {

return tname;

}

public void setTname(String tname) {

this.tname = tname;

}

public String getScode() {

return scode;

}

public void setScode(String scode) {

this.scode = scode;

}

public String getSname() {

return sname;

}

public void setSname(String sname) {

this.sname = sname;

}

}


CostDTO.java

package model;


public class CostDTO {

private String tname;

private String seat;

private String kcost;

public String getTname() {

return tname;

}

public void setTname(String tname) {

this.tname = tname;

}

public String getSeat() {

return seat;

}

public void setSeat(String seat) {

this.seat = seat;

}

public String getKcost() {

return kcost;

}

public void setKcost(String kcost) {

this.kcost = kcost;

}

}

TrainDAO.java

package model;


import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import java.util.Vector;


public class TrainDAO {

public static Vector<TrainDTO> selectAll(Connection conn)

throws SQLException {

Statement stmt = conn.createStatement();

ResultSet rs = stmt.executeQuery("SELECT * FROM DISTABLE ORDER BY gender ASC");

Vector<TrainDTO> vector = new Vector<TrainDTO>(1,1);

while(rs.next()){

TrainDTO train = new TrainDTO();

train.setNo(rs.getString("no"));

train.setRegion(rs.getString("region"));

train.setGender(rs.getString("gender"));

train.setTname(rs.getString("tname"));

train.setSname(rs.getString("sname"));

train.setType(rs.getString("type"));

train.setDiscost(rs.getString("discost"));

train.setTotcost(rs.getString("totcost"));

vector.addElement(train);

}

if(rs != null) rs.close();

if(stmt != null) stmt.close();

return vector;

}

public static void insert(Connection conn, TrainDTO train)

throws SQLException {

StringBuffer sb = new StringBuffer();

sb.append("INSERT INTO DISTABLE VALUES(?,?,?,?,?,?,?,?)");

PreparedStatement pstmt = conn.prepareStatement(sb.toString());

pstmt.setString(1, train.getNo());

pstmt.setString(2, train.getRegion());

pstmt.setString(3, train.getGender());

pstmt.setString(4, train.getTname());

pstmt.setString(5, train.getSname());

pstmt.setString(6, train.getType());

pstmt.setString(7, train.getDiscost());

pstmt.setString(8, train.getTotcost());

pstmt.executeUpdate();

if(pstmt != null) pstmt.close();

}

}


DataDAO.java

package model;


import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import java.util.Vector;


public class DataDAO {

public static Vector<Object> selectAll(Connection conn)

throws SQLException {

Vector<Object> vector = new Vector<Object>(1,1);

System.out.println(conn);

// 열차좌석코드 테이블

Statement stmt = conn.createStatement();

System.out.println(stmt);

ResultSet rs = stmt.executeQuery("SELECT * FROM TRAIN");

System.out.println(rs);

Vector<TsDTO> tsVector = new Vector<TsDTO>(1,1);

while(rs.next()){

TsDTO ts = new TsDTO();

ts.setTcode(rs.getString("TCODE"));

ts.setTname(rs.getString("TNAME"));

ts.setScode(rs.getString("SCODE"));

ts.setSname(rs.getString("SNAME"));

tsVector.addElement(ts);

}

vector.add(tsVector);

if(rs != null) rs.close();

if(stmt != null) stmt.close();

// 장소코드 테이블

stmt = conn.createStatement();

rs = stmt.executeQuery("SELECT * FROM REGION");

Vector<RegionDTO> regionVector = new Vector<RegionDTO>(1,1);

while(rs.next()){

RegionDTO region = new RegionDTO();

region.setRcode(rs.getString("RCODE"));

region.setRname(rs.getString("RNAME"));

region.setKm(rs.getString("KM"));

regionVector.addElement(region);

}

vector.add(regionVector);

if(rs != null) rs.close();

if(stmt != null) stmt.close();

// 단가 테이블

stmt = conn.createStatement();

rs = stmt.executeQuery("SELECT * FROM COST");

Vector<CostDTO> costVector = new Vector<CostDTO>(1,1);

while(rs.next()){

CostDTO cost = new CostDTO();

cost.setTname(rs.getString("TNAME"));

cost.setSeat(rs.getString("SEAT"));

cost.setKcost(rs.getString("KCOST"));

costVector.addElement(cost);

}

vector.add(costVector);

if(rs != null) rs.close();

if(stmt != null) stmt.close();

// 할인율 테이블

stmt = conn.createStatement();

rs = stmt.executeQuery("SELECT * FROM DISCOUNT");

Vector<DiscountDTO> discountVector = new Vector<DiscountDTO>(1,1);

while(rs.next()){

DiscountDTO discount = new DiscountDTO();

discount.setDcode(rs.getString("DCODE"));

discount.setType(rs.getString("TYPE"));

discount.setPercent(rs.getString("PERCENT"));

discountVector.addElement(discount);

}

vector.add(discountVector);

if(rs != null) rs.close();

if(stmt != null) stmt.close();

return vector; // 전체 데이터 전달(tsVector, regionVector, costVector, discountVector)

}

}


Calc.java

package model;


import java.util.Vector;


public class Calc {

private Vector<Object> dataVector;

private TrainDTO train;

public Calc(Vector<Object> dataVector, TrainDTO train){

this.dataVector = dataVector;

this.train = train;

}

public void calc(){

Vector<TsDTO> tsVector = (Vector<TsDTO>)dataVector.get(0);

Vector<RegionDTO> regionVector = (Vector<RegionDTO>)dataVector.get(1);

Vector<CostDTO> costVector = (Vector<CostDTO>)dataVector.get(2); 

Vector<DiscountDTO> discountVector =(Vector<DiscountDTO>)dataVector.get(3);

String tCode = train.getTname();

String sCode = train.getSname();

int danka = 0;

String tName = "";

String sName = "";

// 열차명 좌석명 거리단가 계산

for(int i = 0; i <tsVector.size(); i++){

if(tCode.equals(tsVector.get(i).getTcode())){

tName = tsVector.get(i).getTname();

train.setTname(tName);

System.out.println("tName : " +tName);

for(int l = 0; l <tsVector.size(); l++){

if(sCode.equals(tsVector.get(l).getScode())){

sName = tsVector.get(l).getSname();

train.setSname(sName);

System.out.println("sName = " + sName);

}

}

}

}

for(int m = 0; m <costVector.size(); m++){

if(tName.equals(costVector.get(m).getTname()) && sName.equals(costVector.get(m).getSeat())){

danka = Integer.parseInt(costVector.get(m).getKcost());

System.out.println("danka = " + danka);

}

}

// 지역과 거리 계산

String regionCode = train.getRegion();

int km = 0;

for(int j = 0; j <regionVector.size(); j++){

if(regionCode.equals(regionVector.get(j).getRcode())){

String regionName = regionVector.get(j).getRname();

train.setRegion(regionName);

km = Integer.parseInt(regionVector.get(j).getKm());

}

}

// 차비 계산

String type = train.getType();

for(int k = 0; k < discountVector.size(); k++){

if(type.equals(discountVector.get(k).getDcode())){

type = discountVector.get(k).getType();

String per = discountVector.get(k).getPercent();

System.out.println(danka);

System.out.println(km);

double discount = (danka * km) * Double.parseDouble("0"+per);

train.setType(type);

train.setDiscost(discount+"");

train.setTotcost((danka * km) - discount +"");

}

}

}

}


service 패키지

DataService.java

package service;


import java.sql.Connection;

import java.sql.SQLException;

import java.util.Vector;


import model.DataDAO;

import model.TrainDTO;


public class DataService {

public Vector<Object> selectAll(Connection conn){

Vector<Object> vector = null;

try{

vector = DataDAO.selectAll(conn);

}catch(SQLException ex){

System.out.println(ex.toString());

}

return vector;

}

}


InsertService.java

package service;


import java.sql.Connection;

import java.sql.SQLException;


import model.TrainDAO;

import model.TrainDTO;




public class InsertService {

public void insert(Connection conn, TrainDTO train){

try{

TrainDAO.insert(conn, train);

}catch(SQLException ex){

System.out.println(ex.toString());

}

}

}


SelectService.java

package service;


import java.sql.Connection;

import java.sql.SQLException;

import java.util.Vector;


import model.TrainDAO;

import model.TrainDTO;


public class SelectService {

public Vector<TrainDTO> selectAll(Connection conn){

Vector<TrainDTO> vector = null;

try{

vector = TrainDAO.selectAll(conn);

}catch(SQLException ex){

System.out.println(ex.toString());

}

return vector;

}

}



view 패키지

InsetServlet.ava

package view;


import java.io.IOException;

import java.io.PrintWriter;

import java.sql.Connection;

import java.util.Vector;


import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;


import model.Calc;

import model.DBClose;

import model.DBConnection;

import model.TrainDTO;

import service.DataService;

import service.InsertService;


public class InsertServlet extends HttpServlet {

static private int count = 1;

public void doPost(HttpServletRequest req, HttpServletResponse res)

throws ServletException, IOException{

req.setCharacterEncoding("utf-8");

String tscode = req.getParameter("tscode").trim(); // 열차좌석코드

String rcode = req.getParameter("rcode").trim(); // 장소코드

String min1 = req.getParameter("min1").trim(); // 주민번호 1

String min2 = req.getParameter("min2").trim(); // 주민번호 2

String dcode = req.getParameter("dcode").trim(); // 할증코드

String tcode  = tscode.substring(0, 2); // 열차코드 자르기

String scode  = tscode.substring(2, 4); // 좌석코드 자르기

String gender = "남"; // 성별

if(min2.startsWith("2")){ // 주민번호 2가 '2'로 시작하면 '여'

gender = "여";

}

TrainDTO train = new TrainDTO(count+"", rcode, gender, tcode, scode, dcode);

String path = this.getServletContext().getRealPath("/");

Connection conn = DBConnection.getConnection(path);

Vector<Object> dataVector = new Vector<Object>(1,1);

DataService ds = new DataService();

dataVector = ds.selectAll(conn);

Calc calc = new Calc(dataVector, train);

calc.calc();  //진짜 계산


InsertService is = new InsertService();

is.insert(conn, train);

count++;


DBClose.close(conn);

res.setContentType("text/html;charset=utf-8");

PrintWriter out = res.getWriter();

out.println("<!DOCTYPE html>");

out.println("<html lang=\"ko\">");

out.println("<script>");

out.println(" location.replace('http://localhost:8080/Korail/servlet/List');");

out.println("</script>");

out.println("</html>");

out.close();

}

}


ListServlet.java

package view;


import java.io.IOException;

import java.io.PrintWriter;

import java.sql.Connection;

import java.util.Vector;


import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;


import model.DBClose;

import model.DBConnection;

import model.TrainDTO;

import service.SelectService;


public class ListServlet extends HttpServlet {

private Connection conn;

private String path;

@Override

public void init() throws ServletException{

path = this.getServletContext().getRealPath("/");

conn = DBConnection.getConnection(path);

}

@Override

public void doGet(HttpServletRequest req, HttpServletResponse res)

throws ServletException, IOException{

SelectService ss = new SelectService();

Vector<TrainDTO> vector = ss.selectAll(this.conn);

res.setContentType("text/html;charset=utf-8");

PrintWriter out = res.getWriter();

out.println("<!doctype html>");

out.println("<html lang=\"ko\">");

out.println("<head>");

out.println(" <meta charset=\"UTF-8\">");

out.println(" <title>금일 지역별 예약 현황</title>");

out.println(" <link rel=\"stylesheet\" href='/Korail/css/style.css'>");

out.println(" <link rel=\"stylesheet\" href='/Korail/css/bootstrap.css'>");

out.println("</head>");

out.println("<body>");

out.println(" <h1>금일 지역별 예약 현황</h1>");

out.println(" <table>");

out.println(" <tr>");

out.println(" <td class=\"left\">[<a href=\"/Korail/insert.html\">열차 좌석 예매 페이지</a>]</td>");

out.print(" <td class=\"right\">");

out.println(" </tr>");

out.println(" </table>");

// 대구지역

out.println(" <table class=\"table table-striped\">");

out.println(" <caption class=\"col\"><지역 = 대구></caption>");

out.println(" <thead>");

out.println(" <tr>");

out.println(" <th>번호</th>");

out.println(" <th>지역</th>");

out.println(" <th>성별</th>");

out.println(" <th>열차명</th>");

out.println(" <th>좌석</th>");

out.println(" <th>할증종류</th>");

out.println(" <th>할인액</th>");

out.println(" <th>차비</th>");

out.println(" </tr>");

out.println(" </thead>");

out.println("   <tbody>");

double dTotal = 0.0;

if(vector == null || vector.size() == 0){

out.println("<td colspan=\"9\" class=\"col\">데이터가 없습니다.</td>");

}else{   //데이터가 있다면

for(int i = 0 ; i < vector.size() ; i++){

TrainDTO train = vector.get(i);

if(train.getRegion().equals("대구")){

out.println("<tr>");

out.println("<td>" + train.getNo() + "</td>");

out.println("<td>" + train.getRegion() + "</td>");

out.println("<td>" + train.getGender() + "</td>");

out.println("<td>" + train.getTname() + "</td>");

out.println("<td>" + train.getSname() + "</td>");

out.println("<td>" + train.getType() + "</td>");

out.println("<td>" + train.getDiscost() + "</td>");

out.println("<td>" + train.getTotcost() + "</td>");

out.println("</tr>");

dTotal += Double.parseDouble(train.getTotcost());

}

}

}

out.println("</tbody>");

out.println(" </table>");

out.println("대구지역 차비의 합 = " + dTotal);

//서울지역

out.println(" <table class=\"table table-striped\">");

out.println(" <caption class=\"col\"><지역 = 서울></caption>");

out.println(" <thead>");

out.println(" <tr>");

out.println(" <th>번호</th>");

out.println(" <th>지역</th>");

out.println(" <th>성별</th>");

out.println(" <th>열차명</th>");

out.println(" <th>좌석</th>");

out.println(" <th>할증종류</th>");

out.println(" <th>할인액</th>");

out.println(" <th>차비</th>");

out.println(" </tr>");

out.println(" </thead>");

out.println("   <tbody>");

double sTotal = 0.0;

if(vector == null || vector.size() == 0){

out.println("<td colspan=\"9\" class=\"col\">데이터가 없습니다.</td>");

}else{   //데이터가 있다면

for(int i = 0 ; i < vector.size() ; i++){

TrainDTO train = vector.get(i);

if(train.getRegion().equals("서울")){

out.println("<tr>");

out.println("<td>" + train.getNo() + "</td>");

out.println("<td>" + train.getRegion()+ "</td>");

out.println("<td>" + train.getGender() + "</td>");

out.println("<td>" + train.getTname() + "</td>");

out.println("<td>" + train.getSname() + "</td>");

out.println("<td>" + train.getType() + "</td>");

out.println("<td>" + train.getDiscost() + "</td>");

out.println("<td>" + train.getTotcost() + "</td>");

out.println("</tr>");

sTotal += Double.parseDouble(train.getTotcost());

}

}

}

out.println("</tbody>");

out.println(" </table>");

out.println("서울지역 차비의 합 = " + sTotal);

out.println("<br><br> <p>총 차비 = " + (dTotal + sTotal) +"</p>");

out.println(" </body>");

out.println("</html>");

out.close();

}

@Override

public void destroy(){

DBClose.close(conn);

}

}


bootstrap.css

style.css

@CHARSET "utf-8";


h1 { text-align:center;}

table { margin:auto; width:900px;border-width:0px;  }

.left { text-align:left;}

.right{ text-align:right;}

table:last-child{

border-collapse:collapse; padding:10px; border:1px solid white;

}

table:last-child th, table:last-child td{

border:1px solid white;text-align:center;

}

table:last-child caption{

font-size:1.5em; margin-bottom:10px;

}

table:last-child tr{

height:30px; background-color:darkblue;color:white;

}

table:last-child td{

background-color:white;height:25px;color:black;

}


p{

text-align:center;

color: red;

font-size : 2em;

}


.col{

color: blue;

font-size: 1.3em;

}

Servlet을 사용하기 위한 세팅하고,

CookieGetServlet.java

/*

 * Cookie

 * 1. 상태정보(Status)를 클라이언트에 저장하는 메커니즘

 * 2. 클라이언트에 저장하기 때문에 서버에 부하를 줄일 수는 있지만, 그만큼 보안에 취약하다.

 * 3. 도메인당 300개까지 저장가능

 * 4. 요새 대부분의 브라우저는 쿠키를 설정하지 못하도록 하는 제약이 있다.

 * 5. 브라우저 메모리 혹은 OS 파일에 저장가능

 * 6. 기본저장은 브라우저 메모리이기 때문에, 브라우저를 종료하면 자동으로 쿠키는 폐기됨

 * 7. 쿠키만료시간을 지정하면 지정된 시간까지 OS 파일에 저장된다.

 * 

 * Cookie 생성자

 * javax.servlet.http.Cookie;

 * public Cookie(java.lang.String name, java.lang.String value)

 * 

 * 주요메소드

 * 1) response.addCookie(cookie인스턴스);

 * 2) request.getCookies()

 * 3) setMaxAge(second)

 * 4) getMaxAge()

 * 5) setValue(value)

 * 6) getValue()

 * 7) getName()

 * 8) length 

 */

import java.io.IOException;

import java.io.PrintWriter;


import javax.servlet.ServletException;

import javax.servlet.http.Cookie;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;



public class CookieGetServlet extends HttpServlet{

/*@Override

public void service(ServletRequest req, ServletResponse res)

     throws ServletException, IOException{

HttpServletRequest request = (HttpServletRequest)req;

if(request.getMethod().equalsIgnoreCase("POST")){

this.doPost((HttpServletRequest)req, (HttpServletResponse)res);

}else if(request.getMethod().equalsIgnoreCase("GET")){

this.doGet((HttpServletRequest)req, (HttpServletResponse)res);

}

}*/

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp)

     throws ServletException, IOException{

resp.setContentType("text/html;charset=utf-8");

PrintWriter out = resp.getWriter();

out.println("<!DOCTYPE html>");

out.println("<html lang='ko'>");

out.println("<body>");

out.println("<h1>Cookie 추출</h1>");

Cookie [] array = req.getCookies();

if(array != null && array.length > 0){

out.println("<p>다음과 같은 쿠키 정보가 전달됐습니다.</p>");

out.println("<ul>");

for(int i = 0 ; i < array.length ; i++){

out.println("<li>Cookie Name : " + array[i].getName() + "</li>");

out.println("<li>Cookie Value : " + array[i].getValue() + "</li>");

}

out.println("</ul>");

}else{  //Cookie 가 없다면

out.println("<font color='red' size='6'>전달된 Cookie 가 없습니다.</font>");

}

out.println("</body></html>");

out.close();

}

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp)

     throws ServletException, IOException{

this.doGet(req, resp);

}

}


CookieSetServlet.java

import java.io.IOException;

import java.io.PrintWriter;


import javax.servlet.ServletException;

import javax.servlet.http.Cookie;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;


public class CookieSetServlet extends HttpServlet {

public void doGet(HttpServletRequest req, HttpServletResponse res)

throws ServletException, IOException{

Cookie c1 = new Cookie("discount", "20");

Cookie c2 = new Cookie("item", "sports");

res.setContentType("text/html;charset=utf-8");

res.addCookie(c1);

c2.setMaxAge(60 * 60 * 3);  //3시간

res.addCookie(c2);

PrintWriter out = res.getWriter();

out.println("<!DOCTYPE html>");

out.println("<html lang='ko'>");

out.println("<body>");

out.println("<h1>Cookie 추출완료</h1>");

out.println("</body></html>");

out.close();

}

public void doPost(HttpServletRequest req, HttpServletResponse res)

throws ServletException, IOException{

this.doGet(req, res);

}

}



web.xml

<?xml version="1.0" encoding="ISO-8859-1"?>


<web-app xmlns="http://java.sun.com/xml/ns/javaee"

  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

                      http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"

  version="3.0"

  metadata-complete="true">


  <display-name>Welcome to 0613 Web Project </display-name>

   

  <servlet>

  <servlet-class>CookieGetServlet</servlet-class>

  <servlet-name>CookieGet</servlet-name>

  </servlet>

  <servlet>

  <servlet-class>CookieSetServlet</servlet-class>

  <servlet-name>CookieSet</servlet-name>

  </servlet>

  

  <servlet-mapping>

  <servlet-name>CookieGet</servlet-name>

  <url-pattern>/servlet/CookieGet</url-pattern>

  </servlet-mapping>

  <servlet-mapping>

  <servlet-name>CookieSet</servlet-name>

  <url-pattern>/servlet/CookieSet</url-pattern>

  </servlet-mapping>

</web-app>

브라우저켜서

http://localhost/0613/servlet/CookieGet  해서

http://localhost/0613/servlet/CookieSet  으로 쿠키를 셋 해주고

http://localhost/0613/servlet/CookieGet 다시 오면 두개의 쿠키정보가 나온다.  브라우저 종료 후,

http://localhost/0613/servlet/CookieGet 오면 쿠키가 하나사라진 것을 볼 수 있다. 

이유는 c2에는 유효시간을 주어 유효시간동안 쿠키가 남아있지만, c1은 브라우저를 종료하면 사라진다.

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

쇼핑몰 쿠키

product.html

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<title>상품페이지</title>

</head>

<body>

<h1>상품 목록</h1>

<form action="/0613/servlet/CartSave" method="post">

<input type="radio" name="product" value="Computer">Computer<br />

<input type="radio" name="product" value="Sonata">Sonata<br />

<input type="radio" name="product" value="Keyboard">Keyboard<br />

<input type="radio" name="product" value="Book">Book<br />

<input type="submit" value="담기">

</form>

</body>

</html>


ShoppingCartCookiesServlet.java

import java.io.IOException;

import java.io.PrintWriter;


import javax.servlet.ServletException;

import javax.servlet.http.Cookie;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;



public class ShoppingCartCookieServlet extends HttpServlet{

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp)

     throws ServletException, IOException{

resp.setContentType("text/html;charset=utf-8");

PrintWriter out = resp.getWriter();

out.println("<!DOCTYPE html>");

out.println("<html lang='ko'>");

out.println("<body>");

out.println("<h1>장바구니 리스트</h1>");

Cookie [] array = req.getCookies();

if(array != null && array.length > 0){  //Cookie 가 있다면

for(Cookie c : array)

out.println(c.getName() + " --> " + c.getValue() + "<br />");

}else{

out.println("<p style='color:red;font-size:1.5em;'>");

out.println("장바구니가 비었습니다.</div>");

}

out.println("<a href='/0613/product.html'>상품 선택 페이지</a>");

out.println("<a href='/0613/servlet/CartDelete'>장바구니 비우기</a>");

out.println("</body></html>");

out.close();

}

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp)

     throws ServletException, IOException{

this.doGet(req, resp);

}

}


CartSaveServlet.java

import java.io.IOException;

import java.io.PrintWriter;


import javax.servlet.ServletException;

import javax.servlet.http.Cookie;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;


public class CartSaveServlet extends HttpServlet {

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp)

     throws ServletException, IOException{

String product = req.getParameter("product");

Cookie [] array = req.getCookies();  //기존의 쿠키

Cookie c = null;

if(array == null || array.length == 0){  //기존의 쿠키가 없다면

c = new Cookie("product", product);

}else{

c = new Cookie("product" + (array.length + 1), product);

}

resp.addCookie(c);

resp.setContentType("text/html;charset=utf-8");

PrintWriter out = resp.getWriter();

out.println("<!DOCTYPE html>");

out.println("<html lang='ko'>");

out.println("<body>");

out.println("<a href='/0613/servlet/ShoppingCartCookie'>");

out.println("장바구니 보기</a>");

out.println("</body></html>");

out.close();

}

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp)

     throws ServletException, IOException{

this.doGet(req, resp);

}

}


CartDeleteServlet.java

import java.io.IOException;

import java.io.PrintWriter;


import javax.servlet.ServletException;

import javax.servlet.http.Cookie;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;


public class CartDeleteServlet extends HttpServlet {

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp)

     throws ServletException, IOException{

resp.setContentType("text/html;charset=utf-8");

PrintWriter out = resp.getWriter();

out.println("<!DOCTYPE html>");

out.println("<html lang='ko'>");

out.println("<body>");

out.println("<h1>장바구니 비우기</h1>");

Cookie [] array = req.getCookies();

if(array != null){

for(Cookie c : array) {

c.setMaxAge(1);  //1초

resp.addCookie(c);

}

}else{

out.println("<div style='color:red;font-size:1.5em;'>");

out.println("장바구니는 이미 비어있음</div>");

}

out.println("<a href='/0613/product.html'>상품선택페이지</a>");

out.println("</body></html>");

out.close();

}

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp)

     throws ServletException, IOException{

this.doGet(req, resp);

}

}


web.xml

<?xml version="1.0" encoding="ISO-8859-1"?>


<web-app xmlns="http://java.sun.com/xml/ns/javaee"

  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

                      http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"

  version="3.0"

  metadata-complete="true">


  <display-name>Welcome to 0613 Web Project </display-name>

   

  <servlet>

  <servlet-class>CookieGetServlet</servlet-class>

  <servlet-name>CookieGet</servlet-name>

  </servlet>

  <servlet>

  <servlet-class>CookieSetServlet</servlet-class>

  <servlet-name>CookieSet</servlet-name>

  </servlet>

  <servlet>

  <servlet-class>ShoppingCartCookieServlet</servlet-class>

  <servlet-name>ShoppingCartCookie</servlet-name>

  </servlet>

  <servlet>

  <servlet-class>CartSaveServlet</servlet-class>

  <servlet-name>CartSave</servlet-name>

  </servlet>

  <servlet>

  <servlet-class>CartDeleteServlet</servlet-class>

  <servlet-name>CartDelete</servlet-name>

  </servlet>

  

  <servlet-mapping>

  <servlet-name>CookieGet</servlet-name>

  <url-pattern>/servlet/CookieGet</url-pattern>

  </servlet-mapping>

  <servlet-mapping>

  <servlet-name>CookieSet</servlet-name>

  <url-pattern>/servlet/CookieSet</url-pattern>

  </servlet-mapping>

  <servlet-mapping>

  <servlet-name>ShoppingCartCookie</servlet-name>

  <url-pattern>/servlet/ShoppingCartCookie</url-pattern>

  </servlet-mapping>

  <servlet-mapping>

  <servlet-name>CartSave</servlet-name>

  <url-pattern>/servlet/CartSave</url-pattern>

  </servlet-mapping>

  <servlet-mapping>

  <servlet-name>CartDelete</servlet-name>

  <url-pattern>/servlet/CartDelete</url-pattern>

  </servlet-mapping>

</web-app>

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

SessionTestServlet.java

/*

 * Session Tracking

 * 

 * 1. http protocol은 stateless protocol 즉 상태를 저장하지 않는 프로토콜이다.

 * 2. 클라이언트가 웹 서버에 요청하고 응답을 받으면 즉시 연결과 정보를 끊는 방식이다.

 * 3. http 프로토콜의 문제점을 극복하기 위해서 사용자의 상태 정보를 관리하는 매커니즘이 필요

 * 4. 세션트래킹(세션관리)의 방법

 *    1)HttpSession 클래스를 이용한 세션 처리 방법

 *    2)Cookie 를 이용한 쿠리 처리 방법

 *    

 * 5. 세션이란?

 *    - 사용자의 상태정보를 웹 서버의 메모리에 저장하는 매커니즘을 의미

 *    - 세션 정보는 클라이언트가 웹 서버에 접근해서 종료할 때까지(브라우저를 종료할 때까지) 유지

 *    - 상태 정보를 서버에 저장하기 때문에 서버의 부하가 클 수 있다.

 *    - time-out 제한을 두어서 일정시간(기본 30분)동안 요청이 없으면, 서버는 세션 정보를 폐기

 *    

 * 6. 주요 메소드       

 *   1)request.getSession(), request.getSession(true)

 *     - 만일 세션이 없으면 새로 생성하고, 있으면 생성된 세션을 참조

 *     - 일반적으로 세션을 처음 생성하는 서블릿에서 사용

 *   2)request.getSession(false)

 *     - 만일 세션이 없으면 null 값을 리턴하고, 있으면 생성된 세션을 참조

 *     - 일반적으로 세션을 사용해야 하는 경우에 사용

 *   3) session.getId()

 *   4) session.setAttribute(key, value)

 *   5) session.getAttribuet(key)

 *   6) session.removeAttribute(key)

 *   7) session.setMaxInactiveInterval(second)

 *   8) session.getMaxInactiveInterval()

 *   9) session.invalidate()

 *   

 * 7. 세션을 제거하는 방법

 *   1) time-out을 지정하는 방법

 *     - session.setMaxInactiveInterval(second)

 *     session.setMaxInactiveInterval(60 * 60 * 24);  //24시간

 *     -web.xml 에서

 *      <web-app>

 *         <session-config>  단위는 분단위

 *         <session-timeout>60</session-timeout>

 *         </session-config>

 *      </web-app>

 *   2) 즉시 제거하는 방법

 *      - invalidate()

 *      session.invalidate()

 *   3) 세션에 특정 값만을 지울 때

 *      removeAttribute(key)

 *      session.removeAttribute(key)

 */

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;

import javax.servlet.http.HttpSession;


public class SessionTestServlet extends HttpServlet {

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse res)

throws ServletException, IOException{

res.setContentType("text/html;charset=utf-8");

PrintWriter out = res.getWriter();

HttpSession session = null;

String msg = null;

String param = req.getParameter("comm");

if(param.equals("create")){

session = req.getSession();  //req.getSession(true);

if(session.isNew()){

msg = "방금 세션이 생성됐습니다.";

}else{

msg = "이미 세션이 생성되어 있습니다.";

}

}else if(param.equals("destroy")){

session = req.getSession(false);

if(session != null) {

session.invalidate();

msg = "세션이 방금 삭제됐습니다.";

}else{

msg = "사용할 수 없는 명령입니다.";

}

}

out.println("<!DOCTYPE html>");

out.println("<html lang='ko'>");

out.println("<body>");

out.println("<h1>처리 결과 : " + msg + "</h1>");

out.println("</body></html>");

out.close();

}

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse res)

throws ServletException, IOException{

this.doGet(req, res);

}

}


web.xml

<?xml version="1.0" encoding="ISO-8859-1"?>


<web-app xmlns="http://java.sun.com/xml/ns/javaee"

  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

                      http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"

  version="3.0"

  metadata-complete="true">


  <display-name>Welcome to 0613 Web Project </display-name>


  <servlet>

  <servlet-class>SessionTestServlet</servlet-class>

  <servlet-name>SessionTest</servlet-name>

  </servlet>

  

  <servlet-mapping>

  <servlet-name>SessionTest</servlet-name>

  <url-pattern>/servlet/SessionTest</url-pattern>

  </servlet-mapping>


</web-app>

//실행은 http://localhost/0613/servlet/SessionTest?comm=destroy 해보고

http://localhost/0613/servlet/SessionTest?comm=create 해보고

http://localhost/0613/servlet/SessionTest?comm=destroy 해봄.

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

CountServlet.java

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;

import javax.servlet.http.HttpSession;



public class CountServlet extends HttpServlet {

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse res)

throws ServletException, IOException{

res.setContentType("text/html;charset=utf-8");

PrintWriter out = res.getWriter();

out.println("<!DOCTYPE html>");

out.println("<html lang='ko'>");

out.println("<body>");

out.println("<h1>누적시킬 숫자를 입력하세요.</h1>");

out.println("<form method='post'>");

out.println("<p><input type='number' name='number'></p>");

out.println("<p><input type='submit' value='전송'></p>");

out.println("</form>");

out.println("</body></html>");

out.close();

}

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse res)

throws ServletException, IOException{

HttpSession session = req.getSession();

if(session.isNew()){

session.setAttribute("number", new int[]{0});

}

int [] sum = (int [])session.getAttribute("number");

int su = Integer.parseInt(req.getParameter("number"));

sum[0] += su;

res.setContentType("text/html;charset=utf-8");

PrintWriter out = res.getWriter();

out.println("<!DOCTYPE html>");

out.println("<html lang='ko'>");

out.println("<body>");

out.println("<h3>누적된 값 : " + sum[0] + "</h3>");

out.println("Session ID : " + session.getId() + "<br />");

out.print("Session 생성시간 : ");

out.println(new java.util.Date(session.getCreationTime()) + "<br />");

out.println("<a href='/0613/servlet/Count'>이전페이지</a>");

out.println("</body></html>");

out.close();

}

}


web.xml

<?xml version="1.0" encoding="ISO-8859-1"?>


<web-app xmlns="http://java.sun.com/xml/ns/javaee"

  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

                      http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"

  version="3.0"

  metadata-complete="true">


  <display-name>Welcome to 0613 Web Project </display-name>

   

  <servlet-class>CountServlet</servlet-class>

  <servlet-name>Count</servlet-name>

  </servlet>

  

  <servlet-mapping>

  <servlet-name>Count</servlet-name>

  <url-pattern>/servlet/Count</url-pattern>

  </servlet-mapping>

  

</web-app>

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

session으로 쇼핑몰 .

product1.html

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<title>상품페이지</title>

</head>

<body>

<h1>상품 목록</h1>

<form action="/0613/servlet/CartSaveSession" method="post">

<input type="radio" name="product" value="Computer">Computer<br />

<input type="radio" name="product" value="Sonata">Sonata<br />

<input type="radio" name="product" value="Keyboard">Keyboard<br />

<input type="radio" name="product" value="Book">Book<br />

<input type="submit" value="담기">

</form>

</body>

</html>


ShoppingSaveSessionServlet.java

import java.io.IOException;

import java.io.PrintWriter;

import java.util.ArrayList;


import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;


public class CartSaveSessionServlet extends HttpServlet {

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp)

     throws ServletException, IOException{

String product = req.getParameter("product");

HttpSession session = req.getSession(true);

ArrayList<String> cart = (ArrayList<String>)session.getAttribute("product");

if(cart == null){

cart = new ArrayList<String>();

cart.add(product);

session.setAttribute("product", cart);

}else{

cart.add(product);

}

resp.setContentType("text/html;charset=utf-8");

PrintWriter out = resp.getWriter();

out.println("<!DOCTYPE html>");

out.println("<html lang='ko'>");

out.println("<body><h1>장바구니추가</h1>");

out.println("<a href='/0613/servlet/ShoppingCartSession'>");

out.println("장바구니 보기</a>");

out.println("</body></html>");

out.close();

}

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp)

     throws ServletException, IOException{

this.doGet(req, resp);

}

}


ShoppingCartSessionServlet.java

import java.io.IOException;

import java.io.PrintWriter;

import java.util.ArrayList;


import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;



public class ShoppingCartSessionServlet extends HttpServlet{

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp)

     throws ServletException, IOException{

resp.setContentType("text/html;charset=utf-8");

PrintWriter out = resp.getWriter();

out.println("<!DOCTYPE html>");

out.println("<html lang='ko'>");

out.println("<body>");

out.println("<h1>장바구니 리스트</h1>");

HttpSession session = req.getSession(false);

session.setMaxInactiveInterval(60 * 15); //15분

if(session != null){

ArrayList<String> cart = (ArrayList<String>)session.getAttribute("product");

out.println("<ul>상품목록");

for(int i = 0 ; i < cart.size() ; i++){

out.println("<li>" + cart.get(i) + "</li>");

}

out.println("</ul>");

}else{

out.print("<div style='color:red;font-size:1.5em;'>");

out.println("세션이 없습니다.</div>");

}

out.println("<a href='/0613/product1.html'>상품 선택 페이지</a>");

out.println("<a href='/0613/servlet/CartDeleteSession'>장바구니 비우기</a>");

out.println("</body></html>");

out.close();

}

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp)

     throws ServletException, IOException{

this.doGet(req, resp);

}

}


CartDeleteSessionServlet.java

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;

import javax.servlet.http.HttpSession;


public class CartDeleteSessionServlet extends HttpServlet {

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp)

     throws ServletException, IOException{

resp.setContentType("text/html;charset=utf-8");

PrintWriter out = resp.getWriter();

out.println("<!DOCTYPE html>");

out.println("<html lang='ko'>");

out.println("<body>");

out.println("<h1>장바구니 비우기</h1>");

HttpSession sesson = req.getSession(false);

if(sesson != null) sesson.invalidate();

else{

out.println("<div style='color:red;font-size:1.5em;'>");

out.println("세션이 없습니다.</div>");

}

out.println("<a href='/0613/product1.html'>상품선택페이지</a>");

out.println("</body></html>");

out.close();

}

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp)

     throws ServletException, IOException{

this.doGet(req, resp);

}

}


web.xml

<?xml version="1.0" encoding="ISO-8859-1"?>


<web-app xmlns="http://java.sun.com/xml/ns/javaee"

  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

                      http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"

  version="3.0"

  metadata-complete="true">


  <display-name>Welcome to 0613 Web Project </display-name>

   

  <servlet>

  <servlet-class>CookieGetServlet</servlet-class>

  <servlet-name>CookieGet</servlet-name>

  </servlet>

  <servlet>

  <servlet-class>CookieSetServlet</servlet-class>

  <servlet-name>CookieSet</servlet-name>

  </servlet>

  <servlet>

  <servlet-class>ShoppingCartCookieServlet</servlet-class>

  <servlet-name>ShoppingCartCookie</servlet-name>

  </servlet>

  <servlet>

  <servlet-class>ShoppingCartSessionServlet</servlet-class>

  <servlet-name>ShoppingCartSession</servlet-name>

  </servlet>

  <servlet>

  <servlet-class>CartSaveServlet</servlet-class>

  <servlet-name>CartSave</servlet-name>

  </servlet>

  <servlet>

  <servlet-class>CartSaveSessionServlet</servlet-class>

  <servlet-name>CartSaveSession</servlet-name>

  </servlet>

  <servlet>

  <servlet-class>CartDeleteServlet</servlet-class>

  <servlet-name>CartDelete</servlet-name>

  </servlet>

  <servlet>

  <servlet-class>CartDeleteSessionServlet</servlet-class>

  <servlet-name>CartDeleteSession</servlet-name>

  </servlet>

  <servlet>

  <servlet-class>SessionTestServlet</servlet-class>

  <servlet-name>SessionTest</servlet-name>

  </servlet>

  <servlet>

  <servlet-class>CountServlet</servlet-class>

  <servlet-name>Count</servlet-name>

  </servlet>

  

  <servlet-mapping>

  <servlet-name>Count</servlet-name>

  <url-pattern>/servlet/Count</url-pattern>

  </servlet-mapping>

  <servlet-mapping>

  <servlet-name>SessionTest</servlet-name>

  <url-pattern>/servlet/SessionTest</url-pattern>

  </servlet-mapping>

  <servlet-mapping>

  <servlet-name>CookieGet</servlet-name>

  <url-pattern>/servlet/CookieGet</url-pattern>

  </servlet-mapping>

  <servlet-mapping>

  <servlet-name>CookieSet</servlet-name>

  <url-pattern>/servlet/CookieSet</url-pattern>

  </servlet-mapping>

  <servlet-mapping>

  <servlet-name>ShoppingCartCookie</servlet-name>

  <url-pattern>/servlet/ShoppingCartCookie</url-pattern>

  </servlet-mapping>

  <servlet-mapping>

  <servlet-name>ShoppingCartSession</servlet-name>

  <url-pattern>/servlet/ShoppingCartSession</url-pattern>

  </servlet-mapping>

  <servlet-mapping>

  <servlet-name>CartSave</servlet-name>

  <url-pattern>/servlet/CartSave</url-pattern>

  </servlet-mapping>

  <servlet-mapping>

  <servlet-name>CartSaveSession</servlet-name>

  <url-pattern>/servlet/CartSaveSession</url-pattern>

  </servlet-mapping>

  <servlet-mapping>

  <servlet-name>CartDelete</servlet-name>

  <url-pattern>/servlet/CartDelete</url-pattern>

  </servlet-mapping>

  <servlet-mapping>

  <servlet-name>CartDeleteSession</servlet-name>

  <url-pattern>/servlet/CartDeleteSession</url-pattern>

  </servlet-mapping>

</web-app>


ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

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

forward vs redirect

ForwardDemoServlet.java

/*

 * Request Dispatcher (요청재전송) --> Forwarding

 * 1. 사용자의 요청을 받은 서블릿 혹은 JSP 에서 다른 컴포넌트(다른 서블릿, 다른 JSP, html)로 

 *     요청을 위임할 수 있는 방법

 * 2. 사용이유는 1)보안, 2) 처리작업의 모듈화

 * 3. 직접 요청을 받은 서블릿 혹은 JSP는 모든 작업을 직접 처리하지 않고 모듈화시킨 다른 

 *     컴포넌트로 요청을 위임하여 처리할 수 있는 방법

 * 4. 재사용성이 높아지고, 유지보수가 쉬워짐

 * 5. 일반적으로 MVC패턴에서 서블릿이 JSP 페이지로 포워딩할 때 주로 사용함.

 * 6. 사용자로부터 요청을 받은 페이지와 사용자에게 응답을 처리하는 페이지를 구별할 수 있다.

 * 7. 일반적으로 이러한 패턴을 FrontController 패턴이라고 한다.

 * 8. 요청을 받는 페이지는 서블릿으로 구현하고, 응답을 처리하는 페이지는 JSP 로 구현할 수 있다.

 * 9. Model2(MVC) 의 핵심기능이다.

 * 10. 요청한 자원의 포워딩 방법 2가지

 *    1) RequestDispatcher의 forward() 메소드

 *    2) ServletResponse 의 sendRedirect() 메소드

 */

import java.io.IOException;


import javax.servlet.RequestDispatcher;

import javax.servlet.ServletContext;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;


public class ForwardDemoServlet extends HttpServlet {

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse res)

throws ServletException, IOException{

ServletContext context = this.getServletContext();

RequestDispatcher rd = 

context.getRequestDispatcher("/product.html");

rd.forward(req, res);

}

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse res)

throws ServletException, IOException{

this.doGet(req, res);

}

}

VisitServlet.java

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import java.io.PrintWriter;

import java.io.IOException;

import java.util.Date;

import java.text.SimpleDateFormat;


public class VisitServlet extends HttpServlet{

public void doGet(HttpServletRequest req, HttpServletResponse res)

throws ServletException, IOException {

res.setContentType("text/html;charset=utf-8");

PrintWriter out = res.getWriter();

out.println("<!DOCTYPE html><html lang=\"ko\">");

out.println("<head><title>Welcome Hello Servlet!</title>");

out.println("<meta charset='utf-8'>");

out.println("<style>");

out.println("body { background-color:yellow;font-size:1.5em;}");

out.println("div { color:blue;font-weight:900; }");

out.println("span {color:red;}");

out.println("</style></head><body>");

out.println("<div>");

String pattern = "귀하가 방문한 날짜와 시간은 Y년 M월 d일 H시 m분 s초 입니다.";

SimpleDateFormat sdf = new SimpleDateFormat(pattern);

String str = sdf.format(new Date());

out.println("<span>" + str + "</span></div>");

out.println("</body></html>");

out.close();

}

}

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

ForwardTestServlet.java

import java.io.IOException;

import java.io.PrintWriter;


import javax.servlet.RequestDispatcher;

import javax.servlet.ServletContext;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;



public class ForwardTestServlet extends HttpServlet {

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse res)

throws ServletException, IOException{

res.setContentType("text/html;charset=utf-8");

PrintWriter out = res.getWriter();

out.println("<!DOCTYPE html>");

out.println("<html lang='ko'>");

out.println("<body bgcolor='red'>");

out.println("<h1>이 페이지는 절대로 보여지지 않아야 합니다.</h1>");

out.println("</body></html>");

ServletContext context = this.getServletContext();

RequestDispatcher rd = 

context.getRequestDispatcher("/servlet/ForwardTest1");

rd.forward(req, res);

out.close();

}

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse res)

throws ServletException, IOException{

this.doGet(req, res);

}

}

ForwardTestServlet1.java

import java.io.IOException;

import java.io.PrintWriter;


import javax.servlet.RequestDispatcher;

import javax.servlet.ServletContext;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;



public class ForwardTestServlet1 extends HttpServlet {

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse res)

throws ServletException, IOException{

res.setContentType("text/html;charset=utf-8");

PrintWriter out = res.getWriter();

out.println("<!DOCTYPE html>");

out.println("<html lang='ko'>");

out.println("<body bgcolor='yellow'>");

out.println("<h1>나는 ForwardTestServlet1페이지입니다.</h1>");

out.println("<a href='/0613/servlet/ForwardTest'>원래 페이지</a>");

out.println("</body></html>");

out.close();

}

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse res)

throws ServletException, IOException{

this.doGet(req, res);

}

}

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

RedirectDemoServlet.java

/*

 * Redirect

 * 1. Forward와 마찬가지로 다른 웹 컴포넌트에게 페이지를 위임하는 방법

 * 2. 차이점은 응답을 먼저하고 클라이언트의 브라우저가 다시 재요청하기 때문에, 

 *    브라우저의 URL 과 새로 응답하는 페이지가 같다.

 * 3. response.sendRedirect(target)

 * 4. target은 동일 컨텍스트의 서브릿, 혹은 JSP, 혹은 Html, 다른 컨텍스트, 다른 도메인,

 *     다른 웹 서버도 가능

 * 

 */

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 RedirectDemoServlet extends HttpServlet {

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse res)

throws ServletException, IOException{

res.setContentType("text/html;charset=utf-8");

PrintWriter out = res.getWriter();

out.println("<!DOCTYPE html>");

out.println("<html lang='ko'>");

out.println("<body bgcolor='red'>");

//res.sendRedirect("http://www.javaexpert.co.kr"); 1. 첫번째 방법

out.println("<script>");                                     //2. 두번째 방법

out.println("location.href = 'http://www.naver.com';");

out.println("</script>");

out.println("</body></html>");

out.close();

}

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse res)

throws ServletException, IOException{

this.doGet(req, res);

}

}

web.xml

<?xml version="1.0" encoding="ISO-8859-1"?>


<web-app xmlns="http://java.sun.com/xml/ns/javaee"

  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

                      http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"

  version="3.0"

  metadata-complete="true">


  <display-name>Welcome to 0613 Web Project </display-name>

   

  <servlet>

  <servlet-class>CookieGetServlet</servlet-class>

  <servlet-name>CookieGet</servlet-name>

  </servlet>

  <servlet>

  <servlet-class>ForwardDemoServlet</servlet-class>

  <servlet-name>ForwardDemo</servlet-name>

  </servlet>

  <servlet>

  <servlet-class>CookieSetServlet</servlet-class>

  <servlet-name>CookieSet</servlet-name>

  </servlet>

  <servlet>

  <servlet-class>ShoppingCartCookieServlet</servlet-class>

  <servlet-name>ShoppingCartCookie</servlet-name>

  </servlet>

  <servlet>

  <servlet-class>ShoppingCartSessionServlet</servlet-class>

  <servlet-name>ShoppingCartSession</servlet-name>

  </servlet>

  <servlet>

  <servlet-class>CartSaveServlet</servlet-class>

  <servlet-name>CartSave</servlet-name>

  </servlet>

  <servlet>

  <servlet-class>CartSaveSessionServlet</servlet-class>

  <servlet-name>CartSaveSession</servlet-name>

  </servlet>

  <servlet>

  <servlet-class>CartDeleteServlet</servlet-class>

  <servlet-name>CartDelete</servlet-name>

  </servlet>

  <servlet>

  <servlet-class>CartDeleteSessionServlet</servlet-class>

  <servlet-name>CartDeleteSession</servlet-name>

  </servlet>

  <servlet>

  <servlet-class>SessionTestServlet</servlet-class>

  <servlet-name>SessionTest</servlet-name>

  </servlet>

  <servlet>

  <servlet-class>CountServlet</servlet-class>

  <servlet-name>Count</servlet-name>

  </servlet>

  

  <servlet-mapping>

  <servlet-name>ForwardDemo</servlet-name>

  <url-pattern>/servlet/ForwardDemo</url-pattern>

  </servlet-mapping>

  <servlet-mapping>

  <servlet-name>Count</servlet-name>

  <url-pattern>/servlet/Count</url-pattern>

  </servlet-mapping>

  <servlet-mapping>

  <servlet-name>SessionTest</servlet-name>

  <url-pattern>/servlet/SessionTest</url-pattern>

  </servlet-mapping>

  <servlet-mapping>

  <servlet-name>CookieGet</servlet-name>

  <url-pattern>/servlet/CookieGet</url-pattern>

  </servlet-mapping>

  <servlet-mapping>

  <servlet-name>CookieSet</servlet-name>

  <url-pattern>/servlet/CookieSet</url-pattern>

  </servlet-mapping>

  <servlet-mapping>

  <servlet-name>ShoppingCartCookie</servlet-name>

  <url-pattern>/servlet/ShoppingCartCookie</url-pattern>

  </servlet-mapping>

  <servlet-mapping>

  <servlet-name>ShoppingCartSession</servlet-name>

  <url-pattern>/servlet/ShoppingCartSession</url-pattern>

  </servlet-mapping>

  <servlet-mapping>

  <servlet-name>CartSave</servlet-name>

  <url-pattern>/servlet/CartSave</url-pattern>

  </servlet-mapping>

  <servlet-mapping>

  <servlet-name>CartSaveSession</servlet-name>

  <url-pattern>/servlet/CartSaveSession</url-pattern>

  </servlet-mapping>

  <servlet-mapping>

  <servlet-name>CartDelete</servlet-name>

  <url-pattern>/servlet/CartDelete</url-pattern>

  </servlet-mapping>

  <servlet-mapping>

  <servlet-name>CartDeleteSession</servlet-name>

  <url-pattern>/servlet/CartDeleteSession</url-pattern>

  </servlet-mapping>

</web-app>

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

include

myimage.html

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<title>Insert title here</title>

</head>

<body>

<h1 style='text-align:center'>여신</h1>

<div style='text-align:center'><img src="/0613/images/jimin.jpg"></div>

</body>

</html>


IncludeDemoServlet.java

import java.io.IOException;

import java.io.PrintWriter;


import javax.servlet.RequestDispatcher;

import javax.servlet.ServletContext;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;



public class IncludeDemoServlet extends HttpServlet {

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse res)

throws ServletException, IOException{

res.setContentType("text/html;charset=utf-8");

PrintWriter out = res.getWriter();

out.println("<!DOCTYPE html>");

out.println("<html lang='ko'>");

out.println("<body bgcolor='red'>");

ServletContext context = this.getServletContext();

RequestDispatcher rd = 

context.getRequestDispatcher("/myimage.html");

rd.include(req, res);

out.println("<hr>");

rd = context.getRequestDispatcher("/servlet/Visit");

rd.include(req, res);

out.println("</body></html>");

out.close();

}

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse res)

throws ServletException, IOException{

this.doGet(req, res);

}

}

web.xml

  <servlet>

  <servlet-class>IncludeDemoServlet</servlet-class>

  <servlet-name>IncludeDemo</servlet-name>

  </servlet>

  

  <servlet-mapping>

  <servlet-name>IncludeDemo</servlet-name>

  <url-pattern>/servlet/IncludeDemo</url-pattern>

  </servlet-mapping>

//이렇게 두개의 페이지를 붙이면 close가 두번 일어나므로, 포함되는 페이지는 close 하면 안된다. 그래서 위의 VisitServlet.java 에서 out.close(); 를 삭제한다.



윈도우즈에서 관리도구-service-apache2.2를 Manual로 바꿔주고 start 해줌.


버츄얼 Ubuntu, CentOS 켜고 서비스클 켜자

CentOS에서

su - oracle

tnslsnr start

lsnrctl start

service oracle start

sqlplus /nolog

conn sys as sysdba

비번 javaoracle 쓰고

startup 해주고.

conn scott/tiger

Ubuntu에서

sudo /usr/local/tomcat7/bin/startup.sh

sudo service httpd start

서비스를 시작 시켰으니

윈도우즈에서 이클립스를 켜서 WEB-INF폴더만들어 class 만들어지는 폴더 정해주고, lib 폴더만들어 ojdbc6.jar 넣어주고 web.xml을 어제 작업했던 것에서 복사해온다.

그리고 C:\Program Files\Apache Software Foundation\Tomcat 7.0\conf 의 server.xml에 

<Context path="/0612" docBase="D:/WebHome/0612" debug="0" reloadable="true" crossContext="true" previleged="true" /> 추가해주고,

이클립스 톰캣을 켜주고 http://localhost:8080/manager/html 에서 path 에 /0612 가 있는지 확인.

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

우편번호 검색

kr.co.javaexpert.libs.model 패키지의 

DBClose.java

package kr.co.javaexpert.libs.model;


import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;


public class DBClose {

public static void close(Connection conn){

try {

if(conn != null) conn.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

public static void close(Connection conn, Statement stmt){

try {

if(stmt != null) stmt.close();

if(conn != null) conn.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

public static void close(Connection conn, Statement stmt, ResultSet rs){

try {

if(rs != null) rs.close();

if(stmt != null) stmt.close();

if(conn != null) conn.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

}


DBConnection.java

package kr.co.javaexpert.libs.model;


import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;

import java.util.Properties;


public class DBConnection {

public static Connection getConnection(String filename){

Properties info = new Properties();

Connection conn = null;

try {

info.load(new FileInputStream(filename + "dbinfo.properties"));

Class.forName(info.getProperty("DBDRIVER"));

conn = DriverManager.getConnection(

                          info.getProperty("DBURL"), 

                          info.getProperty("DBUSER"), 

                          info.getProperty("DBPWD"));

System.out.println("Connection Success");

} catch (FileNotFoundException e) {

System.out.println("File Not Found");

} catch (IOException e) {

e.printStackTrace();

} catch(ClassNotFoundException e){

System.out.println("Class Not Found");

} catch(SQLException e){

System.out.println("Connection Failure");

}

return conn;

}

}


ZipcodeVO.java

package kr.co.javaexpert.libs.model;


public class ZipcodeVO {

private String zipcode;

private String sido;

private String gugun;

private String dong;

private String bunji;

public ZipcodeVO(){}

public ZipcodeVO(String zipcode, String sido, String gugun, String dong, String bunji) {

this.zipcode = zipcode;

this.sido = sido;

this.gugun = gugun;

this.dong = dong;

this.bunji = bunji;

}

public String getZipcode() {

return zipcode;

}

public void setZipcode(String zipcode) {

this.zipcode = zipcode;

}

public String getSido() {

return sido;

}

public void setSido(String sido) {

this.sido = sido;

}

public String getGugun() {

return gugun;

}

public void setGugun(String gugun) {

this.gugun = gugun;

}

public String getDong() {

return dong;

}

public void setDong(String dong) {

this.dong = dong;

}

public String getBunji() {

return bunji;

}

public void setBunji(String bunji) {

this.bunji = bunji;

}

@Override

public String toString(){

return String.format("(%s) %s %s %s", 

this.zipcode, this.sido, this.gugun, this.dong);

}

}


ZipcodeDAO.java

package kr.co.javaexpert.libs.model;


import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import java.util.Vector;


public class ZipcodeDAO {

public static Vector<ZipcodeVO> getAllData(Connection conn, String keyword)

throws SQLException {

Vector<ZipcodeVO> vector = new Vector<ZipcodeVO>(1,1);

Statement stmt = conn.createStatement();

StringBuffer sb = new StringBuffer("SELECT zipcode, sido,");

sb.append("gugun, dong, bunji FROM zipcode ");

sb.append("WHERE dong LIKE '%" + keyword + "%' ");

ResultSet rs = stmt.executeQuery(sb.toString());

while(rs.next()){

ZipcodeVO zip = new ZipcodeVO();

zip.setZipcode(rs.getString("zipcode"));

zip.setSido(rs.getString("sido"));

zip.setGugun(rs.getString("gugun"));

zip.setDong(rs.getString("dong"));

zip.setBunji(rs.getString("bunji"));

vector.addElement(zip);

}

if(rs != null) rs.close();

if(stmt != null) stmt.close();

return vector;

}

}


kr.co.javaexpert.libs.service 패키지의

ZipSearchService.java

package kr.co.javaexpert.libs.service;


import java.sql.Connection;

import java.sql.SQLException;

import java.util.Vector;


import kr.co.javaexpert.libs.model.ZipcodeDAO;

import kr.co.javaexpert.libs.model.ZipcodeVO;


public class ZipSearchService {

public Vector<ZipcodeVO> select(Connection conn, String keyword){

Vector<ZipcodeVO> vector = null;

try{

vector = ZipcodeDAO.getAllData(conn, keyword);

}catch(SQLException ex){

System.out.println(ex.toString());

}

return vector;

}

}


kr.co.javaexpert.libs.view 패키지의

ZipSearchServlet.java

package kr.co.javaexpert.libs.view;


import java.io.IOException;

import java.io.PrintWriter;

import java.io.UnsupportedEncodingException;

import java.sql.Connection;

import java.util.Vector;


import javax.servlet.ServletContext;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;


import kr.co.javaexpert.libs.model.DBClose;

import kr.co.javaexpert.libs.model.DBConnection;

import kr.co.javaexpert.libs.model.ZipcodeVO;

import kr.co.javaexpert.libs.service.ZipSearchService;


public class ZipSearchServlet extends HttpServlet{

private Connection conn;

public void init() throws ServletException{

ServletContext context = this.getServletContext();

this.conn = DBConnection.getConnection(context.getRealPath("/"));

}

private String entoutf8(String en){

String utf8 = null;

try{

utf8 = new String(en.getBytes("ISO8859_1"), "utf-8");

}catch(UnsupportedEncodingException e){}

return utf8;

}

public void doGet(HttpServletRequest req, HttpServletResponse resp)

     throws ServletException, IOException{

String keyword = req.getParameter("keyword");

if(keyword == null) keyword = "";

else keyword = this.entoutf8(keyword);

Vector<ZipcodeVO> vector = null;

if(!keyword.equals("")){   //두번째 페이지라면

ZipSearchService zip = new ZipSearchService();

vector = zip.select(this.conn, keyword);

}

resp.setContentType("text/html;charset=utf-8");

PrintWriter out = resp.getWriter();

out.println("<!doctype html>");

out.println("<html lang=\"ko\">");

out.println("<head>");

out.println("  <meta charset=\"UTF-8\">");

out.println("  <title>우편번호검색창</title>");

out.println("<style>");

out.println("h1 { text-align:center;}");

out.println("table { margin:auto;border-collapse:collapse; padding:10px;border:1px solid black;");

out.println("          width:500px;}");

out.println("td{  text-align:center;padding:10px}");

out.println(" input[type='text']{ background-color:yellow;font-size:1.2em;color:red;}");

out.println("  </style>");

out.println("<script>");

out.println("window.onload=setup;");

out.println("   function setup(evt){");

out.println("       document.getElementById('btn2').addEventListener('click', myclick, false);");

out.println("   }");

out.println("   function myclick(evt){");

out.println("       var ziplist = document.getElementById('ziplist');");

out.println("       var str = ziplist.options[ziplist.selectedIndex].value;");

out.println("       opener.document.getElementById('zip1').value = str.substr(1,3);");

out.println("       opener.document.getElementById('zip2').value = str.substr(5,3);");

out.println("       opener.document.getElementById('address1').value = str.substr(10);");

out.println("       window.close();");

out.println("   }");

out.println("</script>");

out.println(" </head>");

out.println(" <body>");

out.println(" <h1>우편번호 검색</h1>");

out.println(" <form method=\"get\">");

out.println(" <table>");

out.println(" <caption>찾고자 하시는 동/읍/면 이름을 입력하세요.</caption>");

out.println(" <tr>");

out.println(" <td>동/읍/면 이름 :"); 

out.println(" <input type=\"text\" id=\"keyword\" autofocus name=\"keyword\" value='" + keyword + "'>&nbsp;&nbsp;");

out.println(" <input type=\"submit\" value=\"검색하기\">");

out.println(" </tr>");

if(vector != null && vector.size() == 0){

out.println("<script type='text/javascript'>");

out.println("alert('검색결과가 없습니다. 확인 후 다시 입력해 주세요');");

out.println("history.go(-1);");

out.println("</script>");

}else if(vector != null && vector.size() > 0){ //검색결과가 있다면

out.println(" <tr>");

out.println("                 <td>");

out.println(" <select id=\"ziplist\" style='width:550px'>");

out.println(" <option>--선택--</option>");

for(int i = 0 ; i < vector.size() ; i++){

ZipcodeVO zip = vector.get(i);

String str = zip.toString() + " " + zip.getBunji();

out.println("<option value='" + zip.toString() + "'>" + str + "</option>");

}

out.println(" </select>");

out.println(" </td>");

out.println(" </tr>");

}

out.println(" <tr>");

out.println(" <td><input type=\"button\" value=\"닫기\" id=\"btn2\"></td>");

out.println(" </tr>");

out.println(" </table>");

out.println(" </form>");

out.println(" </body>");

out.println("</html>");

out.close();

}

public void destroy(){

DBClose.close(this.conn);

}

}


zipsearch.js

window.addEventListener("load", setup, false);


function setup(evt){

document.getElementById("btn1").addEventListener("click", myclick, false);

}


function myclick(evt){

window.open("/0612/servlet/ZipSearch", "", "width=600,height=300,left=400,top=400,menubar=no,resizable=no,scrollbars=yes");

}


web.xml

  <display-name>Welcome to 0612 Web Project </display-name>

  <description>

     Welcome to Tomcat

  </description>

  

  <servlet>

  <servlet-class>kr.co.javaexpert.libs.view.ZipSearchServlet</servlet-class>

  <servlet-name>Zipsearch</servlet-name>

  </servlet>

  <servlet-mapping>

  <servlet-name>Zipsearch</servlet-name>

  <url-pattern>/servlet/ZipSearch</url-pattern>

  </servlet-mapping>

</web-app>


style.css

@CHARSET "utf-8";


fieldset{

width:700px; border:1px dotted red;

margin:auto;

}

legend{

font-weight:900;

color:blue;

font-size:1.5em;

}

input[type="text"]{

background-color:yellow;

font-size:1.5em;

}

input[type="button"]{

background-color:green;   font-size:20pt;

}


dbinfo.properties

DBDRIVER=oracle.jdbc.driver.OracleDriver

DBURL=jdbc:oracle:thin:@192.168.89.130:1521:orcl

DBUSER=scott

DBPWD=tiger


우분투에서 server.xml 고쳐주고,

작업한 것을 우분투 바탕화면으로 옮기고,

sudo mv /home/mino/Desktop/*.* /WebHome/0612

sudo mv /home/mino/Desktop/* /WebHome/0612

sudo /usr/local/tomcat7/bin/shutdown.sh

sudo /usr/local/tomcat7/bin/startup.sh

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

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

성적관리프로그램

SQLGATE에서

CREATE TABLE Student

(

  hakbun CHAR(4) PRIMARY KEY,

  irum VARCHAR2(10),

  kor NUMBER(3) NOT NULL,

  eng NUMBER(3) NOT NULL,

  mat NUMBER(3) NOT NULL,

  edp NUMBER(3) NOT NULL,

  tot NUMBER(3),

  AVG NUMBER(6,2),

  grade CHAR(1)

);

실행 해서 테이블 만들어주고

kr.co.javaexpert.libs.model에서

DBClose.java

package kr.co.javaexpert.libs.model;


import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;


public class DBClose {

public static void close(Connection conn){

try {

if(conn != null) conn.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

}


DBConeection.java

package kr.co.javaexpert.libs.model;


import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;


public class DBClose {

public static void close(Connection conn){

try {

if(conn != null) conn.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

}


StudentDAO.java

package kr.co.javaexpert.libs.model;


import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import java.util.Vector;


public class StudentDAO {

public static Vector<StudentDTO> selectAll(Connection conn)

throws SQLException {

Statement stmt = conn.createStatement();

ResultSet rs = stmt.executeQuery("SELECT * FROM Student ORDER BY tot DESC");

Vector<StudentDTO> vector = new Vector<StudentDTO>(1,1);

while(rs.next()){

StudentDTO student = new StudentDTO();

student.setHakbun(rs.getString("hakbun"));

student.setIrum(rs.getString("irum"));

student.setKor(rs.getInt("kor"));

student.setEng(rs.getInt("eng"));

student.setMat(rs.getInt("mat"));

student.setEdp(rs.getInt("edp"));

student.setTot(rs.getInt("tot"));

student.setAvg(rs.getDouble("avg"));

student.setGrade(rs.getString("grade").charAt(0));

vector.addElement(student);

}

if(rs != null) rs.close();

if(stmt != null) stmt.close();

return vector;

}

public static void insert(Connection conn, StudentDTO student)

throws SQLException {

StringBuffer sb = new StringBuffer();

sb.append("INSERT INTO Student VALUES(?,?,?,?,?,?,?,?,?)");

PreparedStatement pstmt = conn.prepareStatement(sb.toString());

pstmt.setString(1, student.getHakbun());

pstmt.setString(2, student.getIrum());

pstmt.setInt(3, student.getKor());

pstmt.setInt(4, student.getEng());

pstmt.setInt(5, student.getMat());

pstmt.setInt(6, student.getEdp());

pstmt.setInt(7, student.getTot());

pstmt.setDouble(8, student.getAvg());

pstmt.setString(9, String.valueOf(student.getGrade()));

pstmt.executeUpdate();

if(pstmt != null) pstmt.close();

}

}



StudentDTO.java

package kr.co.javaexpert.libs.model;


public class StudentDTO {

private String hakbun;

private String irum;

private int kor,eng,mat,edp,tot;

private double avg;

private char grade;

public StudentDTO() { }

public StudentDTO(String hakbun, String irum, int kor, int eng, int mat, int edp) {

this.hakbun = hakbun;

this.irum = irum;

this.kor = kor;

this.eng = eng;

this.mat = mat;

this.edp = edp;

}

public String getHakbun() {

return hakbun;

}

public void setHakbun(String hakbun) {

this.hakbun = hakbun;

}

public String getIrum() {

return irum;

}

public void setIrum(String irum) {

this.irum = irum;

}

public int getKor() {

return kor;

}

public void setKor(int kor) {

this.kor = kor;

}

public int getEng() {

return eng;

}

public void setEng(int eng) {

this.eng = eng;

}

public int getMat() {

return mat;

}

public void setMat(int mat) {

this.mat = mat;

}

public int getEdp() {

return edp;

}

public void setEdp(int edp) {

this.edp = edp;

}

public int getTot() {

return tot;

}

public void setTot(int tot) {

this.tot = tot;

}

public double getAvg() {

return avg;

}

public void setAvg(double avg) {

this.avg = avg;

}

public char getGrade() {

return grade;

}

public void setGrade(char grade) {

this.grade = grade;

}

}


Calc.java

package kr.co.javaexpert.libs.model;


public class Calc {

private StudentDTO student;

public Calc(StudentDTO student){

this.student = student;

}

public void calc(){

int sum = this.getSum(this.student.getKor(), this.student.getEng(),

                         this.student.getMat(), this.student.getEdp());

this.student.setTot(sum);

double avg = this.getAvg(sum);

this.student.setAvg(avg);

char grade = this.getGrade(avg);

this.student.setGrade(grade);

}

private int getSum(int kor, int eng, int mat, int edp){

return kor + eng + mat + edp;

}

private double getAvg(int sum){

return sum / 4.;

}

private char getGrade(double avg){

char grade = '\0';

switch((int)(avg / 10)){

case 10:

case 9:    grade = 'A'; break;

case 8:    grade = 'B'; break;

case 7:    grade = 'C'; break;

case 6:    grade = 'D'; break;

default:    grade = 'F'; break;

}

return grade;

}

}


kr.co.javaexpert.libs.service에서

InsertService.java

package kr.co.javaexpert.libs.service;


import java.sql.Connection;

import java.sql.SQLException;


import kr.co.javaexpert.libs.model.StudentDAO;

import kr.co.javaexpert.libs.model.StudentDTO;


public class InsertService {

public void insert(Connection conn, StudentDTO student){

try{

StudentDAO.insert(conn, student);

}catch(SQLException ex){

System.out.println(ex.toString());

}

}

}

SelectService.java

package kr.co.javaexpert.libs.service;


import java.sql.Connection;

import java.sql.SQLException;

import java.util.Vector;


import kr.co.javaexpert.libs.model.StudentDAO;

import kr.co.javaexpert.libs.model.StudentDTO;


public class SelectService {

public Vector<StudentDTO> selectAll(Connection conn){

Vector<StudentDTO> vector = null;

try{

vector = StudentDAO.selectAll(conn);

}catch(SQLException ex){

System.out.println(ex.toString());

}

return vector;

}

}


kr.co.javaexpert.libs.view에서

InsertServlet.java

package kr.co.javaexpert.libs.view;


import java.io.IOException;

import java.io.PrintWriter;

import java.sql.Connection;


import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;


import kr.co.javaexpert.libs.model.Calc;

import kr.co.javaexpert.libs.model.DBClose;

import kr.co.javaexpert.libs.model.DBConnection;

import kr.co.javaexpert.libs.model.StudentDTO;

import kr.co.javaexpert.libs.service.InsertService;


public class InsertServlet extends HttpServlet {

public void doPost(HttpServletRequest req, HttpServletResponse res)

throws ServletException, IOException{

req.setCharacterEncoding("utf-8");

String hakbun = req.getParameter("hakbun");

String irum = req.getParameter("irum");

int kor = Integer.parseInt(req.getParameter("kor").trim());

int eng = Integer.parseInt(req.getParameter("eng").trim());

int mat = Integer.parseInt(req.getParameter("mat").trim());

int edp = Integer.parseInt(req.getParameter("edp").trim());

String path = this.getServletContext().getRealPath("/");

Connection conn = DBConnection.getConnection(path);

StudentDTO student = 

new StudentDTO(hakbun, irum, kor, eng, mat, edp);

Calc calc = new Calc(student);

calc.calc();  //진짜 계산

InsertService is = new InsertService();

is.insert(conn, student);

DBClose.close(conn);

res.setContentType("text/html;charset=utf-8");

PrintWriter out = res.getWriter();

out.println("<!DOCTYPE html>");

out.println("<html lang=\"ko\">");

out.println("<script>");

out.println("alert(\"Insert Success\");");

out.println(" location.replace('/SungjukMgmt/servlet/List');");

out.println("</script>");

out.println("</html>");

out.close();

}

}



ListServlet.java

package kr.co.javaexpert.libs.view;


import java.io.IOException;

import java.io.PrintWriter;

import java.sql.Connection;

import java.util.Vector;


import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;


import kr.co.javaexpert.libs.model.DBClose;

import kr.co.javaexpert.libs.model.DBConnection;

import kr.co.javaexpert.libs.model.StudentDTO;

import kr.co.javaexpert.libs.service.SelectService;


public class ListServlet extends HttpServlet {

private Connection conn;

private String path;

@Override

public void init() throws ServletException{

path = this.getServletContext().getRealPath("/");

conn = DBConnection.getConnection(path);

}

@Override

public void doGet(HttpServletRequest req, HttpServletResponse res)

throws ServletException, IOException{

SelectService ss = new SelectService();

Vector<StudentDTO> vector = ss.selectAll(this.conn);

res.setContentType("text/html;charset=utf-8");

PrintWriter out = res.getWriter();

out.println("<!doctype html>");

out.println("<html lang=\"ko\">");

out.println("<head>");

out.println(" <meta charset=\"UTF-8\">");

out.println(" <title>성적관리프로그램</title>");

out.println(" <link rel=\"stylesheet\" href='/SungjukMgmt/css/style.css'>");

out.println("</head>");

out.println("<body>");

out.println(" <h1>성적데이터 목록</h1>");

out.println(" <table>");

out.println(" <tr>");

out.println(" <td class=\"left\">[<a href=\"/SungjukMgmt/insert.html\">학생데이터입력</a>]</td>");

out.print(" <td class=\"right\">");

if(vector == null || vector.size() == 0) 

out.println("0명</td>");

else

out.println(vector.size() + "명</td>");

out.println(" </tr>");

out.println(" </table>");

out.println(" <table>");

out.println(" <caption>자바고등학교 3학년 2반 성적데이터</caption>");

out.println(" <thead>");

out.println(" <tr>");

out.println(" <th>학번</th>");

out.println(" <th>이름</th>");

out.println(" <th>국어</th>");

out.println(" <th>영어</th>");

out.println(" <th>수학</th>");

out.println(" <th>전산</th>");

out.println(" <th>총점</th>");

out.println(" <th>평균</th>");

out.println(" <th>학점</th>");

out.println(" </tr>");

out.println(" </thead>");

out.println("   <tbody>");

if(vector == null || vector.size() == 0){

out.println("<td colspan=\"9\">데이터가 없습니다.</td>");

}else{   //데이터가 있다면

for(int i = 0 ; i < vector.size() ; i++){

StudentDTO student = vector.get(i);

out.println("<tr>");

out.println("<td>" + student.getHakbun() + "</td>");

out.println("<td>" + student.getIrum() + "</td>");

out.println("<td>" + student.getKor() + "</td>");

out.println("<td>" + student.getEng() + "</td>");

out.println("<td>" + student.getMat() + "</td>");

out.println("<td>" + student.getEdp() + "</td>");

out.println("<td>" + student.getTot() + "</td>");

out.println("<td>" + student.getAvg() + "</td>");

out.println("<td>" + student.getGrade() + "</td>");

out.println("</tr>");

}

}

out.println("</tbody>");

out.println(" </table>");

out.println(" </body>");

out.println("</html>");

out.close();

}

@Override

public void destroy(){

DBClose.close(conn);

}

}

style.css

@CHARSET "utf-8";


h1 { text-align:center;}

table { margin:auto;width:900px;border-width:0px;  }

.left { text-align:left;}

.right{ text-align:right;}

table:last-child{

border-collapse:collapse; padding:10px; border:1px solid white;

}

table:last-child th, table:last-child td{

border:1px solid white;text-align:center;

}

table:last-child caption{

font-size:1.5em; margin-bottom:10px;

}

table:last-child tr{

height:30px; background-color:darkblue;color:white;

}

table:last-child td{

background-color:white;height:25px;color:black;

}


web.xml

<?xml version="1.0" encoding="utf-8"?>


<web-app xmlns="http://java.sun.com/xml/ns/javaee"

  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

                      http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"

  version="3.0"

  metadata-complete="true">


  <display-name>성적관리프로그램</display-name>

  <description>

     Welcome to Tomcat

  </description>

  

  <servlet>

  <servlet-class>kr.co.javaexpert.libs.view.ListServlet</servlet-class>

  <servlet-name>List</servlet-name>

  </servlet>

  <servlet>

  <servlet-class>kr.co.javaexpert.libs.view.InsertServlet</servlet-class>

  <servlet-name>Insert</servlet-name>

  </servlet>

  <servlet-mapping>

  <servlet-name>Insert</servlet-name>

  <url-pattern>/servlet/Insert</url-pattern>

  </servlet-mapping>

  <servlet-mapping>

  <servlet-name>List</servlet-name>

  <url-pattern>/servlet/List</url-pattern>

  </servlet-mapping>

</web-app>


insert.html

<!doctype html>

<html lang="en">

 <head>

  <meta charset="UTF-8">

  <title>성적데이터 입력창</title>

  <style>

h1{text-align:center;}

table{margin:auto;border-collapse:collapse; border:1px solid orange;}

th,td{ border: 1px solid white;padding:5px;}

td:last-child { text-align:center;}

th{font-size:1.2em; background-color:yellow;width:80px;}

input[type="text"]{

font-size:1.3em;background-color:#ffcccc;

}

input[type='submit']{

font-size:1.3em;background-color:#00ff99;

}

input[type='reset']{

font-size:1.3em;background-color:#ffcc99;

}

  </style>

 </head>

 <body>

<h1>성적데이터 입력</h1>

<form method="post" action="/SungjukMgmt/servlet/Insert">

<table>

<tr>

<th>학번</th>

<td><input type="text" name="hakbun" required autofocus></td>

</tr>

<tr>

<th>이름</th>

<td><input type="text" name="irum" required></td>

</tr>

<tr>

<th>국어</th>

<td><input type="text" name="kor" required></td>

</tr>

<tr>

<th>영어</th>

<td><input type="text" name="eng" required></td>

</tr>

<tr>

<th>수학</th>

<td><input type="text" name="mat" required></td>

</tr>

<tr>

<th>전산</th>

<td><input type="text" name="edp" required></td>

</tr>

<tr>

<td colspan="2"></td>

</tr>

<tr>

<td colspan="2">

<input type="submit" value="입력하기">&nbsp;&nbsp;&nbsp;

<input type="reset" value="다시하기">

</td>

</tr>

</table>

</form>

 </body>

</html>


이클립스에 tomcat 을 깔자.

tomcat plugin 검색해서

http://www.eclipsetotale.com/tomcatPlugin.html 접속.

tomcatPluginV33.zip 다운. 알집 풀고

com.sysdeo.eclipse.tomcat_3.3.0 폴더 복사해서

C:\Program Files\Eclipse\eclipse\dropins 위치에 붙여넣어줌.

이클립스 켜서 window-preference 켜서 왼쪽 Tomcat 선택해서 

Version 7.x 선택하고 Tomca home을 C:\Program Files\Apache Software Foundation\Tomcat 7.0 잡아줌.

그리고 Server.xml을 선택 하고,

왼쪽 Tomcat-Advanced 선택해서 Tmcatbase를 C:\Program Files\Apache Software Foundation\Tomcat 7.0 해주고

classpath 를 0610 0611 선택하고 

왼쪽 Tomcat-Tomcat Manager App 눌러  username : admin , password javatomcat 써서 ok 누름.

이제 이클립스로 tomcat 을 start stop 해줄거니 명령프롬프트 열어 net stop tomcat7 해주고

관리도구-Services 들어가서 Apache Tomcat 7.0 Tomcat7 을 Manual 로 바꿈.

이클립스에서 위쪽 보면 tomcat 을 start 할수 stop 할 수 있다.

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

HttpResponseDemo.java   : 바디를 보는

import java.io.BufferedReader;

import java.io.File;

import java.io.FileWriter;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.PrintWriter;

import java.net.MalformedURLException;

import java.net.URL;

import java.util.Scanner;



public class HttpResponseDemo {

public static void main(String [] args) 

throws MalformedURLException, IOException {

Scanner scan = new Scanner(System.in);

System.out.print("URL : ");

String urlStr = scan.next();

URL url = new URL(urlStr);

InputStream is = url.openStream();

BufferedReader br = new BufferedReader(

           new InputStreamReader(is));

PrintWriter pw = new PrintWriter(

new FileWriter(new File("result.dat"), true));

String line = null;

while((line = br.readLine()) != null){

pw.println(line);

pw.flush();

}

System.out.println("Save Successfully.");

br.close();

pw.close();

}

}

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

HttpResponseDemo1.java  : 헤더 및 키값

import java.io.IOException;

import java.net.MalformedURLException;

import java.net.URL;

import java.net.URLConnection;

import java.util.Iterator;

import java.util.List;

import java.util.Map;

import java.util.Scanner;

import java.util.Set;



public class HttpResponseDemo1 {

public static void main(String [] args) 

throws MalformedURLException, IOException {

Scanner scan = new Scanner(System.in);

System.out.print("URL : ");

String urlStr = scan.next();

URL url = new URL(urlStr);

URLConnection conn = url.openConnection();

Map<String,List<String>> map = conn.getHeaderFields();

Set<String> keys = map.keySet();

Iterator<String> iters = keys.iterator();

while(iters.hasNext()){

String key = iters.next();  //key

System.out.print(key + " --> ");

List<String> values = map.get(key);

for(int i = 0 ; i < values.size() ; i++){

System.out.print(values.get(i) + ",");

}

System.out.println();

}

}

}

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

HttpRequestDemo.java 

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.io.PrintWriter;

import java.net.ServerSocket;

import java.net.Socket;



public class HttpRequestDemo {

private ServerSocket server;

private Socket client;

private BufferedReader br;

private PrintWriter pw;

private HttpRequestDemo(){

try {

server = new ServerSocket(80);

System.out.println("Server is ready...");

} catch (IOException e) {

e.printStackTrace();

}

}

private void service(){

try {

client = this.server.accept();

this.br = new BufferedReader(

              new InputStreamReader(client.getInputStream()));

this.pw = new PrintWriter(

              new BufferedWriter(

              new OutputStreamWriter(client.getOutputStream())));

String line = null;

while((line = br.readLine()) != null){

System.out.println(line);

}

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} finally{

try {

if(br != null) br.close();

if(pw != null) pw.close();

if(client != null) client.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

public static void main(String[] args) {

new HttpRequestDemo().service();

}

}

//실행시키고 웹브라우저에서 localhost 들어가면 정보가 뜸. localhost/0610/member.html 들어가면 다르게.

Http Response Packet 과 Http Request Packet은 첫줄만 살펴보면

HTTP/1.1 200 OK        GET /0610/member.html HTTP/1.1

이런식으로 나온다.

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

http://tomcat.apache.org/ 사이트이동.

Documentation에 Tomcat7.0 선택.

Reference에 Servlet 3.0 Specification 클릭.

To download the specification for building an implementation, click here: 에 Download 선택.

servlet-3_0-final-spec.pdf 와  servlet-3_0-final-javadoc.zip 다운.

zip파일을 알집풀고 C:\Program Files\Java 에 이동시켜줌.


C:\Program Files\Apache Software Foundation\Tomcat 7.0\conf 에 server.xml에 

<Context path="/0611" docBase="D:/WebHome/0611" debug="0" reloadable="true" crossContext="true" previleged="true" /> 를 추가 해서 

0611 폴더에 servlet을 사용할 수 있게.


tomcat 플러그인을 사용하면 C:\Program Files\Apache Software Foundation\Tomcat 7.0\logs 에 기록을 안함.

그래서 실행시 명령프롬프트에서 net start tomcat7 해주고 실행해야 로그파일을 만듬.


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

CoreServlet.java

package kr.co.javaexpert.libs;


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 CoreServlet extends HttpServlet {

private String filename;

public void init() throws ServletException{

filename = this.getInitParameter("countfile");

System.out.println("파일명 :  " + filename);

}

public void doGet(HttpServletRequest req, HttpServletResponse res)

throws IOException, ServletException{

res.setContentType("text/html;charset=utf-8");

PrintWriter out = res.getWriter();

out.println("<font size='7'>파일명 : ");

out.println("<font color='red'>" + filename + "</font></font>");

out.close();

}

}


web.xml

  <display-name>Welcome to 0611 Web Project </display-name>

  <description>

     Welcome to Tomcat

  </description>

  

  <servlet>

  <servlet-class>kr.co.javaexpert.libs.CoreServlet</servlet-class>

  <servlet-name>Count</servlet-name>

  <init-param>

  <param-name>countfile</param-name>

  <param-value>/WEB-INF/count.dat</param-value>

  </init-param>

  </servlet>

  <servlet-mapping>

  <servlet-name>Count</servlet-name>

  <url-pattern>/servlet/Count</url-pattern>

  </servlet-mapping>

</web-app>

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

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

CallbackServlet.java

/*

 * Servlet's Lifecycle

 * 1. init() --> service() --> doGet(), doPost() --> destroy()

 * 2. init : 처음 서블릿이 WAS 서버의 메모리에 로딩될 때, 초기화작업을 수행, 

 *            파일열기, 디비열기...

 *            일단 메모리에 로딩되면 메모리에 계속 남아있으면서 클라이언트의 요청을 단 한번만 

 *            처리함.

 * 3. service : GET방식 혹은 POST 방식에 따라서 doGet(), doPost() 를 호출

 *                 클라이언트가 F5 혹은 리프레쉬버튼을 클릭할 때 마다 호출

 * 4. destroy : 메모리에서 언로드되기 전, 단 한번만 호출

 *     1)Container가 종료할 때(Stop Tomcat)

 *     2)http://localhost:8080/manager/html 창에서 해당 context 를 

 *        reload 버튼을 클릭할 때

 *     3)소스가 수정됐을 때                              

 */

package kr.co.javaexpert.libs;


import java.io.IOException;


import javax.servlet.ServletConfig;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

import javax.servlet.http.HttpServlet;


public class CallbackServlet extends HttpServlet{

private int initCount = 1;

private int serviceCount = 1;

private int destroyCount = 1;

public void init(ServletConfig config) throws ServletException{

System.out.println("init() 호출 : " + initCount++);

}

public void service(ServletRequest req, ServletResponse res)

     throws ServletException, IOException{

System.out.println("service() 호출 : " + serviceCount++);

}

public void destroy(){

System.out.println("destroy() 호출 : " + destroyCount++);

}

}

web.xml

 <display-name>Welcome to 0611 Web Project </display-name>

  <description>

     Welcome to Tomcat

  </description>

  

  <servlet>

  <servlet-class>kr.co.javaexpert.libs.CoreServlet</servlet-class>

  <servlet-name>Count</servlet-name>

  <init-param>

  <param-name>countfile</param-name>

  <param-value>/WEB-INF/count.dat</param-value>

  </init-param>

  </servlet>

  <servlet>

  <servlet-class>kr.co.javaexpert.libs.CallbackServlet</servlet-class>

  <servlet-name>Callback</servlet-name>

  </servlet>

  <servlet-mapping>

  <servlet-name>Callback</servlet-name>

  <url-pattern>/servlet/Callback</url-pattern>

  </servlet-mapping>

  <servlet-mapping>

  <servlet-name>Count</servlet-name>

  <url-pattern>/servlet/Count</url-pattern>

  </servlet-mapping>

</web-app>

실행하면 init은 1, service는 1이로 시작하지만, 계속 refresh하면 service만 계속해서 증가.

그리고 http://localhost:8080/manager/html 들어가서 /0611을 reload 하면 destroy가 1이되고 나머지는 모두 초기화된다.

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

CallbackServlet.java

package kr.co.javaexpert.libs;


import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;


import javax.servlet.ServletConfig;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

import javax.servlet.http.HttpServlet;


public class CallbackServlet extends HttpServlet{

private int initCount = 1;

private int serviceCount = 1;

private int destroyCount = 1;

private String fileName;

private FileOutputStream fileStream;

public void init() throws ServletException{

this.fileName = this.getInitParameter("file");

try {

this.fileStream = new FileOutputStream(this.fileName);

String str = "\r\ninit() Called --> " + this.initCount++;

this.fileStream.write(str.getBytes());

} catch (IOException e) {

System.out.println(e.toString());

}

}

public void service(ServletRequest req, ServletResponse res)

     throws ServletException, IOException{

try{

this.fileStream.write(String.valueOf("\r\nservice() called --> " + 

                  this.serviceCount++).getBytes());

}catch(IOException ex){

System.out.println(ex.toString());

}

}

public void destroy(){

try {

this.fileStream.write(

String.valueOf("\r\ndestroy() called --> " + this.destroyCount++)

.getBytes());

this.fileStream.close();

} catch (IOException e) {

System.out.println(e.toString());

}

}

}

그러면 D드라이브에 Downloads에 lifecycle.txt의 내용이 바뀜.

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

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

오라클 깔려있는 CentOS 켜서

su

system-config-firewall

other ports 에서 1521포트를 찾아 apply 해줌.

윈도우즈에서 SQLGATE 실행해서 아이피번호로 접속해서 접속 확인.


ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

Emp 테이블 불러오기

EmpSelect.java

package kr.co.javaexpert.libs;


import java.io.IOException;

import java.io.PrintWriter;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;


import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;


public class EmpSelect extends HttpServlet{

public void doGet(HttpServletRequest req, HttpServletResponse res)

throws IOException, ServletException{

Connection conn = null;

Statement stmt = null;

ResultSet rs = null;

try{

Class.forName("oracle.jdbc.driver.OracleDriver");

}catch(ClassNotFoundException ex){

System.out.println("Class Not Found");

}

try{

conn = DriverManager.getConnection(

"jdbc:oracle:thin:@192.168.89.130:1521:orcl", 

"scott", "tiger");

}catch(SQLException ex){

System.out.println("Connection Failure");

}

try{

stmt = conn.createStatement();

//rs = stmt.executeQuery("SELECT sysdate FROM dual");

rs = stmt.executeQuery("SELECT * FROM emp");

}catch(SQLException ex){

System.out.println(ex.toString());

}

res.setContentType("text/html;charset=utf-8");

PrintWriter out = res.getWriter();

out.println("<style>");

out.println("table { margin:auto;border-collapse:collapse; width:800px;}");

out.println("th, td { border:1px solid black;text-align:center }");

out.println("</style>");

out.println("<table><thead><th>사번</th><th>사원이름</th>");

out.println("<th>업무</th><th>매니저</th><th>입사일</th>");

out.println("<th>봉급</th><th>보너스</th><th>부서번호</th></thead>");

try{

out.println("<tbody>");

while(rs.next()){

out.println("<tr>");

out.print("<td>" + rs.getInt("empno") + "</td>");

out.print("<td>" + rs.getString("ename") + "</td>");

out.print("<td>" + rs.getString("job") + "</td>");

out.print("<td>" + rs.getInt("mgr") + "</td>");

out.print("<td>" + rs.getDate("hiredate") + "</td>");

out.print("<td>" + rs.getDouble("sal") + "</td>");

out.print("<td>" + rs.getDouble("comm") + "</td>");

out.print("<td>" + rs.getInt("deptno") + "</td>");

out.println("</tr>");

}

out.println("</tbody></table>");

}catch(SQLException ex){

System.out.println(ex.toString());

}

try{

if(rs != null) rs.close();

if(stmt != null) stmt.close();

if(conn != null) conn.close();

}catch(SQLException ex){

System.out.println(ex.toString());

}

out.close();

}

public void doPost(HttpServletRequest req, HttpServletResponse res)

throws IOException, ServletException{

this.doGet(req, res);

}

}

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

vmware.com->다운로드-> workstation10 버전 다운.

깔고 우분투 centos 올리고

우분투에서

sudo /usr/local/tomcat7/bin/startup.sh

sudo service httpd start

센트오에스에서

su - oracle

sqlplus /nolog

conn sys as sysdba

startup

만약 메모리 조정을 2gb->1gb 로 할 경우

df -li

mount -t tmpfs shmfs -o size=1g /dev/shm

df -li

sqlplus / as sysdba

startup 하면 됨

-------

다시 우분투에서 cd /WebHome 

sudo mkdir 0611

sudo chmod 755 0611 -R

sudo cp -r WEB-INF 0611/

cd 0611

cd WEB-INF

cd classes

sudo rm He*.class  //classes 폴더안에 있는 class파일 삭제.

cd ..

sudo rm web.xml

sudo mkdir lib

cd 0611

오늘 수업했던 파일들 우분투 바탕화면으로 가져와서

sudo cp /home/mino/Desktop/lib .

sudo cp /home/mino/Desktop/web.xml .

sudo cp -r /home/mino/Desktop/kr .

sudo chmod 755 web.xml

cd ..

cd ..

cd ..

cd /usr/local/tomcat7/conf

sudo gedit server.xml

들어가서 <Host name="localhost" appBase="webapps~~~~~> 밑에 

<Context path="/0611" docBase="/WebHome/0611" debug="0" reloadable="true" crossContext="true" previleged="true" />  를 추가

cd ..

cd bin

sudo ./shutdown.sh

sudo ./startup.sh

그리고 윈도우에서 http://192.168.89.131:8080/manager/html 로 접속.

ID : admin   , 비번: javatomcat

http://192.168.89.131/0611/servlet/EmpSelect



+ Recent posts