2014년 4월 30일 수요일

[ETC]용어정리 -2-

IoC : 객체의 생성에서부터 생명주기의 관리까지 모든 객체에 대한 제어권이 바뀐것을 의미하는 것이 제어권의 역전, 즉 Ioc라는 개념
DI : Spring 프레임워크에서 지원하는 IoC의 형태이다. DI는 클래스 사이의 의존관계를 빈 설정 정보를 바탕으로 컨테이너가 자동적으로 연결해주는 것
I/O STREAM : 데이터를 운반하는데 사용되는 연결통로로 스트림은 단방향 통신만 가능하기 때문에 하나의 스트림으로 입력과 출력을 동시에 처리할 수 없다. 그래서 입력 스트림(input stream)과 출력 스트림(output stream) 2개가 필요하다.
CAPTCHA : 사람과 컴퓨터를 구분하기위한 완전 자동화 된 튜링테스트로 자동으로 대량의 도배글을 작성하거나 사용자 계정을 만드는 등의 원치 않은 사용을 막는 데 쓰인다
대시보드 : 대시보드란 다양한 데이터를 동시에 비교하고 모니터링할 수 있도록 한 장소에 표시된 여러 워크시트 및 지원 정보 모음입니다.
전자정부프레임워크 : 대한민국의 공공부문 정보화 사업 시 플랫폼별 표준화된 개발 프레임워크
refactoring : 주로 가독성을 높이고 유지보수를 편하게 한다. 버그를 없애거나 새로운 기능을 추가하는 행위는 아니다. 사용자가 보는 외부 화면은 그대로 두면서 내부 논리나 구조를 바꾸고 개선하는 유지보수 행위
TDD : 짧은 개발 사이클을 반복적으로 수행하는것으로 개발자들은 자동화된 테스트 케이스를 만들어서 새로운 기능을 개발하고 기존의 기능을 분석하는 과정을 수행
JSON : JSON(제이슨, JavaScript Object Notation)은, 인터넷에서 자료를 주고받을 때 그 자료를 표현하는 방법, 자료의 종류에 큰 제한은 없으며, 특히 컴퓨터 프로그램의 변수값을 표현하는 데 적합
알고리즘 : 문제를 해결하기위한 방식
Try and Error method : 행과 착오의 반복을 통해 새로운 사실에 대한 학습
layer : 논리적으로 구조를 잡았는가 논리적인 구분
tier : 물리적으로 구조를 잡았는가 물리적인 단계

[ETC]용어정리 -1-

바인딩 : 메서드 호출시 최종 오버라이딩된 메서드를 호출하는 것
이벤트 : 실행에 대한 결과가 나타나는 것
매쉬업 : 대화형 웹 애플리케이션의 한 장르로서, 외부 데이터 소스에서 가져온 콘텐트를 사용하여 완전히 새롭고 혁신적인 서비스를 만드는것
퍼머링크 : 블로그나 게시판 등의 각각의 포스팅에 연결된 절대불변의 주소
시맨틱 웹 : 사람의 머리 속에 있는 언어에 대한 이해를 컴퓨터 언어로 표현하고 이것을 컴퓨터가 사용할 수 있게 만드는 것
웹 접근성 : 수평적이고 진입장벽이 낮은 웹을 추구하고 만드는 것
마샬링 : 원하는 내용을 보낼 수 있도록 전달하는 구조체를 변경시키는 것
빌드툴 : 개발자가 반복적으로 사용하는 다양한 작업을 쉽게 해주는 툴
프록시 : 서버와 클라이언트 사이에서 중계기로서 대리로 통신을 수행하는 기능을 가리켜 '프록시', 그 중계 기능을 하는 것을 프록시 서버라고 부른다
에이전트 : 사용자를 대신하여 작업을 수행하는 대리기능
SOAP : XML기반의 메세지를 컴퓨터 네트워크 상에서 교환하는 것
오픈소스 프레임워크 : 프로그래밍에서 특정 운영 체제를 위한 응용 프로그램 표준 구조를 구현하는 클래스와 라이브러리 모임을 개발자가 쉽게 사용할 수 있도록 접근성을 준 것
문자 인코딩 : 초기 텍스트는 미국내에서 아스키코드만을 사용하였으나 여러 나라의 언어를 아스키코드로 받기에는 부적절하여 타 언어에 맞는 코드를 찾는 과정에서 나타나게 됨
다형성 : 그 프로그래밍 언어의 자료형 체계의 성질을 나타내는 것으로, 프로그램 언어의 각 요소들(상수변수오브젝트함수메소드 등)이 다양한 자료형(type)에 속하는 것이 허가되는 성질을 가리킨다
비동기 요청 : 호출을 명령하는 중에도 다른 작업이 가능한 것
JAXB : XML을 파싱해서 자바 오브젝트 속성값에 데이터를 바인딩 하고 반대로 자바 오브젝트의 내용을 XML(또는 String 형태)로 변환해 주는 EE 기술이라고 할 수 있습니다
MVC : 모델,뷰,컨트롤 영역으로 나뉘어지는 구조로 각 영역을 나눔으로써 개발자와 디자이너의 분업화(?)가 더 잘되고 재사용성이 좋아 짱짱맨임

2014년 4월 29일 화요일

[Java]공뷰를합시다

gongzone.net

[Java]Instanceof연산자


  •  Instanceof
참조변수가 참조하고 있는 인스턴스의 실제 타입을 알아 보기위해 사용됩니다.
주로 조건문에 사용이 되며, instanceof의 왼쪽에는 참조변수가 오고 오른쪽에는 타입인 클래스명이 오게 됩니다. 조건문에 사용되드시 연산의 결과는 boolean값이 오게 됩니다.

  • 사용하는 이유
메서드가 호출될 때, 매개변수로 부모클래스 또는 그 자손 클래스의 인스턴스를 넘겨받겠지만 메서드 내에서는 정확히 어떤 인스턴스인지 알 길이 없습니다. instanceof 연산자를 이용해서 참조변수 부모가 가리키고 있는 인스턴스의 타입을 체크하고, 적절히 형변환한 다음에 작업을 해야 합니다.

2014년 4월 28일 월요일

[SQL developer]executequery executeupdate


  • execute
 - executeQuery, executeUpdate 두가지 모두의 경우를 포함 합니다. - DDL, DML, DCL 모두 사용할수 있습니다. - 다만 리턴이 boolean 값으로 넘어옵니다.



  • executeQuery()
 - ResultSet을 얻기위한 method - 주로 select 문에 이에 속함.


  • executeUpdate()
- 적용된 행의 갯수를 얻기 위한 method- DDL (insert, update, delete)에 사용.- DML (create, drop, alter)에 사용.

executeUpdate()는 쿼리로 처리된 행의 수를 나타내기 때문에 int로 반환됩니다.
예) int x = pstmt.executeUpdate();
행의 갯수가 없을 경우에는 0으로 나옵니다.

2014년 4월 27일 일요일

[SQL developer]Oracle Sequence


  • Sequence

- 유일(UNIQUE)한 값을 생성해주는 오라클 객체 (PK에 순번을 매겨주기 위해 보통 사용)
- 시퀀스를 생성하면 기본키와 같이 순차적으로 증가하는 컬럼을 자동적으로 생성할 수 있다.(중복값이 없고, 에러가 뜨면 해당 순번은 지나치게 된다.)
- 시퀀스는 테이블과 독립적으로 저장되고 생성된다. 따라서 하나의 시퀀스를 여러 테이블에서 사용할 수 있다.



    • Sequence syntax
    CREATE SEQUENCE sequence_name[START WITH n]                               -- n은 시퀀스 시작 값 지정[INCREMENT BY n]                          -- n은 시퀀스 증가 값 지정[MAXVALUE n | NOMAXVALUE]        -- 시퀀스 최대값, NOMAXVALUE는 무한대[MINVALUE n | NOMINVALUE]           -- 시퀀스 최소값, NOMINVALUE는 무한대[CYCLE | NOCYCLE][CACHE | NOCACHE]

    [SQL developer]Oracle 오라클 ORA-02298 에러해결

    화면에서 조회를 한다음 입력을 했는데
    java.sql.SQLException : ORA-02298 : 무결성 제약조건(SCOTT.FK_DEPTNO)이 위배되었습니다 - 부모키가 없습니다.

    데이터가 있는 상태에서 포린키를 생성하면 생성이 안됨. 
    해결방법 : 데이터를 지우고 난후 Foreign Key를 생성하면 된다.

    [SQL developer]Oracle 오라클 ORA-02291 에러해결

    화면에서 조회를 한다음 입력을 했는데
    java.sql.SQLException : ORA-02291 : 무결성 제약조건(SCOTT.FK_DEPTNO)이 위배되었습니다 - 부모키가 없습니다.

    Foreign Key를 삭제하면 된다.

    sql>alter table emp
    drop constraint fk_deptno;

    2014년 4월 24일 목요일

    [Java]Collection과 sort

    자바 Collection(List, Set, Map)Framework
    Collection 인터페이스는 객체의 그룹으로 중복을 허용합니다.
    Set 인터페이스는 Collection객체를 상속했고, 저장되는 값의 중복이 불가능합니다.
    List 인터페이스는 Collection객체를 상속했고, 저장되는 값의 중복이 가능하고 
    저장된 Index 번호를 통한 접근이 가능합니다.
    Map 인터페이스는 Set또는 Collection 어느것도 상속하지 않습니다.

    정렬 (Sort) - 배열 되어 있는 자료들을 큰 순서, 작은 순서로 재 배열 하는 것을 말합니다. 
    선택 정렬 : 
    원소들 중 기준 위치에 맞는 원소를 선택하여 자리를 교환한다. 이 것을 n번 반복하여 정렬을 완성한다.
    버블 정렬 : 
    인접한 두개의 원소를 비교하여 자리를 교환하는 방식으로 반복하며 정렬을 완성한다.
    퀵 정렬 : 
    기준값을 중심으로 완족 부분 집합과 오른쪽 부분 집합으로 분할 한 후 왼쪽엔 작은값을, 오른쪽엔 기준값 보다 큰 값을 이동시킨다. 이런 방식을 순환적으로 반복하여 정렬을 완성한다.
    삽입 정렬 : 
    정렬되어 있는 부분 집합에 정렬할 새로운 원소의 위치를 찾아 삽입한다.

    정렬을 구현할때 가장 먼저 알아두어야할 Interface가 있는데 바로 ComparableComparator 인터페이스 입니다. 

    2014년 4월 23일 수요일

    [Java]throws 예약어

    예외처리를 자신을 호출한 메서드에서 하도록 예외처리를 이양할 수 있다.
    1. try{
    2.     exceptionMethod();
    3. }catch(예외클래스 변수){
    4.     예외 처리;
    5. }
    6.  
    7.  
    8. public void exceptionMethod() throws 예외 클래스{
    9.     예외 발생;
    10. }

    [Java]Exception 종류


    • RuntimeException

    컴파일 타임에는 예외가 발생하지 않고 실행시에만 에러가 발생하는 예외들을 말한다.
    예외 처리를 하지 않아도 컴파일 타임에 에러가 발생하지 않으므로 UnCheckedException이라고도 한다. 런타임 예외는 대부분 개발자의 실수에서 온다.
    레퍼런스 변수값을 초기화하지 않고 호출할시에 오는 NullPointerException
    배열의 인덱스를 넘는 부분을 참조할 때 발생하는 ArrayIndexOutOfBoundsException
    정수를 0으로 나누어서 발생하는 ArithmeticException 등의 예외들이 있다.
    • RuntimeException이 아닌 일반 Exception들
    런타임 예외를 제외한 나머지 일반 예외들은 컴파일 타임에 예외가 발생하기때문에 반드시 예외처리를 해주어야 한다. 따라서 CheckedException이라고도 한다.
    일반 예외들은 개발자의 실수에서 보단 사용자의 작업에의해 발생하는 경우가 많다.
    파일 검색 프로그램에 사용자가 없는 파일의 이름을 입력했을 때 FileNotFoundException
    시스템 상황에 따라 입출력시 예외가 발생할 수 있으므로 IOException

    • 사용자 정의 예외
    자바에서 제공되는 예외 클래스만으로 특정 상황에 대한 예외 정보를 저장할 수 없을 때는 사용자정의 예외를 만들어서 발생한 상황에 대한 정보를 저장할 수 있다.
    생성시 Throwable클래스를 상속받아서 정의해도 되지만 개발자들이 예외처리하는 대상의 가장 가까운 형태의 상위클래스인 Exception클래스를 상속받아 정의하는 것이 간편하다.

    IllegalArgumentException : 인수가 맞지 않아 생기는 예외


    [Java]stringBuffer와 stringbuilder


    • stringBuffer

    스레드에 안전하게(ThreadSafe) 설계되어 있으므로,
    여러 개의 스레드에서 하나의 StringBuffer 객체를 처리해도 전혀 문제가 되지 않는다.
    스레드에 안전한 프로그램이 필요할 때나,
    개발 중인 시스템의 부분이 스레드에 안전한지 모를 경우 사용하면 좋다.
    자바에 스레드를 동기화 하기위한 싱크로나이즈(synchronized)방식을 사용
    동기화를 하면 응답시간이 길어지는 단점이 있으나 스레드를 안전하게 할 수 있다.
    • stringBuilder

    JDK 5.0에서 추가됐다.
    단일 스레드에서의 안전성만을 보장한다. 
    스레드에 안전한지 여부가 전혀 관계 없는 프로그램을 개발할 때 사용하면 좋다.

    싱크로나이즈(synchronized)방식을 비사용
    • 응답시간
    string > stringBuffer > stringbuilder
    • 메모리
    string > stringBuffer == stringbuilder

    2014년 4월 22일 화요일

    [Java]Thread

    • Thread
    일반적으로 프로그램을 실행하게 되면, main() 함수가 실행되면서, 하나의 프로세스가 진행된다. 이런 하나의 프로세스를 메인 스레드라고 보면 되는데, 메인 스레드 하나만 있는 것을 싱글 스레드(single-thread) 라고 하며, 스레드가 여러개인 것을 멀티 스레드(Multi-thread) 혹은 다중 스레드라 한다.

    • InterruptedException 이란??

    말 그대로 Thread가 중단되었을 때 발생하는 예외입니다. 즉, wait()메소드나 sleep() 메소드를
    사용해 Thread가 대기 상태로 들어갔다가 깨어나지 못 할때 발생하는 예외입니다. 또한,
    interrupt()메소드를 사용해 Thread를 중단시킬 때 발생하기도 합니다

    [Java]stringBuffer와 string

    • String
    string 클래스는 문자열 변경이 불가능하다. 변경이 아닌 새롭게 만들어 내기 때문에 기존 문자열은 남아 있게 된다. 그 결과 자원(시간,메모리)낭비를 초래한다.
    string 클래스가 immutable(변경불가)클래스인 이유?
    string 클래스의 값은 생성자에서만 설정이 된다. 그래야 다른 스레드나 변수에 안전하게  공유가 가능하기 때문이다.
    • stringBuffer
    StringBuffer 클래스는 가지고 있는 문자열의 내용을 변경 가능하도록 만든 클래스이다. append(), insert(), delete() 등의 메소드를 통하여 StringBuffer 객체가 가지고 있는 문자열을 변경할 수 있고 String 클래스처럼 새로운 객체를 생성하지 않고, 기존의 문자열을 변경한다. 이 경우 객체 생성을 하지 않아 String 클래스보다 효율적이라고 생각하기 쉬우나
    동기화(synchronization)를 보장해야 하기 때문에 단순한 참조에서는 상대적으로 String 보다 나쁜 성능(가독성을 떨어뜨린다.)을 보인다. 
    따라서, 단순 참조가 많은 경우 StringBuffer 클래스보다 String 클래스가 유리하다. 
    물론, StringBuffer 클래스는 동기화되어 있으므로, 멀티 쓰레드에 대하여 안전하다. 

    [Java]Redirect

    response.sendRedirect ( "/jamo.jsp" );

    현재문서를 종료하지 않은채 jamo.jsp(or url)문서로 이동한다.(세션을 유지한다.)url은 웹서버마다 다르므로 완전한 경로가 안전하다.이전의 out 출력이나 스크립트 내용이 안먹는다.

    [Java]RequestDispatcher

    RequestDispatcher rd = request.getRequestDispatcher ( "/A.jsp" );
    rd.forward ( request, response );

    현재문서를 종료하고 지정문서로 이동한다.
    이전의 out 출력이나 스크립트 내용은 실행이 안된다.

    2014년 4월 21일 월요일

    [Java]final 예약어


    • 변수 앞에 오는 final
    final 예약어가 변수 앞에 지정되었을 경우에는 변수의 값을 프로그램 실행 중 변경할 수 없다는 것을 의미한다. 따라서, final 예약어는 주로 상수를 정의할 때 변수 앞에 사용된다.
    final앞에 static이 오면 해당 클래스를 사용하는 모든 객체에서 공유하는 상수를 의미하며
    final앞에 static 예약어가 오지 않으면 해당 객체에서 공유되는 상수를 의미한다.

    • 메소드 앞에 오는 final

    메소드에 final 예약어가 지정되면 해당 메소드를 오버라이딩할 수 없다는 의미이다.

    • 클래스 앞에 오는 final
    final 예약어가 class앞에 지정되면 해당 클래스는 상속될 수 없다는 것을 의미한다.

    [Java]접근 제한자


    • 접근 제한자
    • private
     해당 클래스 내에서만 접근이 가능한 접근 제한자이다.
    •  default
    해당 단위 앞에 접근 제한자가 지정되지 않는 경우이다.
    이 경우 기본적으로 같은 패키지 내에서만 접근이 가능하다. 

    • prodected
    같은 패키지 내에서는 접근이 허용되고, 다른 패키지에서도 자식 클래스에서는 접근이 가능한 접근 제어자이다. 
    •  public
    모든 영역에서 접근이 가능한 접근 제어자이다.
    즉 다른 패키지에서도 접근 가능하다. 
     


    2014년 4월 18일 금요일

    [Java]boolean

    a          b          a&&b          a||b
    false     false     false          false
    false     true      false          true
    true      false     false          true
    true      true       true           true

    2014년 4월 16일 수요일

    [DB]JDBC코딩 순서

    1. 드라이버 다운
    2. 드라이버 로딩
    3. DB 연결
    4. SQL 준비
    5. SQL 화면실행
    6. 결과 받기
    7. close(); 종료

    1. <%@ page LANGUAGE="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%>
    2. <%@ page import = "java.sql.*" %>
    3. <!DOCTYPE html>
    4. <html>
    5. <head>
    6. <meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
    7. <title>INSERT title here</title>
    8. </head>
    9. <body>
    10. <%
    11. Connection conn = NULL;
    12. PreparedStatement pstmt = NULL;
    13. ResultSet rs = NULL;
    14. try{
    15.     //2.Driver loading
    16.     Class.forName("oracle.jdbc.driver.OracleDriver");
    17.     //Driver loading 성공여부 출력
    18.     OUT.println("OracleDriver드라이버 로딩 성공<br>");
    19.     //DB URL,ID, PW값 변수로 지정
    20.     String url = "jdbc:oracle:thin:@127.0.0.1:1521:xe";
    21.     String dbId = "hr";
    22.     String dbPw = "java1234";
    23.     //3.DB connection
    24.     conn = DriverManager.getConnection(url,dbId,dbPw);
    25.     //DB connection 성공여부 출력
    26.     OUT.println("oracle dbms 연결 성공<br>");
    27.     String SQL = "select employee_id, first_name from employees";
    28.     //4.SQL 준비
    29.     pstmt = conn.prepareStatement(SQL);
    30.     //5.SQL 화면 실행
    31.     rs = pstmt.executeQuery();
    32.     //6.결과 받기 및 출력
    33.     while(rs.NEXT()){
    34.         OUT.print(rs.getInt("employee_id"));
    35.         OUT.print(rs.getString("first_name"));
    36.         OUT.print("<br>");
    37.     }
    38. }catch(ClassNotFoundException e){
    39.     OUT.println("OracleDriver드라이버 로딩 실패");
    40.     e.printStackTrace();
    41.    
    42. }catch(SQLException e){
    43.     OUT.println("SQL 예외발생 실패");
    44.     e.printStackTrace();
    45. }finally{
    46.     //7.close(); 종료
    47.     rs.close();
    48.     pstmt.close();
    49.     conn.close();
    50. }
    51. %>
    52. </body>
    53. </html>

    2014년 4월 14일 월요일

    [Java]로그인 화면(model2)

    1. login_form.jsp
    1. <%@ page language="java" contentType="text/html; charset=EUC-KR"
    2.     pageEncoding="EUC-KR"%>
    3. <!DOCTYPE html>
    4. <html>
    5. <head>
    6. <meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
    7. <title>Insert title here</title>
    8. <style type="text/css">
    9.     table, tr, td{
    10.         border: 1px solid #000;
    11.         text-align:center;
    12.     }
    13.     table{
    14.         margin:0 auto;
    15.     }
    16.    
    17. </style>
    18. </head>
    19. <body>
    20. <%
    21.     Cookie[] cookies = request.getCookies();
    22.     String id="";
    23.     String pw="";
    24.     if(cookies != null){
    25.         for(Cookie c : cookies){
    26.             if(c.getName().equals("id")){
    27.                 id = c.getValue();
    28.             }else if(c.getName().equals("pw")){
    29.                 pw = c.getValue();
    30.             }
    31.         }
    32.     }
    33. %>
    34.     <form method="post" action="/LoginAction">
    35.     <div>
    36.         <table class="table" border="2">
    37.             <tr>
    38.                 <td>ID:</td>
    39.                 <td>
    40.                     <input type="text" name="id" value="<%=id%>">
    41.                 </td>
    42.                 <td rowspan="2">
    43.                     <input type="submit" value="Login" >
    44.                 </td>
    45.             </tr>
    46.             <tr>
    47.                 <td>PW:</td>
    48.                 <td>
    49.                     <input type="password" name="pw" value="<%=pw%>">
    50.                 </td>
    51.             </tr>
    52.             <tr>
    53.                 <td colspan="3">
    54.                     <input name="save" type="checkbox">ID/PW 저장
    55.                 </td>
    56.             </tr>
    57.         </table>
    58.     </div> 
    59.     </form>
    60. </body>
    61. </html>
    2. LoginAction.java
    1. package com.example;
    2.  
    3. import java.io.IOException;
    4. import java.io.PrintWriter;
    5.  
    6. import javax.servlet.RequestDispatcher;
    7. import javax.servlet.ServletException;
    8. import javax.servlet.annotation.WebServlet;
    9. import javax.servlet.http.Cookie;
    10. import javax.servlet.http.HttpServlet;
    11. import javax.servlet.http.HttpServletRequest;
    12. import javax.servlet.http.HttpServletResponse;
    13.  
    14.  
    15. @WebServlet("/LoginAction")
    16. public class LoginAction extends HttpServlet {
    17.     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    18.         /*String log = request.getParameter("login");
    19.         Hw hw = new Hw();
    20.         String str = hw.logPrint(log);*/
    21.         request.setCharacterEncoding("UTF-8");
    22.         response.setContentType("text/html");
    23.         response.setCharacterEncoding("UTF-8");
    24.        
    25.         PrintWriter out = response.getWriter();
    26.         //요청시 매개변수 "id"를 가져와 id 넣는다
    27.         String id = request.getParameter("id");
    28.         //요청시 매개변수 "pw"를 가져와 pw 넣는다
    29.         String pw = request.getParameter("pw");
    30.        
    31.         boolean save = false;
    32.         if(request.getParameter("save") != null){
    33.             save = true;
    34.         }
    35.        
    36.         //비지니스 레이어 호출(model layer)
    37.         Dao dao = new Dao();
    38.         if(dao.login(id, pw)){
    39.             if(save){
    40.                 Cookie idCookie = new Cookie("id", id);
    41.                 idCookie.setMaxAge(60*60*24);
    42.                 response.addCookie(idCookie);
    43.                
    44.                 Cookie pwCookie = new Cookie("pw", pw);
    45.                 pwCookie.setMaxAge(60*60*24);
    46.                 response.addCookie(pwCookie);
    47.             }
    48.             //id,pw가 맞다면 메세지로 success 출력
    49.             request.setAttribute("msg""success");
    50.         }else{
    51.             //id,pw가 아니다면 메세지로 fail 출력
    52.             request.setAttribute("msg""fail");
    53.         }
    54.         // request + alpha
    55.         /*request.setAttribute("answer", str);
    56.         */
    57.         //"/login_view.jsp"로 요청을 다른 서블릿으로 보내줌
    58.         RequestDispatcher rd = request.getRequestDispatcher("/login_view.jsp");
    59.         rd.forward(request, response);
    60.     }
    61. }
    3. Dao.java
    1. package com.example;
    2.  
    3. public class Dao {
    4.     public boolean login(String id, String pw){
    5.         // db에서 가져온 값
    6.         String dbId = "admin";
    7.         String dbPw = "1234";
    8.         if(id.equals(dbId) && pw.equals(dbPw)){
    9.             //id&pw가 일치할 경우 값을 남긴다
    10.             return true;
    11.         }
    12.         //일치하지 않는 경우 남기지 않는다
    13.         return false;
    14.     }
    15.    
    16. }
    4. login_view.jsp
    1. <%@ page language="java" contentType="text/html; charset=EUC-KR"
    2.     pageEncoding="EUC-KR"%>
    3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    4. <html>
    5. <head>
    6. <meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
    7. <title>Insert title here</title>
    8. </head>
    9. <body>
    10.     <%=request.getAttribute("msg")%>
    11. </body>
    12. </html>