반응형

 

 

 

 

1. 서블릿 Request, Response 동작 방식

 

요청과 응답

WAS는 웹 브라우저로부터 Servlet요청을 받으면,

  • 요청할 때 가지고 있는 정보를 HttpServletRequest객체를 생성하여 저장합니다.
  • 웹 브라우저에게 응답을 보낼 때 사용하기 위하여 HttpServletResponse객체를 생성합니다.
  • 생성된 HttpServletRequest, HttpServletResponse 객체를 서블릿에게 전달합니다.

 

HttpServletRequest

  • http프로토콜의 request정보를 서블릿에게 전달하기 위한 목적으로 사용합니다.
  • 헤더정보, 파라미터, 쿠키, URI, URL 등의 정보를 읽어 들이는 메소드를 가지고 있습니다.
  • Body의 Stream을 읽어 들이는 메소드를 가지고 있습니다.

 

HttpServletResponse

  • WAS는 어떤 클라이언트가 요청을 보냈는지 알고 있고, 해당 클라이언트에게 응답을 보내기 위한 HttpServleResponse객체를 생성하여 서블릿에게 전달합니다.
  • 서블릿은 해당 객체를 이용하여 content type, 응답코드, 응답 메시지등을 전송합니다.

 

 

- Request 정보를 출력해서 알아보자

package examples;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;

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


@WebServlet("/header")
public class HeaderServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       

    public HeaderServlet() {
        super();
        // TODO Auto-generated constructor stub
    }


	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		response.setContentType("text/html");
		PrintWriter out = response.getWriter();
		out.println("<html>");
		out.println("<head><title>form</title></head>");
		out.println("<body>");

		Enumeration<String> headerNames = request.getHeaderNames();   // 모든 header 이름을 문자열로 받아준다.
		while(headerNames.hasMoreElements()) {
			String headerName = headerNames.nextElement();			// header 이름
			String headerValue = request.getHeader(headerName);		// header 값
			out.println(headerName + " : " + headerValue + " <br> ");
		}		
		
		out.println("</body>");
		out.println("</html>");
	}


	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

 

 

 

Request 정보

 

 

 

 

 

2. URL 파라미터 

 

http://localhost:8080/firstweb/param?age=23&name=naeun

위의 URL에서 ? 뒤에 있는 것을 '파라미터'라고 한다.

&를 기준으로 구분하여 인식한다.

age = 23 이고, name = naeun 이다.

 

 

 

package examples;

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

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

/**
 * Servlet implementation class ParameterServlet
 */
@WebServlet("/param")
public class ParameterServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public ParameterServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
			
		response.setContentType("text/html");		// 응답을 text, html 타입으로 보낼 거에요
		PrintWriter out = response.getWriter();     // 클라이언트와의 통로 생성
		out.println("<html>");
		out.println("<head><title>form</title></head>");
		out.println("<body>");

		String name = request.getParameter("name"); // 요청정보에서 이름의 값을 가져온다. 
		String age = request.getParameter("age");
		
		out.println("name : " + name + "<br>");		
		out.println("age : " +age + "<br>");
		
		out.println("</body>");
		out.println("</html>");
		
	}

}

 

 

-> URL 에 설정해주는 대로 값이 변경되어 나타난다. (동적인 페이지)

 

 

 

 

 

 

3. 이 외의 클라이언트가 요청하는 다른 정보들 출력해보기

 

반응형
반응형

 

 

버전에 따른 Servlet 작성 방법

 

1. Servlet 3.0 spec 이상에서 사용하는 방법

  • web.xml 파일을 사용하지 않습니다.
  • 자바 어노테이션(annotation)을 사용합니다.
  • 앞에서 실습했던 first web에서 사용합니다.

2. Servlet 3.0 spec미만에서 사용하는 방법

  • servlet을 등록할 때 web.xml 파일에 등록합니다.

 

 

 

 

 

1. Servlet 3.0 spec 이상에서 사용하는 방법

 

- @WebServlet("/ten") 이라는 어노테이션이 추가된다.

- URL mapping은 임의로 지정할 수 있다.

 

package exam;

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

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


@WebServlet("/ten")
public class TenServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public TenServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();  // 통로
		out.print("<h1>1-10까지 출력</h1>");
		for(int i=1; i<=10; i++) {
			out.print("<h2>"+i+"</h2>");
		}
		out.close();
		
	}
}

TenServlet.java

 

 

 

 

 

 

 

 

 

2. Servlet 3.0 spec미만에서 사용하는 방법

 

- 서블릿을 추가하면 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_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>exam25</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>
    <description></description>
    <display-name>TenServlte</display-name>
    <servlet-name>TenServlte</servlet-name>
    <servlet-class>exam.TenServlte</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>TenServlte</servlet-name>
    <url-pattern>/ten</url-pattern>
  </servlet-mapping>
</web-app>

web.xml

 

package exam;

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 TenServlte extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public TenServlte() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();  // 통로
		out.print("<h1>1-10까지 출력</h1>");
		for(int i=1; i<=10; i++) {
			out.print("<h2>"+i+"</h2>");
		}
		out.close();
		
	}

}

TenServlte.java

 

 

 

 

 

 

 

 

 

 

Servlet 생명 주기

 

1. 서블릿의 생명주기를 알기 위해 테스트 코드를 작성한다.

 

package examples;

import java.io.IOException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/LifecycleServlet")
public class LifecycleServlet extends HttpServlet {
	
	private static final long serialVersionUID = 1L;
       
	
    public LifecycleServlet() {
        System.out.println("LifecycleServlet 생성!!");
        
    }


	public void init(ServletConfig config) throws ServletException {
		System.out.println("init 호출!!");
	}


	public void destroy() {
		System.out.println("destroy 호출!!");
	}

	
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("service 호출!!");
	}

}

 

LifecycleServlet.java

 

 

 

 

2. 결과

 

1) 처음 실행 시,

생성자

init

service

 

2) 새로고침 시,

service

 

3) 기존 코드 변경 시,

destroy

 

4) destroy 후 코드 변경 시,

생성사

init

service

 

 

 

 

 

 

 

 

 

 

 

Servlet 생명주기

  • WAS는 서블릿 요청을 받으면 해당 서블릿이 메모리에 있는지 확인합니다.
  •  if (메모리에 없음) {
     - 해당 서블릿 클래스를 메모리에 올림
     - init() 메소드를 실행
    }
     - service()메소드를 실행
  • was가 종료되거나, 웹 어플리케이션이 새롭게 갱신될 경우 destroy() 메소드가 실행됩니다.
  • 응답해야 하는 모든 내용은 service() 에 구현해야 한다 !!

 

 

 

 

 

그렇다면, doGet() 에서는 service() 가 없었는데 어떻게 실행이 된 것일까?

doGet()은 HttpServlet 이 가지고 있는 service 메소드를 상속받아서 실행된다.

 

 

 

service(request, response) 메소드

HttpServlet의 service메소드는 템플릿 메소드 패턴으로 구현합니다.

  • 클라이언트의 요청이 GET일 경우에는 자신이 가지고 있는 doGet(request, response)메소드를 호출
  • 클라이언트의 요청이 Post일 경우에는 자신이 가지고 있는 doPost(request, response)를 호출

 

 

 

😆service() 대신에 doGet()과 doPost()를 넣어 보았다 !

package examples;

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

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

@WebServlet("/LifecycleServlet")
public class LifecycleServlet extends HttpServlet {
	
	private static final long serialVersionUID = 1L;
      

	public LifecycleServlet() {
        System.out.println("LifecycleServlet 생성!!");
        
    }


	public void init(ServletConfig config) throws ServletException {
		System.out.println("init test 호출!!");
	}


	public void destroy() {
		System.out.println("destroy 호출!!");
	}

	// url 주소를 입력하거나, 링크를 클릭하는 것은 GET 방식으로 서버에 요청을 보내는 것이므로 doGet()이 실행된다.
    @Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		
    	resp.setContentType("text/html");
		PrintWriter out = resp.getWriter();
		out.println("<html>");
		out.println("<head><title>form</title></head>");
		out.println("<body>");
		out.println("<form method='post' action='/firstweb/LifecycleServlet'>");	// submit 버튼이 눌렸을 때, action 주소로 요청해주세요 
		out.println("name : <input type='text' name='name'><br>");					// , 메서드는 post이므로 post 메서드를 실행한다.
		out.println("<input type='submit' value='ok'><br>");                                                 
		out.println("</form>");
		out.println("</body>");
		out.println("</html>");
		out.close();
		
	}


	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		
		resp.setContentType("text/html");
		PrintWriter out = resp.getWriter();
		String name = req.getParameter("name");			// doGet에서 설정한 name 을 받아
		out.println("<h1> hello " + name + "</h1>");    // 동적인 페이지 : 받은 name을 출력해준다. 응답 결과가 매번 달라지는 방식 
		out.close();
		
	}


}

 

 

 

1) url 주소를 입력하거나, 링크를 클릭하는 것은 GET 방식으로 서버에 요청을 보내는 것이므로 먼저 doGet()이 실행된다.

 

 

 

 

2) out.println("<form method='post' action='/firstweb/LifecycleServlet'>");

-> "submit 버튼이 눌렸을 때, action 주소로 요청해주고, post 메소드를 실행해주세요" 라고 말하고 있다.

 

 

3) String name = req.getParameter("name");

-> doGet에서 설정한 name 을 받아

 

4) out.println("<h1> hello " + name + "</h1>");  

-> 동적인 페이지 : 받은 name을 출력해준다. 응답 결과가 매번 달라지는 방식 

 

 

 

 

 

 

반응형
반응형

 

자바 웹 어플리케이션(Java Web Application)

WAS에 설치(deploy)되어 동작하는 어플리케이션입니다.

자바 웹 어플리케이션에는 HTML, CSS, 이미지, 자바로 작성된 클래스(Servlet도 포함됨, package, 인터페이스 등), 각종 설정 파일 등이 포함됩니다.

 

 

-> WEB-INF, web.xml 파일이 자바 웹 어플리케이션의 폴더에 반드시 있어야하는 등

자바 웹 어플리케이션의 구조를 지켜야한다.

 

 

 

 

서블릿이란?

자바 웹 어플리케이션의 구성요소 중 동적인 처리를 하는 프로그램의 역할입니다.

서블릿을 정의해보면 서블릿(servlet)은 WAS에 동작하는 JAVA 클래스입니다. 

서블릿은 HttpServlet 클래스를 상속받아야 합니다.

서블릿과 JSP로부터 최상의 결과를 얻으려면, 웹 페이지를 개발할 때 이 두 가지(JSP, 서블릿)를 조화롭게 사용해야 합니다.

예를 들어, 웹 페이지를 구성하는 화면(HTML)은 JSP로 표현하고, 복잡한 프로그래밍은 서블릿으로 구현합니다.

 

즉, URL 요청을 처리하는 프로그램이다.

 

 

 

 

URL 주소는 아래와 같이 지정이 된다.

http://localhost:8080/{프로젝트이름}/{URL Mapping값}

 

이 때, URL Mapping 값은 아래와 같이 서블릿을 만들 때 설정할 수 있다.

 

 

 

 

 

 

 

- HTTP 메서드 : GET, POST, PUT, DELETE

 

1) GET - 웹 브라우저가 서버에게 문서를 요청할 때 사용하는 방식

-> doGet();

 

 

 

반응형
반응형

 

 

컴퓨터에 운영체제를 설치해야만 컴퓨터를 사용할 수 있는 것처럼, 자바를 이용하여 작성된 웹 어플리케이션은 WAS가 있어야만 실행할 수 있다. 이때 가장 많이 사용되는 WAS가 아파치 톰캣이다.

 

 

 

1. 톰캣 홈페이지에서 버전 8 다운받기

 

http://tomcat.apache.org 

 

Apache Tomcat® - Welcome!

The Apache Tomcat® software is an open source implementation of the Java Servlet, JavaServer Pages, Java Expression Language and Java WebSocket technologies. The Java Servlet, JavaServer Pages, Java Expression Language and Java WebSocket specifications ar

tomcat.apache.org

맥북에서는 tar.gz 파일을 받아서 압축 해제하면 된다.

 

 

 

 

 

2. apps라는 디렉토리 생성하고 거기에 톰캣 폴더를 넣어준다.

 

mkdir ~/apps
cd ~/apps
mv ~/Downloads/apache-tomcat-8.5.24 ~/apps/

터미널

 

3. 쉘확장자를 가진 파일들의 실행권한을 준다.

 

chmod +x ./bin/*.sh

 터미널

 

4. ls -al 로 권한이 부여되었는지 확인

-rwxr-xr-x@와 같이 마지막에 x 가 붙어있으면 정상적으로 권한이 부여된 것이다.

 

 

5. startup.sh 파일을 실행하여 톰캣을 켜준다.

 

./bin/startup.sh 

터미널

 

 

 

* 만약 아래와 같은 오류가 발생한다면

Cannot find bin/catalina.sh
The file is absent or does not have execute permission
This file is needed to run this program

 

아래 명령어를 실행하고 5번의 startup.sh 파일을 다시 실행시켜준다.

chmod +x bin/catalina.sh
반응형
반응형

1. 저급언어

 

0과 1로 이루어진 언어, 기계어라고 부른다.

0과 1로만 되어있으면 해석하기 어렵기 때문에 이를 기호로 만들어 프로그래밍하게 되었다. 어셈블리어 라고 한다.

단, 이 어셈블리어는 컴퓨터가 바로 알아들을 수 없어서 기호를 원래의 숫자로 되돌리는 컴파일러가 필요하게 되었다.

 

 

 

2. 고급언어

 

사람 중심의 언어이다.

사람이 이해하기 쉬운 문법으로 작성된 소스 코드를 컴파일러가 번역하여 컴퓨터에게 전달한다.

앞서 언급한 기호를 숫자로 돌리는 컴파일러와 동일하다.

 

 

 

 

3. HTTP 작동방식

 

HTTP는 서버/클라이언트 모델을 따른다.

  • 장점
    - 불특정 다수를 대상으로 하는 서비스에는 적합하다.
    - 클라이언트와 서버가 계속 연결된 형태가 아니기 때문에 클라이언트와 서버 간의 최대 연결 수보다 훨씬 많은 요청과 응답을 처리할 수 있다.
  • 단점
    - 연결을 끊어버리기 때문에, 클라이언트의 이전 상황을 알 수가 없다.
    - 이러한 특징을 무상태(Stateless)라고 말한다.
    - 이러한 특징 때문에 정보를 유지하기 위해서 Cookie와 같은 기술이 등장하게 되었다.

 

 

4. URL (Uniform Resource Locator)

  • 인터넷 상의 자원의 위치
  • 특정 웹 서버의 특정 파일에 접근하기 위한 경로 혹은 주소

 

 

5. HTTP (Hypertext Transfer Protocol)

HTTP는 서버와 클라이언트가 인터넷상에서 데이터를 주고받기 위한 프로토콜(protocol)

 

  • 요청 메서드 : GET, PUT, POST, PUSH, OPTIONS 등의 요청 방식이 온다.
  • 요청 URI : 요청하는 자원의 위치를 명시한다.
  • HTTP 프로토콜 버전 : 웹 브라우저가 사용하는 프로토콜 버전이다.

첫번째 줄의 요청메소드는 서버에게 요청의 종류를 알려주기 위해서 사용됩니다.

각각의 메소드 이름은 다음과 같은 의미를 가집니다.

참고로 최초의 웹 서버는 GET방식만 지원해줬습니다.

  • GET : 정보를 요청하기 위해서 사용한다. (SELECT)
  • POST : 정보를 밀어넣기 위해서 사용한다. (INSERT)
  • PUT : 정보를 업데이트하기 위해서 사용한다. (UPDATE)
  • DELETE : 정보를 삭제하기 위해서 사용한다. (DELETE)
  • HEAD : (HTTP)헤더 정보만 요청한다. 해당 자원이 존재하는지 혹은 서버에 문제가 없는지를 확인하기 위해서 사용한다.
  • OPTIONS : 웹서버가 지원하는 메서드의 종류를 요청한다.
  • TRACE : 클라이언트의 요청을 그대로 반환한다. 예컨데 echo 서비스로 서버 상태를 확인하기 위한 목적으로 주로 사용한다.

 

 

 

6. 미들웨어 (MiddleWare)

클라이언트 쪽에 비즈니스 로직이 많을 경우, 클라이언트 관리(배포 등)로 인해 비용이 많이 발생하는 문제가 있습니다.

비즈니스 로직을 클라이언트와 DBMS사이의 미들웨어 서버에서 동작하도록 함으로써 클라이언트는 입력과 출력만 담당하도록 합니다.

 

 

 

 

 

 

7. WAS (Web Application Server)

WAS는 일종의 미들웨어웹 클라이언트(보통 웹 브라우저)의 요청 중 웹 애플리케이션이 동작하도록 지원하는 목적을 가집니다.

 

 

 

8. 웹 서버란?

  • 웹 서버는 소프트웨어(Software)를 보통 말하지만, 웹 서버 소프트웨어가 동작하는 컴퓨터를 말합니다.
  • 웹 서버의 가장 중요한 기능은 클라이언트(Client)가 요청하는 HTML 문서나 각종 리소스(Resource)를 전달하는 것입니다.
  • 웹 브라우저나 웹 크롤러가 요청하는 리소스는 컴퓨터에 저장된 정적(static)인 데이터이거나 동적인 결과가 될 수 있습니다.

 

 

 

웹 서버 소프트웨어의 종류

  • 가장 많이 사용하는 웹 서버는 Apache, Nginx, Microsoft IIS
  • Apache웹 서버는 Apache Software Foundation에서 개발한 웹서버로 오픈소스 소프트웨어(Open-source Software)이며, 거의 대부분 운영체제에서 설치 및 사용을 할 수 있습니다.
  • Nginx는 차세대 웹서버로 불리며 더 적은 자원으로 더 빠르게 데이터를 서비스하는 것을 목적으로 만들어진 서버이며 Apache웹 서버와 마찬가지로 오픈소스 소프트웨어입니다.

 

 

 

 

웹 서버 vs WAS

  • WAS도 보통 자체적으로 웹 서버 기능을 내장하고 있습니다.
  • 현재는 WAS가 가지고 있는 웹 서버도 정적인 콘텐츠를 처리하는 데 있어서 성능상 큰 차이가 없습니다.
  • 규모가 커질수록 웹 서버와 WAS를 분리합니다.
  • 자원 이용의 효율성 및 장애 극복, 배포 및 유지보수의 편의성을 위해 웹서버와 WAS를 대체로 분리합니다.
반응형
반응형

JDBC란? (Java Database Connectivity)

- 자바 프로그램 내에서 SQL문을 실행하기 위한 자바 API

 

즉, DB와 자바 프로그램을 연결시켜주는 연결 다리의 역할을 한다는 것이다.

 

 

JDBC 클래스 생성 관계

 

 

 

 

SELECT DAO 예제

public Role getRole(String name) {

	Role role = null;
	Connection conn = null;
	PreparedStatement ps = null;
	ResultSet rs = null;

	try {
		Class.forName("com.mysql.jdbc.Driver");
		conn = DriverManager.getConnection(dburl, dbUser, dbpasswd);
		String sql = "SELECT name, tel FROM card WHERE name = ?";
		ps = conn.prepareStatement(sql);
		
		ps.setString(1, name);
		
		rs = ps.executeQuery();            // select는 executeQuery() 이용
										   // ResultSet type의 변수에 결과 입력

		if (rs.next()) {
			String name1 = rs.getString("name");
			String tel1 = rs.getString("tel");
			role = new Role(name1, tel1);
		}
	} catch (Exception e) {
		e.printStackTrace();
	} 
	finally {
		if (rs != null) {
			try {
				rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if (ps != null) {
			try {
				ps.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if (conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}

	return role;
}

 

 

 

 

INSERT DAO 예제

public int addRole(Role role) {

	int insertCount = 0;
	Connection conn = null;
	PreparedStatement ps = null;

	try {
		Class.forName("com.mysql.jdbc.Driver");
		conn = DriverManager.getConnection(dburl, dbUser, dbpasswd);
		String sql = "INSERT INTO card (name, tel) VALUES ( ?, ? )";
		ps = conn.prepareStatement(sql);
	
		ps.setString(1, role.getName());
		ps.setString(2, role.getTel());

		insertCount = ps.executeUpdate();	// insert, delete, update는 executeUpdate() 이용
											// int type 변수에 결과 입력
	} catch (Exception ex) {
		ex.printStackTrace();
	} finally {
		if (ps != null) {
			try {
				ps.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if (conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
	return insertCount;
}

 

 

 

 

 

DELETE DAO 예제

public int deleteRole(Integer roleId) {

	int insertCount = 0;
	Connection conn = null;
	PreparedStatement ps = null;

	try {
		Class.forName("com.mysql.jdbc.Driver");
		conn = DriverManager.getConnection(dburl, dbUser, dbpasswd);
		String sql = "DELETE from role where role_id = ?";
		ps = conn.prepareStatement(sql);
	
		ps.setInt(1, roleId);

		insertCount = ps.executeUpdate();	// insert, delete, update는 executeUpdate() 이용
											// int type 변수에 결과 입력
	} catch (Exception ex) {
		ex.printStackTrace();
	} finally {
		if (ps != null) {
			try {
				ps.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if (conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
	return insertCount;
}

 

 

 

 

UPDATE DAO 예제

public int updateRole(Role role) {

	int insertCount = 0;
	Connection conn = null;
	PreparedStatement ps = null;

	try {
		Class.forName("com.mysql.jdbc.Driver");
		conn = DriverManager.getConnection(dburl, dbUser, dbpasswd);
		String sql = "UPDATE role set description = ? where role_id = ?";
		ps = conn.prepareStatement(sql);
	
		ps.setString(1, role.getDescription());
		ps.setInt(2, role.getRoleId());

		insertCount = ps.executeUpdate();	// insert, delete, update는 executeUpdate() 이용
											// int type 변수에 결과 입력
	} catch (Exception ex) {
		ex.printStackTrace();
	} finally {
		if (ps != null) {
			try {
				ps.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if (conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
	return insertCount;
}

 

 

DriverManager를 이용해 connection을 가져오고,

conn 객체를 이용해 statement를 가져오고,

statement를 통해 ResultSet을 가져옴을 확인할 수 있다.

 

 

 

 

 

 

JSP란?  (java server page)

 

 

JSTL이란? (JSP Standard Tag Library)

- JSTL은 JSP 페이지에서 조건문 처리, 반복문 처리 등을 html tag형태로 작성할 수 있게 도와준다.

 

JSP 페이지에서 자바 언어와 프론트엔드 언어가 섞여있으면 다루기 힘드니까, 자바 언어를 html tag 형태로 작성할 수 있도록 도와주는 것이다.

 

 

서블릿이란?

반응형

+ Recent posts