반응형

① login.html 생성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인 창</title>
</head>
<body>
<form name="frmLogin" method="post" action="/proc1/loginTest" encType="utf-8">
아이디 : <input type="text" name="user_id"><br>
비밀번호 : <input type="password" name="user_pw"><br>
<input type="submit" value="로그인"><input type="reset" value="다시 입력">
 
</form>
 
</body>
</html>
cs

 

 

 

② LoginTest 클래스작성

 

http://colorscripter.com/s/jH2BdbF

 

공유된 코드 - Color Scripter

저작권자 : jung_ye_jin@naver.com 삭제 요청 코드 설명 : loginTest

colorscripter.com

 

- ID나 비밀번호를 제대로 입력하지 않으면 오류 메시지를 출력하고 로그인 창으로 이동 가능한 a 태그 생성

- ID와 비밀번호가 제대로 입력 되었으면 로그인 메세지 출력

- ID가 admin이면 관리자 메세지 출력

 

 

 

③ 실행

아이디와 비밀번호를 입력 후 로그인 버튼을 클릭합니다.

 

 

페이지가 넘어가 로그인 성공 문구를 출력합니다.

 

 

만약 아이디와 비밀번호 중 하나라도 입력하지 않으면 로그인 실패 문구가 출력됩니다.

 

 

아이디가 admin이면 관리자 문구가 출력됩니다.

반응형
반응형

▶ GET 방식과 POST 방식의 차이  

 

GET 방식

- 서블릿에 데이터를전송할 때는 데이터가 URL 뒤에 name=value 형태로 전송됨

- 여러 개의 데이터를 전송할 때는 '&'로 구분해서 전송됨

- 보안이 취약함

- 전송할 수 잇는 데이터는 최대 255자

- 기본 전송 방식이고 사용이 쉬움

- 웹 브라우저에 직접 입력해서 전송 가능

- 서블릿에서는 doGet( )을 이용해 데이터 처리

 

POST 방식

- 서블릿에 데이터를 전송할 때는 TCP/IP 프로토콜 데이터의 body 영역에 숨겨진 채 전송됨

- 보안에 유리

- 전송 데이터 용량이 무제한

- 전송 시 서블릿에서는 또 다시 가져오는 작업을 해야하므로 처리속도가 GET 방식보다 느림

- 서블릿에서는 doPost( )를 이용해 데이터 처리 

 

 

 

▶ GET 방식과 POST 방식 요청 동시에 처리하기  

 

① login.html 작성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인 창</title>
</head>
<body>
<form name="frmLogin" method="get" action="login2" encType="UTF-8">
    아이디 : <input type="text" name="user_id"><br>
    비밀번호 : <input type="password" name="user_pw"><br>
    <input type="submit" value="로그인"><input type="reset" value="다시입력">
</form>
</body>
</html>
cs

 

 

② LoginServlet2.java 작성 (생성 시 doGet과 doPost에 체크)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
package sec01.ex01;
 
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;
 
/**
 * Servlet implementation class LoginServlet2
 */
@WebServlet("/login2")
public class LoginServlet2 extends HttpServlet {
    private static final long serialVersionUID = 1L;
 
    /**
     * @see Servlet#init(ServletConfig)
     */
    public void init(ServletConfig config) throws ServletException {
        System.out.println("init 메서드 호출");
    }
 
    /**
     * @see Servlet#destroy()
     */
    public void destroy() {
        System.out.println("destroy 메서드 호출");
    }
 
    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
        throws ServletException, IOException {
        System.out.println("doGet 메서드 호출");
        doHandle(request, response);
    }
 
    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
        throws ServletException, IOException {
        System.out.println("doPost 메서드 호출");
        doHandle(request, response);
    }
 
    private void doHandle(HttpServletRequest request, HttpServletResponse response) 
        throws ServletException, IOException{
        request.setCharacterEncoding("utf-8");
        String user_id = request.getParameter("user_id");
        System.out.println("doHandle 메서드 호출");
        String user_pw = request.getParameter("user_pw");
        System.out.println("아이디 : " + user_id);
        System.out.println("비밀번호 : " + user_pw);
        
    }
    
 
}
 
cs

이 방식은 GET 방식으로 요청 시 다시 doHandle( )을 호출하고,

POST 방식으로 요청시 다시 doHandle( )을 호출하기 때문에 모든 호출방식에 대해 처리 가능

 

 

 

③ GET 방식으로 요청한 결과

 

 

 

 

④ POST 방식으로 요청한 결과 ( login.html 에서 method를 post로 변경한 후 실행 )

 

반응형
반응형

CalcServlet.java

 

 

 

˙ 실행 결과

반응형
반응형

① Java Resources > src > 패키지 안 InputServlet 클래스 / WebContent 안 input.html을 생성합니다.

 

② html을 다음과 같이 작성합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>여러가지 input 타입 표시 창</title>
</head>
<body>
    <form name="frmInput" method="get" action="input">
        아이디 : <input type="text" name="user_id"><br>
        비밀번호 : <input type="password" name="user_pw"><br>
        
        <input type="checkbox" name="subject" value="java" checked>자바
        <input type="checkbox" name="subject" value="C언어">C언어
        <input type="checkbox" name="subject" value="JSP">JSP
        <input type="checkbox" name="subject" value="안드로이드">안드로이드
        <br>
        <br>
        <input type="submit" value="전송">
        <input type="reset" value="초기화">
    </form>
</body>
</html>
 
 
 
cs

 

③ Servlet을 다음과 같이 작성합니다.

     - 한개씩 전송된 값은 getParameter( )를 이용
     - 하나의 name으로 여러 값을 전송하는 경우 getParameterValues( )를 이용하여 배열 형태로 반환

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
package sec01.ex01;
 
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;
 
/**
 * Servlet implementation class InputServlet
 */
@WebServlet("/input")
public class InputServlet extends HttpServlet {
    
 
    /**
     * @see Servlet#init(ServletConfig)
     */
    public void init() throws ServletException {
        System.out.println("init 메서드 호출");
    }
 
    /**
     * @see Servlet#destroy()
     */
    public void destroy() {
        System.out.println("destroy 메서드 호출");
    }
 
    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
        throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        String user_id = request.getParameter("user_id");
        String user_pw = request.getParameter("user_pw");
        
        System.out.println("아이디 : " + user_id);
        System.out.println("비밀번호 : " + user_pw);
        
        String[] subject = request.getParameterValues("subject");
        for(String str : subject) {
            System.out.println("선택한 과목 : " + str);
        }
    }
 
    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
        throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }
 
}
 
cs

 

※ Servlet 매핑 방법은 아래의 링크를 참고해 주세요.

maxtime1004.tistory.com/51

 

[JSP] 서블릿(Servlet) 매핑하기 - 애너테이션

▶ 두번째 방법 - 애너테이션 ① 새로운 Servlet을 생성한 다음 Class name을 작성한다. ② /ThirdServlet을 클릭 후 Edit 을 눌러 /third로 변경한다. ③ 다음 그림과 같이 체크 후 Finish를 클릭한다. ④ 아..

maxtime1004.tistory.com

 

Tomcat을 재실행하고 브라우저에서 input.html을 열고, 데이터를 입력하여 전송 버튼을 클릭합니다.

 

⑤ get 방식으로 파라미터가 넘어가고 console 창을 통해 결과를 확인합니다.

 

 

반응형
반응형

▶ 두번째 방법 - 애너테이션 

 

① 새로운 Servlet을 생성한 다음 Class name을 작성한다.

 

 

② /ThirdServlet을 클릭 후 Edit 을 눌러 /third로 변경한다.

 

③ 다음 그림과 같이 체크 후 Finish를 클릭한다.

 

④ 아래와 같이 코드를 변경해준다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package sec01.ex01;
 
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;
 
/**
 * Servlet implementation class ThirdServlet
 */
@WebServlet("/third")
public class ThirdServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
 
    /**
     * @see Servlet#init(ServletConfig)
     */
    public void init(ServletConfig config) throws ServletException {
        System.out.println("ThridServlet init 메서드 호출");
    }
 
    /**
     * @see Servlet#destroy()
     */
    public void destroy() {
        System.out.println("ThirdServlet destory 메서드 호출");
 
    }
 
    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
        throws ServletException, IOException {
        System.out.println("ThirdServlet doGet 메서드 호출");
        response.getWriter().append("Served at: ").append(request.getContextPath());
    }
 
    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }
 
}
 
cs

⑤ Tomcat을 재실행하고 브라우저에서 서블릿 매핑 이름으로 요청하고 console 창을 확인합니다.

⑥ 결과

반응형
반응형

▶ 첫번째 방법 - web.xml 

 

① Java Resources > src > sec01.ex01 위치에 FirstServlet.java를 생성하여 아래 코드를 작성합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package sec01.ex01;
 
import java.io.IOException;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
public class FirstServlet extends HttpServlet{
    @Override
        public void init() throws ServletException{
        System.out.println("init 메서드 호출");
    }
    
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
    throws ServletException, IOException{
        System.out.println("doGet 메서드 호출");
    }
    
    @Override
        public void destroy() {
        System.out.println("destroy 메서드 호출");
    }
 
}
 
cs

 

 

② WEB-INF > lib > web.xml 파일을 클릭 한 후 servlet 부분을 추가하여 작성해 줍니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" 
id="WebApp_ID" version="3.1">
  <display-name>proc1</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>aaa</servlet-name>
   <servlet-class>sec01.ex01.FirstServlet</servlet-class>
  </servlet>
  
  <servlet-mapping>
   <servlet-name>aaa</servlet-name>
   <url-pattern>/first</url-pattern>
  </servlet-mapping>
</web-app>
 
 
 
cs

 

 

③ Servers > Add and Remove를 클릭한후 아래와 같이 진행합니다.

 

 

④ Tomcat을 재실행하고 브라우저에서 서블릿 매핑 이름으로 요청하고 console 창을 확인합니다.

 

⑤ 결과

 

반응형
반응형

▶ 서블릿(Servlet)  

 

˙서버쪽에서 실행되면서 클라이언트의 요청에 따라 동적으로 서비스를 제공하는 자바 클래스

˙자바의 특징을 가지지만 독자적으로 실행되지 못하고 Tomcat과 같은 JSP/Servlet 컨테이너에서 실행

 

˙서블릿의 특징

 

서버 쪽에서 실행되면서 기능 수행

기존의 정적인 웹 프로그램의 문제점을 보완하여 동적인 여러가지 기능 제공

스레드 방식으로 실행

자바로 만들어져 자바의 특징(객체 지향)을 가짐

컨테이너에서 실행

컨테이너 종류에 상관업이 실행(플랫폼에 독립적)

보안기능을 적용하기 쉬움

웹 브라우저에 요청 시 기능 수행

 

 

 

▶ 서블릿(Servlet) API  

서블릿 API Servlet과 ServletConfig 인터페이스를 구현해 제공하며 GenericServlet 추상 클래스가 이 두 인터페이스의 추상 메서드를 구현

그리고 GenericServlet을 다시 HttpServlet이 상속 받음

 

 

˙서블릿(Servlet) API 구성 요소 특징 

 

① Servlet 인터페이스

     - javax.servlet 패키지에 선언되어 있음

     - Servlet 관련 추상 메서드 선언

     - init(), service, destory(), getServletInfo(), getServletConfig()

 

② ServletConfig 인터페이스

     - javax.servlet 패키지에 선언되어 있음

     - Servlet 기능 관련 추상 메서드 선언

     - getInitParameter(), getInitParmaeterNames(), getServletContext(), getServletName()

 

③ GenericServlet 클래스

     - javax.servlet 패키지에 선언되어 있음

     - 상위 두 인터페이스를 구현하여 일반적인 서블릿 기능을 구현한 클래스

     - GenericServlet을 상속받아 구현한 사용자 서블릿은 사용되는 프로토콜에 따라 각각 service()를 오버라이딩 해서 구현

 

④ HttpServlet 클래스

     - javax.servlet.http 패키지에 선언되어 있음

     - GenericServlet 을 상속받아 http 프로토콜을 사용하는 웹 브라우저에서 서블릿 기능을 수행

     - 웹 브라우저 기반 서비스를 제공하는 서블릿을 만들 때 상속받아 사용

     - 요청 시 service()가 호출되면서 요청방식에 따라 doGet()이나 doPost()가 차례대로 호출됨

 

 

˙HttpServlet의 여러 가지 메서드 기능 

 

protected doDelete(HttpServletRequest req, HttpServletResponse resp)

: 서블릿이 request를 수행하기 위해 service()를 통해서 호출됨

 

protected doGet(HttpServletRequest req, HttpServletResponse resp)

: 서블릿이 Get request를 수행하기 위해 service()를 통해서 호출됨

 

protected doHead(HttpServletRequest req, HttpServletResponse resp)

: 서블릿이 HEAD  request를 수행하기 위해 service()를 통해서 호출됨

 

protected doPost(HttpServletRequest req, HttpServletResponse resp)

: 서블릿이 POST request를 수행하기 위해 service()를 통해서 호출됨

 

protected service(ServletRequest req, ServletResponse resp)

: request를 public service()에서 전달받아 doXXX() 메서드를 호출함

 

public service(ServletRequest req, ServletResponse resp)

: 클라이언트의 request를 protected service()에 전달 

 

 

 

▶ 서블릿의 생명주기 메서드

 

초기화 [ init( ) ]

- 서블릿 요청시 맨 처음한번만 호출됨

- 서블릿 생성 시 초기화 작업을 주로 수행함

 

작업수행 [ doGet( ) / doPost( ) ]

-  서블릿 요청 시 매번 호출됨

- 실제로 클라이언트가 요청하는 작업을 수행함

 

종료 [destory( ) ]

- 서블릿이 기능을 수행하고 메모리에서 소멸될 때 호출됨

- 서블릿의 마무리 작업을 주로 수행함

 

반응형
반응형

▶ 웹 애플리케이션  

 

˙웹 컨테이너에서 실행되는 JSP, 서블릿 자바 클래스들을 사용해 정적 웹 프로그래밍 방식의 단점을 보완하여 서비스 제공하는 서버 프로그램

˙HTML, 자바 스크립트, CSS 등 그대로 사용 가능

 

 

 

▶ 웹 애플리케이션의 기본 구조  

① webShop

      - 웹 애플리케이션의 루트 디렉터리

      - 다른 웹 애플리케이션 이름과 중복을 허용하지 않으며, JSP HTML 파일이 저장

 

② WEB-INF

      - 웹 애플리케이션에 관한 정보가 저장

      - 외부에서 접근 불가

 

③ classes

      - 웹 애플리케이션이 수행하는 서블릿과 다른 일반 클래스들이 위치

 

④ lib

      - 웹 애플리케이션에서 사용되는 라이브러리 압축파일(jar 파일) 저장

      - DB 연동 드라이버나 프레임워크 기능 관련 jar 파일이 저장

      - lib 디렉터리의 jar는 클래스패스가 자동으로 설정

 

⑤ web.xml

      - 배치 지시자(deployment descriptor)로서 일종의 환경 설정 파일

      - 웹 애플리케이션에 대한 여러가지 설정을 할 때 사용

 

 

 

반응형

+ Recent posts