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

Servlet & JSP 연동 (모델2방식)



1. 모델1 방식 (JSP만 이용하는 경우)

- JSP 페이지와 자바빈 클래스로 구성된 모델.

- JSP 페이지의 역할은 클라이언트와의 데이터 송수신 액션을 담당.

- 자바빈 클래스는 데이터베이스와의 데이터 입출력 액션을 담당.


2. 모델2 방식 (Servlet과 JSP가 혼용된 경우)

- JSP 페이지와 Servlet, 자바빈 클래스로 구성된 모델.

- Servlet은 클라이언트와의 데이터 송수신 액션을 담당. 데이터베이스 액션. 결과를 JSP 페이지로 전달해서 결과 출력.

- JSP 페이지는  받은 결과를 출력하는 액션.

- 자바빈은 Servlet로부터 JSP페이지로 결과를 전달하는 과정에서 결과 저장용 객체 역할.

- MVC 패턴이라고도 한다.


3. 모델2방식 샘플 작성

//Sample01.java -> 서블릿 클래스

package com.test;


import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;


/* 메인 페이지(web.xml의 서블릿 주소 이용해서 요청할 것) */

public class Sample01 extends HttpServlet {


private static final long serialVersionUID = 1L;


@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

//사용자 정의 메소드 호출 부분 추가

doGetPost(req, resp);

}


@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

//사용자 정의 메소드 호출 부분 추가

doGetPost(req, resp);

}

//사용자 정의 메소드 (doGet, doPost 메소드에 대한 통합 액션)

private void doGetPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

String msg = "Hello, Model2 World!";

//출력 액션->JSP 페이지 담당

//msg 변수의 데이터를 JSP 페이지로 전송하는 과정 필요

//->변수의 데이터를 자바빈 객체에 저장

//->forward() 메소드

request.setAttribute("msg", msg);

RequestDispatcher dispatcher = request.getRequestDispatcher("Sample01.jsp");

dispatcher.forward(request, response);

}


}






//Sample01.jsp

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

    pageEncoding="UTF-8"%>

<%-- 출력 액션 담당 (직접 요청하지 말 것) --%>    

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>    

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>


</head>

<body>

<div>

<%-- 데이터 수신 과정 필요+메시지 출력 부분 추가 --%>

${msg}

</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">

 

  <!-- 서블릿 주소 등록 -->

  <servlet>

  <servlet-name>sample01</servlet-name>

  <servlet-class>com.test.Sample01</servlet-class>

  </servlet>

  <servlet-mapping>

  <servlet-name>sample01</servlet-name>

  <url-pattern>/Sample01</url-pattern>

  </servlet-mapping>

 

</web-app>





//요청주소 (JSP 페이지 요청하지 않는다. 서블릿 주소로 요청한다)

http://localhost:8090/Servlet_20141219/Sample01



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

문제) 구구단 중에서 5단 출력(Model2 방식)


5 * 1 = 5

5 * 2 = 10

...

5 * 9 = 45



//Sample02.java -> 서블릿 클래스. 출력을 제외한 나머지 모든 액션 담당.

package com.test;


import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;


/* 메인 페이지(web.xml의 서블릿 주소 이용해서 요청할 것) */

public class Sample02 extends HttpServlet {


private static final long serialVersionUID = 1L;


@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

//사용자 정의 메소드 호출 부분 추가

doGetPost(req, resp);

}


@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

//사용자 정의 메소드 호출 부분 추가

doGetPost(req, resp);

}

//사용자 정의 메소드 (doGet, doPost 메소드에 대한 통합 액션)

private void doGetPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

StringBuilder sb = new StringBuilder();

int gugudan = 5;

for (int i=1; i<=9; i++) {

sb.append(String.format("%d * %d = %d <br>%n"

, gugudan, i, (gugudan*i)));

}

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

//출력 액션->JSP 페이지 담당

//sb 변수의 데이터를 JSP 페이지로 전송하는 과정 필요

//->변수의 데이터를 자바빈 객체에 저장

//->forward() 메소드

request.setAttribute("sb", sb);

RequestDispatcher dispatcher = request.getRequestDispatcher("Sample02.jsp");

dispatcher.forward(request, response);

}


}







//Sample02.jsp -> JSP 페이지. 출력 액션 담당.

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

    pageEncoding="UTF-8"%>

<%-- 출력 액션 담당 (직접 요청하지 말 것) --%>       

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>    

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>


</head>

<body>

<div>

<%-- 데이터 수신 과정 필요+메시지 출력 부분 추가 --%>

${sb}

</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>SampleProject</display-name>

  <welcome-file-list>

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

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

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

    <welcome-file>default.html</welcome-file>

    <welcome-file>default.htm</welcome-file>

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

  </welcome-file-list>

  

  <!-- 서블릿 주소 등록 -->

  <!--  

  <servlet>

  <servlet-name>서블릿식별자</servlet-name>

  <servlet-class>패키지이름.클래스이름</servlet-class>

  </servlet>

  <servlet-mapping>

  <servlet-name>서블릿식별자</servlet-name>

  <url-pattern>/사용자요청주소</url-pattern>

  </servlet-mapping>

  -->  

  

  <servlet>

  <servlet-name>sample02</servlet-name>

  <servlet-class>com.test.Sample02</servlet-class>

  </servlet>

  <servlet-mapping>

  <servlet-name>sample02</servlet-name>

  <url-pattern>/Sample02</url-pattern>

  </servlet-mapping>



</web-app>





//요청주소 (JSP 페이지 요청하지 않는다. 서블릿 주소로 요청한다)

http://localhost:8090/Servlet_20141219/Sample02





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

데이터 송수신 테스트(Model2 방식)



1. 클라이언트가 작성한 데이터를 서버로 전송하고, Servlet 프로그램을 통해서 수신하는 과정.


2. POST, GET 방식 전송 방법중 하나를 선택.


POST 방식 전송인 경우 form 태그에서 method="" 속성을 post로 지정.

다량의 데이터 전송시 사용.

한글 데이터 전송시 이 방법을 사용해야 올바르게 전송 및 수신할 수 있다.

<form action="서블릿주소" method="post">

<!--회원가입 항목 준비-->

<input type="text" name="식별자">

<input type="submit" value="회원가입">

</form>




action="" 속성에서 서블릿주소를 아래와 같은 방법으로 기입.

상대 URL -> 현재 서블릿주소를 기준으로 상대적 위치를 표시하고 요청 주소를 적는 것.

예를 들어,

현재 서블릿주소와 요청 주소 페이지가 같은 디렉토리에 존재한다면

action="서블릿주소"



name="식별자" 속성은 서버에서 데이터 수신시 식별자로 사용한다. 

예를 들어,

String 변수 = request.getParameter("식별자");


<input type="submit"> 클라이언트가 입력한 데이터를 서버로 전송하는 액션 전용 버튼. 대체 수단으로 Javascript에서 submit() 메소드를 이용할 수 있다.



GET 방식 전송인 경우 a 태그에서 href="" 속성에 요청 주소 작성시

"서블릿주소?식별자=데이터&식별자=데이터 ..." 형식으로 작성.

? 이후 문자열에는 특수문자나, 공백등을 삽입하면 수신하는 과정에서 인식 불가.

예를 들어,

<a href="http://news.naver.com/main/read.nhn?mode=LSD&mid=shm&sid1=105&oid=001&aid=0006938838">네이버 뉴스 페이지</a>


GET 방식으로 전송된 데이터를 서버에서 데이터 수신시 식별자를 사용한다. 

예를 들어,

String 변수 = request.getParameter("식별자");



3. 서블릿 페이지에서 데이터를 수신하려면 doGet(), doPost() 메소드에서 지정한 HttpServletRequest 객체를 사용.


protected void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

String 변수 = request.getParameter("식별자");

}



protected void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

String 변수 = request.getParameter("식별자");

}


4. 프로그램 구성

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

이름 전송 및 수신 테스트(Model2 이용)


//YourName.java -> 서블릿 클래스. 요청 액션 처리.

//YourName.jsp -> JSP 페이지. 입력 폼 구성.


//Hi.java -> 서블릿 클래스. 요청 액션, 데이터 수신 액션 처리.

//Hi.jsp -> JSP 페이지. 결과 출력 페이지.


//web.xml -> 서블릿 주소 등록


//요청주소 (JSP 페이지 요청하지 않는다. 서블릿 주소로 요청한다)

http://localhost:8090/Servlet_20141219/YourName


5. 프로그램 소스 코드

//YourName.java -> 서블릿 클래스. 요청 액션 처리.

package com.test;


import java.io.*;


import javax.servlet.*;

import javax.servlet.http.*;


/* 메인 페이지(web.xml의 서블릿 주소 이용해서 요청할 것) */

public class YourName extends HttpServlet {


private static final long serialVersionUID = 1L;


@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

//사용자 정의 메소드 호출 부분 추가

doGetPost(req, resp);

}


@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

//사용자 정의 메소드 호출 부분 추가

doGetPost(req, resp);

}

//사용자 정의 메소드 (doGet, doPost 메소드에 대한 통합 액션)

private void doGetPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

//YourName.jsp 페이지 연결

RequestDispatcher dispatcher = request.getRequestDispatcher("YourName.jsp");

dispatcher.forward(request, response);

}


}







//YourName.jsp -> JSP 페이지. 입력 폼 구성.

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

    pageEncoding="UTF-8"%>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>    

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>


</head>

<body>

<div>

<form action="Hi" method="post">

이름 <input type="text" name="yourName">

<input type="submit">

</form>

</div>

</body>

</html>






//Hi.java -> 서블릿 클래스. 요청 액션, 데이터 수신 액션 처리.

package com.test;


import java.io.*;


import javax.servlet.*;

import javax.servlet.http.*;


public class Hi extends HttpServlet {


private static final long serialVersionUID = 1L;


@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

//사용자 정의 메소드 호출 부분 추가

doGetPost(req, resp);

}


@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

//사용자 정의 메소드 호출 부분 추가

doGetPost(req, resp);

}

//사용자 정의 메소드 (doGet, doPost 메소드에 대한 통합 액션)

private void doGetPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

//데이터 수신(한글 인코딩)

request.setCharacterEncoding("UTF-8");

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

//Hi.jsp 페이지 연결

request.setAttribute("yourName", yourName);

RequestDispatcher dispatcher = request.getRequestDispatcher("Hi.jsp");

dispatcher.forward(request, response);

}


}





//Hi.jsp -> JSP 페이지. 결과 출력 페이지.

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

    pageEncoding="UTF-8"%>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>    

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>


</head>

<body>

<div>

안녕하세요, ${yourName}님!

</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>SampleProject</display-name>

  <welcome-file-list>

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

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

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

    <welcome-file>default.html</welcome-file>

    <welcome-file>default.htm</welcome-file>

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

  </welcome-file-list>

  

  <!-- 서블릿 주소 등록 -->

  <!--  

  <servlet>

  <servlet-name>서블릿식별자</servlet-name>

  <servlet-class>패키지이름.클래스이름</servlet-class>

  </servlet>

  <servlet-mapping>

  <servlet-name>서블릿식별자</servlet-name>

  <url-pattern>/사용자요청주소</url-pattern>

  </servlet-mapping>

  -->  

  

  <servlet>

  <servlet-name>yourName</servlet-name>

  <servlet-class>com.test.YourName</servlet-class>

  </servlet>

  <servlet-mapping>

  <servlet-name>yourName</servlet-name>

  <url-pattern>/YourName</url-pattern>

  </servlet-mapping>


  <servlet>

  <servlet-name>hi</servlet-name>

  <servlet-class>com.test.Hi</servlet-class>

  </servlet>

  <servlet-mapping>

  <servlet-name>hi</servlet-name>

  <url-pattern>/Hi</url-pattern>

  </servlet-mapping>



</web-app>




//요청주소 (JSP 페이지 요청하지 않는다. 서블릿 주소로 요청한다)

http://localhost:8090/Servlet_20141219/YourName










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

Servlet에서의 오라클 연동 테스트 (Model2 이용)

- ojdbc6.jar 파일 WebContent>WEB-INF>lib 폴더 하위에 복사할 것.



//DBConn.java

package com.test;


import java.sql.*;


public class DBConn {


//Connection(데이터베이스 연결) 객체 저장용 변수 선언

private static Connection conn = null;

//1. 데이터베이스 연결 과정

public static Connection getConn() 

throws ClassNotFoundException, SQLException {


//Connection 객체가 생성되지 않은 경우에만

//신규 객체를 생성한다. -> SingleTone

if (conn == null) {

//데이터베이스 연결 액션(로그인 과정)

Class.forName("oracle.jdbc.driver.OracleDriver");

String url = "jdbc:oracle:thin:아이디/패스워드@211.63.89.XX:1521:xe";

conn = DriverManager.getConnection(url);

}

return conn;

}

//2. 데이터베이스 연결 종료 과정

public static void close() throws SQLException {

if (conn != null) {

conn.close();

}

conn = null; //멤버변수를 NULL 값으로 초기화

}

}






//DAOTest.java -> 서블릿 클래스. 데이터베이스 연결 액션.

package com.test;


import java.io.*;


import javax.servlet.*;

import javax.servlet.http.*;


import java.sql.*;


/* 메인 페이지(web.xml의 서블릿 주소 이용해서 요청할 것) */

public class DAOTest extends HttpServlet {


private static final long serialVersionUID = 1L;


@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

//사용자 정의 메소드 호출 부분 추가

doGetPost(req, resp);

}


@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

//사용자 정의 메소드 호출 부분 추가

doGetPost(req, resp);

}

//사용자 정의 메소드 (doGet, doPost 메소드에 대한 통합 액션)

private void doGetPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

Connection conn = null;

PreparedStatement pstmt = null;

try {

//Connection 객체 얻는 방법

conn = DBConn.getConn();

if (conn != null) {

System.out.println("오라클 연결 성공!");

}

} catch (ClassNotFoundException e) {

e.printStackTrace();

} catch (SQLException e) {

e.printStackTrace();

}finally {

   try{

    if (pstmt != null) {

    pstmt.close();

    }

//연결 종료시 conn.close(); 사용하면 안됨. 

DBConn.close();

   }catch(SQLException se){

      se.printStackTrace();

   }

}

//DAOTest.jsp 페이지 연결

RequestDispatcher dispatcher = request.getRequestDispatcher("DAOTest.jsp");

dispatcher.forward(request, response);

}


}





//DAOTest.jsp -> JSP 페이지. 결과 출력.

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

    pageEncoding="UTF-8"%>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>    

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>


</head>

<body>

<div>

오라클 연결 테스트!

</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>SampleProject</display-name>

  <welcome-file-list>

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

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

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

    <welcome-file>default.html</welcome-file>

    <welcome-file>default.htm</welcome-file>

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

  </welcome-file-list>

  

  <!-- 서블릿 주소 등록 -->

  <!--  

  <servlet>

  <servlet-name>서블릿식별자</servlet-name>

  <servlet-class>패키지이름.클래스이름</servlet-class>

  </servlet>

  <servlet-mapping>

  <servlet-name>서블릿식별자</servlet-name>

  <url-pattern>/사용자요청주소</url-pattern>

  </servlet-mapping>

  -->  

 

  <servlet>

  <servlet-name>daoTest</servlet-name>

  <servlet-class>com.test.DAOTest</servlet-class>

  </servlet>

  <servlet-mapping>

  <servlet-name>daoTest</servlet-name>

  <url-pattern>/DAOTest</url-pattern>

  </servlet-mapping>


</web-app>




//요청주소 (JSP 페이지 요청하지 않는다. 서블릿 주소로 요청한다)

http://localhost:8090/Servlet_20141219/DAOTest








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

회원관리 Servlet(JDBC) 프로그램(4)

-> Model2 방식 (MVC 패턴)

-> 자료형 클래스(자바빈) 및 데이터베이스 액션, 서블릿 클래스, JSP 페이지, web.xml


1. 기능 구현

- 이름, 전화번호 입력 받아서 데이터베이스 저장

- 이름, 전화번호를 데이터베이스에서 읽어내서 화면에 출력


2. 데이터베이스 준비

--테이블 생성

CREATE TABLE memberList (

mid NUMBER  --PK

,name NVARCHAR2(30) --한글 저장 

,telephone VARCHAR2(30)

);


--제약 조건 추가

ALTER TABLE 테이블이름

ADD CONSTRAINT 제약이름 제약종류(제약대상);

ALTER TABLE 테이블이름

DROP CONSTRAINT 제약이름;


ALTER TABLE memberList

ADD CONSTRAINT memberList_mid_pk PRIMARY KEY(mid);


CREATE SEQUENCE memberListSeq;


--입력 샘플 쿼리 (프로그램에서 사용 예정)

INSERT INTO memberList (mid, name, telephone) VALUES (memberListSeq.nextval, 'kim', '010-123-1234');

COMMIT;


--권장하지 않는 표현. 컬럼 리스트에서 * 사용하지 않는다.

SELECT * FROM memberList; 


--전체 명단 출력 쿼리 (프로그램에서 사용 예정)

--권장하는 표현

SELECT mid, name, telephone FROM memberList ORDER BY mid; 


--인원수 출력 쿼리 (프로그램에서 사용 예정)

--함수 사용시 반드시 별칭 사용.

SELECT COUNT(mid) AS count FROM memberList; 



3. 화면 구성

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

[회원 관리]


이름 : hong             -> <input type="text">

전화 : 010-123-1234     -> <input type="text">

회원추가버튼                -> <input type="submit">


전체 인원수 : 2명              -> <p> ... </p>

----------------------------   -> <table>...</table>

번호 이름 전화

1   hong   010-123-1234

2   kim    010-222-2222

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



4. 프로그램 구성

//DBConn.java

//Member.java -> 자료형 클래스

//MemberDAO.java -> 데이터베이스 액션 처리. 메소드 단위로 액션 처리.


//MemberMain.java -> 서블릿 클래스. 메인 페이지. forward() 메소드 -> JSP 페이지

//MemberMain.jsp -> 회원 명단 출력. 회원 추가 폼 화면. 출력 액션.


//MemberInsert.java -> 서블릿 클래스. 회원 추가 액션. sendRedirect() 메소드 -> 서블릿 주소.


//web.xml -> 서블릿 주소 등록


//요청주소 (JSP 페이지 요청하지 않는다. 서블릿 주소로 요청한다)

http://localhost:8090/프로젝트이름/MemberMain



5. 프로그램 소스 코드

//DBConn.java

package com.test;


import java.sql.*;


public class DBConn {


//Connection(데이터베이스 연결) 객체 저장용 변수 선언

private static Connection conn = null;

//1. 데이터베이스 연결 과정

public static Connection getConn() 

throws ClassNotFoundException, SQLException {


//Connection 객체가 생성되지 않은 경우에만

//신규 객체를 생성한다. -> SingleTone

if (conn == null) {

//데이터베이스 연결 액션(로그인 과정)

Class.forName("oracle.jdbc.driver.OracleDriver");

String url = "jdbc:oracle:thin:아이디/패스워드@211.63.89.XX:1521:xe";

conn = DriverManager.getConnection(url);

}

return conn;

}

//2. 데이터베이스 연결 종료 과정

public static void close() throws SQLException {

if (conn != null) {

conn.close();

}

conn = null; //멤버변수를 NULL 값으로 초기화

}

}







//Member.java -> 자료형 클래스

package com.test;


public class Member {

private int mid;

private String name, telephone;


public int getMid() {

return mid;

}

public void setMid(int mid) {

this.mid = mid;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getTelephone() {

return telephone;

}

public void setTelephone(String telephone) {

this.telephone = telephone;

}


}







//MemberDAO.java -> 데이터베이스 액션 처리. 메소드 단위로 액션 처리.

package com.test;


import java.sql.*;

import java.util.*;


//데이터베이스 액션 클래스

public class MemberDAO {


public int count() {

int result = 0;

Connection conn = null;

PreparedStatement pstmt = null;

try {

conn = DBConn.getConnection();

String sql = String.format("SELECT COUNT(*) AS \"count\" FROM memberList");

pstmt = conn.prepareStatement(sql);

ResultSet rs = pstmt.executeQuery();

while(rs.next()) {

result = rs.getInt("count");

}

rs.close();

}catch(Exception e){

e.printStackTrace();

}finally{

try {

if (pstmt != null) {

pstmt.close();

}

}catch(Exception e){

}

DBConn.close();

}

return result;

}

public ArrayList<Member> list() {

ArrayList<Member> result = new ArrayList<Member>();

Connection conn = null;

PreparedStatement pstmt = null;

try {


conn = DBConn.getConnection();

String sql = "SELECT mid, name, telephone FROM memberList ORDER BY mid";

pstmt = conn.prepareStatement(sql);

ResultSet rs = pstmt.executeQuery();

while(rs.next()) {

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

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

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

Member member = new Member();

member.setMid(mid);

member.setName(name);

member.setTelephone(telephone);

result.add(member);

}

rs.close();

}catch(Exception e){

e.printStackTrace();

}finally{

try {

if (pstmt != null) {

pstmt.close();

}

}catch(Exception e){

}

DBConn.close();

}

return result;

}

public int add(Member member) {

int result = 0;


Connection conn = null;

PreparedStatement pstmt = null;

try {


conn = DBConn.getConnection();

String sql = "INSERT INTO memberList (mid, name, telephone) VALUES (memberListSeq.nextval, ?, ?)";

pstmt = conn.prepareStatement(sql);

pstmt.setString(1, member.getName());

pstmt.setString(2, member.getTelephone());

result = pstmt.executeUpdate();

}catch(Exception e){

e.printStackTrace();

}finally{

try {

if (pstmt != null) {

pstmt.close();

}

}catch(Exception e){

}

DBConn.close();

}

return result;

}

}







//MemberMain.java

package com.test;


import java.util.*;


import java.io.IOException;


import javax.servlet.*;

import javax.servlet.http.*;


public class MemberMain extends HttpServlet {


private static final long serialVersionUID = 1L;


@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

doGetPost(req, resp);

}


@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

doGetPost(req, resp);

}

private void doGetPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

//사용자 요청은 먼저 서블릿을 요청한다.

//서블릿은 내부적으로 MemberMain.jsp 페이지 연결


//데이터베이스 액션 -> count(), list() 메소드 호출

MemberDAO dao = new MemberDAO();

int count = dao.count();

ArrayList<Member> list = dao.list();

//데이터 전달 및 JSP 페이지 연결

request.setAttribute("count", count);

request.setAttribute("list", list);

RequestDispatcher dispatcher 

= request.getRequestDispatcher("MemberMain.jsp");

dispatcher.forward(request, response);

}

}






//MemberMain.jsp

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

    pageEncoding="UTF-8"%>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>    

<%-- 

서블릿 Model2 방식 사용시 

JSP 페이지에서 스크립트릿 표현(액션 처리) 사용 금지

--%>   

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>


<link rel="stylesheet" type="text/css" href="TableStyle.css">

<link rel="stylesheet" type="text/css" href="DivStyle.css">


<script type="text/javascript">


//Javascript 버전

/* 

window.onload=function() {


var myForm = document.getElementById("myForm");

var name = document.getElementById("name");

var telephone = document.getElementById("telephone");

var errorMsg = document.getElementById("errorMsg");

document.getElementById("myForm").onsubmit=function(){

//서브밋 액션을 계속 하거나(return true;), 중단(return false;)하는 것을 선택할 수 있다.

if(name.value == ""){

errorMsg.innerHTML = "이름을 입력하시오.";

return false;

}

if(name.value.length > 30){

errorMsg.innerHTML = "이름을 30자 이내로 입력하시오.";

return false;

}

if(telephone.value.length > 30){

errorMsg.innerHTML = "전화번호를 30자 이내로 입력하시오.";

return false;   

}

return true;

};

};

*/


//문제) jQuery 버전 작성



</script>


</head>

<body>

<div>

<h1>회원 관리</h1>

<h2>[입력]</h2>


<!-- 요청 주소는 서블릿 형태의 주소 사용. .jsp 사용 금지 -->

<form action="MemberInsert"  method="post" id="myForm">

이름(30자 이내)* <input type="text" name="name" id="name">

전화번호(30자 이내) <input type="text" name="telephone" id="telephone">

<input type="submit" value="회원 추가">

<span id="errorMsg" style="color:red;"></span>

</form>

<h2>[출력]</h2>

<!-- <p>인원수 :  1 명</p> -->

<%-- 

서블릿 Model2 방식 사용시

결과 출력은 EL, JSTL 표기 사용

--%>

<p>인원수 :  ${count} 명</p>

<table id="t01">

<tr>

<th>번호</th><th>이름</th><th>전화번호</th>

</tr>

<!-- 

<tr>

<td>1</td><td>hong</td><td>010-123-1234</td>

</tr>

-->

<%-- 컬렉션 데이터 수신하는 경우

반복문 지정 필요. JSTL 표기 사용.  --%>

<%-- items="" 속성에 컬렉션 데이터가 들어있는 식별자 추가 --%>

<%-- var="" 속성에 임시 변수 지정 --%>

<%-- 임시 변수에 컬렉션의 개별 데이터 저장되면

하위 항목을 . 연산자로 접근 --%>

<%-- 하위 항목은 자료형 클래스의 멤버변수 이름 사용 --%>

<c:forEach var="m" items="${list}">

<tr>

<td>${m.mid}</td>

<td>${m.name}</td>

<td>${m.telephone}</td>

</tr>

</c:forEach>

</table>

</div>

</body>

</html>





//MemberInsert.java

package com.test;


import java.io.IOException;


import javax.servlet.*;

import javax.servlet.http.*;


public class MemberInsert extends HttpServlet {


private static final long serialVersionUID = 1L;


@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

doGetPost(req, resp);

}


@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

doGetPost(req, resp);

}

private void doGetPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

//문제) 회원 입력 액션 추가

//데이터 수신(한글 인코딩 추가)

//데이터베이스 액션-> MemberDAO 클래스 담당


//강제 페이지 전환 

//-> sendRedirect() 메소드 호출

//-> 요청 주소 지정시 서블릿 형태의 주소 사용

//-> 요청 주소 지정시 .jsp 확장자 사용 금지


}


}








//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>Temp</display-name>

  <welcome-file-list>

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

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

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

    <welcome-file>default.html</welcome-file>

    <welcome-file>default.htm</welcome-file>

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

  </welcome-file-list>


<!--   

<servlet>

<servlet-name></servlet-name>

<servlet-class></servlet-class>

</servlet>  

<servlet-mapping>

<servlet-name></servlet-name>

<url-pattern></url-pattern>

</servlet-mapping>

 -->

  <servlet>

<servlet-name>memberMain</servlet-name>

<servlet-class>com.test.MemberMain</servlet-class>

</servlet>  

<servlet-mapping>

<servlet-name>memberMain</servlet-name>

<url-pattern>/MemberMain</url-pattern>

</servlet-mapping>



<!-- 문제) 서블릿 주소 등록 (MemberInsert) -->




   

</web-app>




//요청주소 (JSP 페이지 요청하지 않는다. 서블릿 주소로 요청한다)

http://localhost:8090/프로젝트이름/MemberMain



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








블로그 이미지

알 수 없는 사용자

,

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

JSP 템플릿 등록


<%@ page language="java" contentType="text/html; charset=${encoding}"

    pageEncoding="${encoding}"%>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>    

<!DOCTYPE html>

<html>

<head>

<meta charset="${encoding}">

<title>Insert title here</title>

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>


</head>

<body>

<div>


</div>

</body>

</html>





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

Servlet


1. 자바를 기반으로 한 웹 어플리케이션 작성 언어.


2. Servlet 실행 구조


1) 웹클라이언트에서 웹서버에 웹프로그램 요청 

(요청주소는 .jsp가 아니라 서블릿 URL 형태의 요청)

2) 웹서버에서 클라이언트가 요청한 Servlet 프로그램(확장자 .java) 로드

3) 서블릿 컴파일 및 실행.

4) 실행의 결과로 동적 생성된 HTML Document를 클라이언트에게 응답.

5) 웹클라이언트는 응답 받은 HTML Document를

브라우저에 웹페이지 형태로 출력.


3. 서블릿 클래스->서블릿 객체->서블릿


4. 서블릿 클래스 작성

- HttpServlet 클래스 상속

- doGet, doPost() 메소드 오버라이딩.

- 액션 코드 작성

- 결과를 HTML Document로 작성하기 위해서 PrintWriter 객체를 얻고, print(), println(), printf() 등의 메소드를 이용해서 HTML Document 생성.

- 서블릿 등록을 위해서 web.xml 파일에 서블릿 주소 등록. 사용자 요청 주소와 서블릿 객체를 서로 연결(매핑)시켜주는 역할.


5. 서블릿 클래스 장점

- Java 클래스 사용 가능

- 플랫폼 독립

- 보안, 네트워크 용이


6. 서블릿 클래스 단점

- 동적인 웹페이지 생성시 코드 작성 어려움. 

-> JSP 기술 탄생

-> JSP 기술의 단점 (로직과 프리젠테이션의 분리 어려움)

 


7. 서블릿 클래스를 사용하는 프로젝트 생성 단계 (이클립스 환경)

- 이클립스에서 Dynamic Web Project 생성. web.xml 생성 옵션 체크.

- Target Runtime 항목에서 Tomcat 서버 등록

- Servers 탭에서 Tomcat 서버 등록

- Tomcat 서버에 대해서 port 번호 변경 (8080->8090)

- Java Resources>src 폴더 하위에 패키지 생성(com.test)

- 패키지 하위에 서블릿 클래스 생성(*.java). SuperClass로 javax.servlet.http.HttpServlet 클래스 지정.

- 클래스에서 doGet(), doPost() 메소드 오버라이딩.

- 액션 코드 작성

- PrintWriter 객체를 이용한 HTML Document 생성. 한글 인코딩 설정 추가.

- web.xml 파일에 서블릿 주소 등록. 

- Tomcat 서버에 현재 프로젝트 등록. 톰캣 서버 재실행.

- 브라우저에서 서블릿 주소 요청.

http://localhost:8090/프로젝트이름(ContextRoot)/서블릿URL




//Sample01.java

package com.test;


import java.io.*;


import javax.servlet.*;

import javax.servlet.http.*;


public class Sample01 extends HttpServlet {


private static final long serialVersionUID = 1L;


@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

//사용자 정의 메소드 호출 부분 추가

doGetPost(req, resp);

}


@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

//사용자 정의 메소드 호출 부분 추가

doGetPost(req, resp);

}

//사용자 정의 메소드 (doGet, doPost 메소드에 대한 통합 액션)

private void doGetPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

int sum = 0;

for (int i=1; i<=100; i++) {

sum += i;

}

System.out.printf("1부터 100까지의 합은 %d 입니다.%n", sum);

response.setContentType("text/html; charset=UTF-8");

PrintWriter pw = response.getWriter();

pw.println("<!DOCTYPE html>");

pw.println("<html>");

pw.println("<head>");

pw.println("<meta charset=\"UTF-8\">");

pw.println("<title>Insert title here</title>");

pw.println("</head>");

pw.println("<body>");

pw.println("<div>");


pw.printf("1부터 100까지의 합은 %d 입니다.", sum);

pw.println("</div>");

pw.println("</body>");

pw.println("</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>SampleProject</display-name>

  <welcome-file-list>

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

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

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

    <welcome-file>default.html</welcome-file>

    <welcome-file>default.htm</welcome-file>

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

  </welcome-file-list>

  

  <!-- 서블릿 주소 등록 -->

  <!--  

  <servlet>

  <servlet-name>서블릿식별자</servlet-name>

  <servlet-class>패키지이름.클래스이름</servlet-class>

  </servlet>

  <servlet-mapping>

  <servlet-name>서블릿식별자</servlet-name>

  <url-pattern>/사용자요청주소</url-pattern>

  </servlet-mapping>

  -->  

  

  <servlet>

  <servlet-name>sample01</servlet-name>

  <servlet-class>com.test.Sample01</servlet-class>

  </servlet>

  <servlet-mapping>

  <servlet-name>sample01</servlet-name>

  <url-pattern>/Sample01</url-pattern>

  </servlet-mapping>

  

  

</web-app>





//요청주소

http://localhost:8090/Servlet_20150610/Sample01



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

서블릿 클래스 출력 부분에서 작성해야 하는 기본 코드


response.setContentType("text/html; charset=UTF-8");

PrintWriter pw = response.getWriter();

pw.println("<!DOCTYPE html>");

pw.println("<html>");

pw.println("<head>");

pw.println("<meta charset=\"UTF-8\">");

pw.println("<title>Insert title here</title>");

pw.println("</head>");

pw.println("<body>");

pw.println("<div>");


pw.println("</div>");

pw.println("</body>");

pw.println("</html>");



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

구구단 중에서 5단을 출력하는 Serlvet 페이지 작성.


5 * 1 = 5

5 * 2 = 10

...

5 * 9 = 45



//Sample02.java -> 서블릿 클래스

package com.test;


import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;


public class Sample02 extends HttpServlet {


private static final long serialVersionUID = 1L;


@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

//사용자 정의 메소드 호출 부분 추가

doGetPost(req, resp);

}


@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

//사용자 정의 메소드 호출 부분 추가

doGetPost(req, resp);

}

//사용자 정의 메소드 (doGet, doPost 메소드에 대한 통합 액션)

private void doGetPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

StringBuilder sb = new StringBuilder();

int gugudan = 5;

for (int i=1; i<=9; i++) {

sb.append(String.format("%d * %d = %d <br>%n"

, gugudan, i, (gugudan*i)));

}

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

response.setContentType("text/html; charset=UTF-8");

PrintWriter pw = response.getWriter();

pw.println("<!DOCTYPE html>");

pw.println("<html>");

pw.println("<head>");

pw.println("<meta charset=\"UTF-8\">");

pw.println("<title>Insert title here</title>");

pw.println("</head>");

pw.println("<body>");

pw.println("<div>");

pw.print(sb.toString());


pw.println("</div>");

pw.println("</body>");

pw.println("</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">


<!-- 서블릿 주소 등록 -->

<servlet>

<servlet-name>sample02</servlet-name>

<servlet-class>com.test.Sample02</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>sample02</servlet-name>

<url-pattern>/Sample02</url-pattern>

</servlet-mapping>



</web-app>





//요청주소

http://localhost:8090/프로젝트이름/Sample02




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

문제) 1부터 100까지의 숫자 중에서 짝수만 골라서 출력하되, 한 줄에 10개씩 출력.


for (int i=1, count=1; i<=100; i++) {

if (i%2 == 0) {

현재 숫자를 문자열로 추가

count++;

if (10개입니까?) {

줄바꿈 처리; //<br>

}

}

}


//Sample03.java

package com.test;


import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;


public class Sample03 extends HttpServlet {


private static final long serialVersionUID = 1L;


@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

//사용자 정의 메소드 호출 부분 추가

doGetPost(req, resp);

}


@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

//사용자 정의 메소드 호출 부분 추가

doGetPost(req, resp);

}

//사용자 정의 메소드 (doGet, doPost 메소드에 대한 통합 액션)

private void doGetPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

StringBuilder sb = new StringBuilder();

for (int i=1, count=0; i<=100; i++) {

if (i%2 == 0) {

count++;

sb.append(String.format("%d ", i));

if (count%10 == 0) {

sb.append("<br>");

}

}

}

response.setContentType("text/html; charset=UTF-8");

PrintWriter pw = response.getWriter();

pw.println("<!DOCTYPE html>");

pw.println("<html>");

pw.println("<head>");

pw.println("<meta charset=\"UTF-8\">");

pw.println("<title>Insert title here</title>");

pw.println("</head>");

pw.println("<body>");

pw.println("<div>");

pw.print(sb.toString());


pw.println("</div>");

pw.println("</body>");

pw.println("</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>SampleProject</display-name>

  <welcome-file-list>

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

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

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

    <welcome-file>default.html</welcome-file>

    <welcome-file>default.htm</welcome-file>

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

  </welcome-file-list>

  

  <!-- 서블릿 주소 등록 -->

  <!--  

  <servlet>

  <servlet-name>서블릿식별자</servlet-name>

  <servlet-class>패키지이름.클래스이름</servlet-class>

  </servlet>

  <servlet-mapping>

  <servlet-name>서블릿식별자</servlet-name>

  <url-pattern>/사용자요청주소</url-pattern>

  </servlet-mapping>

  -->  

  

  <servlet>

  <servlet-name>sample03</servlet-name>

  <servlet-class>com.test.Sample03</servlet-class>

  </servlet>

  <servlet-mapping>

  <servlet-name>sample03</servlet-name>

  <url-pattern>/Sample03</url-pattern>

  </servlet-mapping>


</web-app>





//요청주소

http://localhost:8090/Servlet_20141218/Sample03







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

데이터 송수신 테스트(Servlet 클래스 이용)



1. 클라이언트가 작성한 데이터를 서버로 전송하고, Servlet 프로그램을 통해서 수신하는 과정.


2. POST, GET 방식 전송 방법중 하나를 선택.


POST 방식 전송인 경우 form 태그에서 method="" 속성을 post로 지정.

다량의 데이터 전송시 사용.

한글 데이터 전송시 이 방법을 사용해야 올바르게 전송 및 수신할 수 있다.

<form action="서블릿주소" method="post">

<!--회원가입 항목 준비-->

<input type="text" name="식별자">

<input type="submit" value="회원가입">

</form>




action="" 속성에서 서블릿주소를 아래와 같은 방법으로 기입.

상대 URL -> 현재 서블릿주소를 기준으로 상대적 위치를 표시하고 요청 주소를 적는 것.

예를 들어,

현재 서블릿주소와 요청 주소 페이지가 같은 디렉토리에 존재한다면

action="서블릿주소"



name="식별자" 속성은 서버에서 데이터 수신시 식별자로 사용한다. 

예를 들어,

String 변수 = request.getParameter("식별자");


<input type="submit"> 클라이언트가 입력한 데이터를 서버로 전송하는 액션 전용 버튼. 대체 수단으로 Javascript에서 submit() 메소드를 이용할 수 있다.



GET 방식 전송인 경우 a 태그에서 href="" 속성에 요청 주소 작성시

"서블릿주소?식별자=데이터&식별자=데이터 ..." 형식으로 작성.

? 이후 문자열에는 특수문자나, 공백등을 삽입하면 수신하는 과정에서 인식 불가.

예를 들어,

<a href="http://news.naver.com/main/read.nhn?mode=LSD&mid=shm&sid1=105&oid=001&aid=0006938838">네이버 뉴스 페이지</a>


GET 방식으로 전송된 데이터를 서버에서 데이터 수신시 식별자를 사용한다. 

예를 들어,

String 변수 = request.getParameter("식별자");



3. 서블릿 페이지에서 데이터를 수신하려면 doGet(), doPost() 메소드에서 지정한 HttpServletRequest 객체를 사용.


protected void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

String 변수 = request.getParameter("식별자");

}



protected void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

String 변수 = request.getParameter("식별자");

}





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

문제) 이름 전송 및 수신 테스트(서블릿 클래스 이용)


//YourName.java -> 서블릿 클래스. 입력 화면 구성. post 방식 요청 진행 예정. doGet() 메소드에서 액션 코드 작성.

package com.test;


import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;


public class YourName extends HttpServlet {


private static final long serialVersionUID = 1L;


@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

//사용자 정의 메소드 호출 부분 추가

doGetPost(req, resp);

}


@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

//사용자 정의 메소드 호출 부분 추가

doGetPost(req, resp);

}

//사용자 정의 메소드 (doGet, doPost 메소드에 대한 통합 액션)

private void doGetPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

response.setContentType("text/html; charset=UTF-8");

PrintWriter pw = response.getWriter();

pw.println("<!DOCTYPE html>");

pw.println("<html>");

pw.println("<head>");

pw.println("<meta charset=\"UTF-8\">");

pw.println("<title>Insert title here</title>");

pw.println("</head>");

pw.println("<body>");

pw.println("<div>");

pw.println("<form action=\"Hi\" method=\"post\">");

pw.println("이름 <input type=\"text\" name=\"yourName\">");

pw.println("<input type=\"submit\">");

pw.println("</form>");

pw.println("</div>");

pw.println("</body>");

pw.println("</html>");

}


}







//Hi.java -> 서블릿 클래스. doPost() 메소드에서 액션 코드 작성.

package com.test;


import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;


public class Hi extends HttpServlet {


private static final long serialVersionUID = 1L;


@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

//사용자 정의 메소드 호출 부분 추가

doGetPost(req, resp);

}


@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

//사용자 정의 메소드 호출 부분 추가

doGetPost(req, resp);

}

//사용자 정의 메소드 (doGet, doPost 메소드에 대한 통합 액션)

private void doGetPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

request.setCharacterEncoding("UTF-8");

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

response.setContentType("text/html; charset=UTF-8");

PrintWriter pw = response.getWriter();

pw.println("<!DOCTYPE html>");

pw.println("<html>");

pw.println("<head>");

pw.println("<meta charset=\"UTF-8\">");

pw.println("<title>Insert title here</title>");

pw.println("</head>");

pw.println("<body>");

pw.println("<div>");

pw.printf("안녕하세요, %s님!", yourName);


pw.println("</div>");

pw.println("</body>");

pw.println("</html>");

}


}







//web.xml -> 서블릿 주소 등록. 

YourName(->YourName.java), Hi(->Hi.java)

<?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>SampleProject</display-name>

  <welcome-file-list>

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

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

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

    <welcome-file>default.html</welcome-file>

    <welcome-file>default.htm</welcome-file>

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

  </welcome-file-list>

  

  <!-- 서블릿 주소 등록 -->

  <!--  

  <servlet>

  <servlet-name>서블릿식별자</servlet-name>

  <servlet-class>패키지이름.클래스이름</servlet-class>

  </servlet>

  <servlet-mapping>

  <servlet-name>서블릿식별자</servlet-name>

  <url-pattern>/사용자요청주소</url-pattern>

  </servlet-mapping>

  -->  

  

  <servlet>

  <servlet-name>yourName</servlet-name>

  <servlet-class>com.test.YourName</servlet-class>

  </servlet>

  <servlet-mapping>

  <servlet-name>yourName</servlet-name>

  <url-pattern>/YourName</url-pattern>

  </servlet-mapping>


  <servlet>

  <servlet-name>hi</servlet-name>

  <servlet-class>com.test.Hi</servlet-class>

  </servlet>

  <servlet-mapping>

  <servlet-name>hi</servlet-name>

  <url-pattern>/Hi</url-pattern>

  </servlet-mapping>


</web-app>





//요청주소

http://localhost:8090/프로젝트이름/YourName



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

Servlet에서의 오라클 연동 테스트

- ojdbc6.jar 파일 WebContent>WEB-INF>lib 폴더 하위에 복사할 것.



//DBConn.java

package com.test;


import java.sql.*;


public class DBConn {

private static Connection conn;

public static Connection getConnection() throws ClassNotFoundException, SQLException {

if (conn == null) {

Class.forName("oracle.jdbc.driver.OracleDriver");

String url = "jdbc:oracle:thin:아이디/패스워드@211.63.89.XX:1521:xe";

conn = DriverManager.getConnection(url);

}

return conn;

}

public static void close() throws SQLException {

if (conn != null && !conn.isClosed()) {

conn.close();

}

conn = null;

}


}





//DAOTest.java -> 서블릿 클래스

package com.test;


import java.io.*;

import java.sql.*;


import javax.servlet.*;

import javax.servlet.http.*;


public class DAOTest extends HttpServlet {


private static final long serialVersionUID = 1L;


@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

//사용자 정의 메소드 호출 부분 추가

doGetPost(req, resp);

}


@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

//사용자 정의 메소드 호출 부분 추가

doGetPost(req, resp);

}

//사용자 정의 메소드 (doGet, doPost 메소드에 대한 통합 액션)

private void doGetPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

Connection conn = null;

PreparedStatement pstmt = null;

try {

//Connection 객체 얻는 방법

conn = DBConn.getConn();

if (conn != null) {

System.out.println("오라클 연결 성공!");

}

} catch (ClassNotFoundException e) {

e.printStackTrace();

} catch (SQLException e) {

e.printStackTrace();

}finally {

   try{

    if (pstmt != null) {

    pstmt.close();

    }

//연결 종료시 conn.close(); 사용하면 안됨. 

DBConn.close();

   }catch(SQLException se){

      se.printStackTrace();

   }

}


response.setContentType("text/html; charset=UTF-8");

PrintWriter pw = response.getWriter();

pw.println("<!DOCTYPE html>");

pw.println("<html>");

pw.println("<head>");

pw.println("<meta charset=\"UTF-8\">");

pw.println("<title>Insert title here</title>");

pw.println("</head>");

pw.println("<body>");

pw.println("<div>");

pw.print("오라클 연결 테스트!");

pw.println("</div>");

pw.println("</body>");

pw.println("</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">


<!-- 서블릿 주소 등록 -->

<servlet>

<servlet-name>daoTest</servlet-name>

<servlet-class>com.test.DAOTest</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>daoTest</servlet-name>

<url-pattern>/DAOTest</url-pattern>

</servlet-mapping>


</web-app>





//요청주소

http://localhost:8090/프로젝트이름/DAOTest

-> 오라클 연결 성공 여부 확인은 이클립스 콘솔 창 확인할 것.




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






'Servlet' 카테고리의 다른 글

02일차_Servlet, JSP 연동(모델2방식), 회원관리  (0) 2015.06.22
블로그 이미지

알 수 없는 사용자

,