반응형

쿠키가 무엇인지 궁금하다면?

maxtime1004.tistory.com/61

 

[JSP] 쿠키(Cookie)란?

▶ 쿠키(Cookie) 쿠키란 웹 페이지들 사이의 공유 정보를 클라이언트 PC에 저장해 놓고 필요할 때 여러 웹 페이지들이 공유해서 사용할 수 있도록 매개 역할을 하는 방법 · 쿠키의 특징 ① 정보가

maxtime1004.tistory.com

 

 

① SetCookieValue 서블릿 생성

package sec02.ex01;

import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLEncoder;
import java.util.Date;

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

/**
 * Servlet implementation class SetCookieValue
 */
@WebServlet("/set")
public class SetCookieValue extends HttpServlet {
	private static final long serialVersionUID = 1L;
    

	/**
	 * @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();
		
		Date d = new Date();
		Cookie c = new Cookie("cookieTest", URLEncoder.encode("JSP 프로그래밍 입니다.","utf-8"));
		c.setMaxAge(24*60*60);
		response.addCookie(c);
		out.print("현재시간 : " + d);
		out.print("문자열을 Cookie에 저장합니다.");
	}

}

 

Cookie 객체를 생성한 후 cookieTest 이름으로 한글 정보를 인코딩해서 쿠키에 저장하고, 유효기간을 설정한 후

생성된 쿠키를 브라우저로 전송함

 

※ c.setMaxAge( ) 안 숫자가 음수이면 Session Cookie

 

 

 

② getCookieValue 서블릿 생성

package sec02.ex01;

import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLDecoder;

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

/**
 * Servlet implementation class GetCookieValue
 */
@WebServlet("/get")
public class GetCookieValue extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
	/**
	 * @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();
		Cookie[] allValues = request.getCookies();
		
		for(int i=0; i<allValues.length; i++) {
			if(allValues[i].getName().equals("cookieTest")) {
				out.println("<h2>Cookie 값 가져오기 : "
						+ URLDecoder.decode(allValues[i].getValue(),"utf-8"));
			}
		}
	
	}

}

request의 getCookies( ) 메서드를 호출해 브라우저에게 쿠키 정보를 요청한 후 쿠키 정보를 배열로 가져오고,

배열에서 저장할 때 사용한 쿠키 이름인 cookieTest로 검색해 쿠키 값을 가져옴

 

 

 

SetCookieValue 실행

 

 

 

④ GetCookieValue 실행

 

 

반응형
반응형

▶ 쿠키(Cookie) 

 

쿠키란 웹 페이지들 사이의 공유 정보를 클라이언트 PC에 저장해 놓고 필요할 때 여러 웹 페이지들이 공유해서 사용할 수 있도록 매개 역할을 하는 방법

 

· 쿠키의 특징

① 정보가 클라이언트 PC에 저장

저장 정보 용량에 제한 존재

보안이 취약

클라이언트 브라우저에서 사용 유무를 설정 가능

도메인 당 쿠키 생성

 

˙쿠키의 종류

속성 Persistence 쿠키 Session 쿠키
생성 위치 파일로 생성 브라우저 메모리에 생성
종료 시기 쿠키 삭제 / 쿠키 설정 값이 종료된 경우 브라우저를 종료한 경우
최초 접속 시 전송 여부 최초 접속 시 서버로 전송 최초 접속 시 서버로 전송되지 않음
용도 로그인 유무 또는 팝업창을 제한할 때 사이트 접속 시 세션 인증 정보를 유지할 때

 

 

 

▶ 쿠키 기능 실행 과정 

 

① 브라우저로 사이트에 접속

② 서버는 정보를 저장한 쿠키를 생성

③ 생성된 쿠키를 브라우저로 전송

④ 브라우저는 서버로부터 받은 쿠키 정보를 쿠키 파일에 저장

⑤ 브라우저가 다시 접속해 서버가 브라우저에게 쿠키 전송을 요청하면 브라우저는 쿠키 정보를 서버에 넘겨줌

⑥ 서버는 쿠키 정보를 이용해 작업

 

 

 

▶ 쿠키 API 

 

- java.servlet.http.Cookie 를 이용

- HttpServletResponse의 addCookie( ) 메서드를 이용해 클라리언트 브라우저에 쿠키를 전송한 후 저장

- HttpServletRequest의 getCookie( ) 메서드를 이용해 쿠키를 서버로 가져옴

 

˙ 쿠키 클래스의 여러가지 메서드

     getComment( ) : 쿠키에 대한 설명을 가져옴

     getDomain( ) : 쿠키의 유효한 도메인 정보를 가져옴

     getMaxAge( ) 쿠키 유효 기간을 가져옴

     getName( ) : 쿠키 이름을 가져옴

     getPath( ) : 쿠키의 디렉터리 정보를 가져옴

     get Value( ) : 쿠키의 설정 값을 가져옴

     setComment(String) : 쿠키에 대한 설명을 설정

     setDomain(String) : 쿠키의 유효한 도메인을 설정

     setMaxAge(int) : 쿠키 유효 기간을 설정함

     setValue(String) : 쿠키 값을 설정함

     setPath(String) : 쿠키의 디렉터리 정보를 설정함

 

쿠키 생성 시 setMaxAge( ) 메서드 인자 값의 종류를 지정해서 파일에 저장하는 Persistence 쿠키를 만들거나

메모리에만 저장하는 Session 쿠리를 만들 수 있습니다.

즉, setMaxAge( ) 메서드를 이용한 퀴 저장 방식은 다음 두가지로 나눌 수 있습니다.

인자 값으로 음수나 setMaxAge( ) 메서드를 사용하지 않고 쿠키를 만들면 Session 쿠키로 저장됩니다.

인자 값으로 양수를 지정하면 Persistence 쿠키로 저장됩니다.

반응형
반응형

▶ Servlet 

 

ServletConfig는 각 Servlet 객체에 대해 생성됨

ServletConfig는 javax.servlet 패키지에 인터페이스로 선언되어 있으며, 서블릿에 대한 여러가지 기능 제공

각 서블릿에서만 접근할 수 있으며 공유는 불가능

ServletConfig는 서블릿과 동일하게 생성되고 서블릿이 소멸되면 같이 소멸

 

· ServletConfig 가 제공하는 기능

- ServletContext 객체를 얻는 기능

- 서블릿에 대한 초기화 작업 기능 ( @WebServlet 애너테이션 이용 / web.xml에 설정 )

 

 

 

▶ @WebServlet 애너테이션을 이용한 서블릿 설정 

 

˙ @WebServlet 구성 요소들

urlPatterns : 웹 브라우저에서 서블릿 요청 시 사용하는 매핑 이름

name : 서블릿 이름

loadOnStartup : 컨테이너 실행 시 서블릿이 로드되는 순서 지정

initParams : @WebInitParam 애너테이션 이용해 매개변수를 추가하는 기능

description : 서블릿에 대한 설명

 

 

 InitParamServlet.java 생성합니다.

class name을 입력 후 Next를 클릭합니다.

 

Add를 클릭합니다.

 

이메일 정보를 입력합니다.

 

전화번호 속성도 추가하고 URL mappings 를 클릭하여 Remove를 클릭합니다.

 

/sInit 과 /sInit2를 추가합니다.

 

doGet에 체크한 뒤 Finish를 클릭합니다.

 

Servlet 파일을 확인하면 해당 코드가 나타난 것을 확인할 수 있습니다.

 

http://colorscripter.com/s/t44NA6W

 

공유된 코드 - Color Scripter

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

colorscripter.com

위 링크에 있는 코드로 수정합니다.

 

각각 /sInit 과 /sInit2로 요청하면 동일한 결과가 출력됩니다.

 

   

반응형
반응형

▶ ServletContext 매개변수 설정 

 

① web.xml  수정

1
2
3
4
5
6
7
8
9
10
11
12
13
14
  <context-param>
      <param-name>menu_member</param-name>
      <param-value>회원등록 회원조회 회원수정</param-value>
  </context-param>
  
  <context-param>
      <param-name>menu_order</param-name>
      <param-value>주문조회 주문등록 주문수정 주문취소</param-value>
  </context-param>
  
  <context-param>
      <param-name>menu_goods</param-name>
      <param-value>상품조회 상품등록 상품수정 상품삭제</param-value>
  </context-param>
cs

web-app 사이에 해당 코드를 추가

 

 

ContextParamServlet 클래스 파일 생성

 

http://colorscripter.com/s/nD2yXI1

 

공유된 코드 - Color Scripter

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

colorscripter.com

 

 

③ http://localhost:70/proc2/initMenu로 요청 결과

 

 

 

▶ ServletContext 파일 입출력 기능 

 

WebContent/WEB-INF 폴더 선택 후 bin Folder 생성

 

 

② bin Folder 안에 init.txt 인 파일을 생성한 후 해당 내용 입력

 

 

③ ContextFileServlet 클래스를 생성

 

http://colorscripter.com/s/C2OcqMh

 

공유된 코드 - Color Scripter

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

colorscripter.com

 

 

④ http://localhost:70/proc3/cfile 으로 실행

 

 

반응형
반응형

▶ 바인딩 

 

: 서블릿에서 다른 서블릿 또는 JSP로 대량의 데이터를 공유하거나 전달하고 싶을 때 사용

 

 

˙서블릿 객체에서 사용되는 바인딩 관련 메서드

setAttribute(String name, Object obj) : 자원(데이터)를 각 객체에 바인딩 합니다.

getAttribute(String name) 각 객체에 바인딩된 자원(데이터)를 name으로 가져옵니다.

removeAttribute(String name) 각 객체에 바인딩 된 자원(데이터)을 name으로 제거합니다.

 

 

 

HttpServletRequest를 이용한 redirect 포워딩 시 바인딩 

 

① 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
29
30
31
32
33
package sec04.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 FristServlet
 */
@WebServlet("/first")
public class FristServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
 
 
    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
        throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        request.setAttribute("address""서울시 성북구");
        response.sendRedirect("second");
    
    }
 
 
}
 
cs

 

② SecondServlet.java 생성

 

http://colorscripter.com/s/g4txVE0

 

공유된 코드 - Color Scripter

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

colorscripter.com

 

③ http://localhost:70/proc2/first 으로 실행

주소가 null 이 나오는 이유는 redirect 방식의 포워드 과정 때문입니다.

포워딩 과정 1단계인 웹 브라우저에서 요청할 때 서블릿에 전달되는 첫 번째 request는 웹 브라우저를 통해

재요청되는 3단계의 두번째 request와 다른 요청입니다.

즉 redirect 방식으로는 서블릿에서 바인딩한 데이터를 다른 서블릿으로 전송할 수 없습니다.

 

 

 

▶ HttpServletRequest를 이용한 dispatch 포워딩 시 바인딩 

 

① FirstServlet2.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
29
30
31
32
33
package sec04.ex02;
 
import java.io.IOException;
 
import javax.servlet.RequestDispatcher;
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 FirstServlet2
 */
@WebServlet("/first2")
public class FirstServlet2 extends HttpServlet {
    private static final long serialVersionUID = 1L;
 
    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
        throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        request.setAttribute("address""서울시 성북구");
        
        RequestDispatcher dispatch = request.getRequestDispatcher("second2");
        dispatch.forward(request, response);
    }
 
}
 
cs

 

②SecondServlet2.java 생성

 

http://colorscripter.com/s/x91Sb73

 

공유된 코드 - Color Scripter

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

colorscripter.com

 

③ http://localhost:70/proc2/first2 으로 실행

첫번째 서블릿에서 두번째 서블릿으로 전달되는 request가 브라우저를 거치지 않고 바로 전달

따라서 첫번째 서블릿의 request에 바인딩 된 데이터가 그대로 전달됨

반응형
반응형

▶ 커넥션풀(ConnectionPool) 

 

기존 데이터베이스 연동 방법은 애플리케이션에서 데이터베이스에 연결하는 과정에서 시간이 많이 걸리는데,

이 문제를 해결하기 위해 나온 방법이 커넥션풀(ConnectionPool)이다. 

웹 애플리케이션이 실행됨과 동시에 연동할 데이터베이스와의 연결을 미리 설정해둔다.

그리고 필요할 때마다 미리 연결해 놓은 상태를 이용해 빠르게 데이터베이스와 연동하여 작업한다.

 

 

 

▶ JNDI (Java Naming and Directory Interface) 

 

웹 애플리케이션 실행 시 톰캣이 만들어 놓은 ConnectionPool 객체에 접근할 때는 JNDI를 이용한다.

즉, 미리 접근할 자원에 키를 지정한 후 애플리케이션이 실행 중일 때 이 키를 이용해 자원에 접근해서 작업한다.

 

※ JNDI 사용예

- 웹 브라우저에서 name/value 쌍으로 전송한 후 서블릿에서 getParameter(name)으로 값을 가져올 때

- 해시맵(HashMap)이나 해시테이블(HashTable)에 키/값으로 저장한 후 키를 이용해 값을 가져올 때

- 웹 브라우저에서 도메인 네임으로 DNS 서버에 요청할 경우 도메인 네임에 대한 IP 주소를 가져올 때

 

 

 

▶ DataSource 설정 및 실행 

 

① 아래의 링크에서 파일을 내려받은 후 압축 풀기

www.java2s.com/Code/Jar/t/Downloadtomcatdbcp7030jar.htm

 

Download tomcat-dbcp-7.0.30.jar : tomcat dbcp « t « Jar File Download

 

www.java2s.com

 

② WebContent > WEB-INF > lib 에 다운받은 파일 넣기

 

③ context.xml 파일 클릭

 

④ context.xml 에 다음 내용을 작성

     - url, username, password는 자신에게 맞게 넣어줌

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
<?xml version="1.0" encoding="UTF-8"?>
 
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at
 
      http://www.apache.org/licenses/LICENSE-2.0
 
  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
--><!-- The contents of this file will be loaded for each web application --><Context>
 
    <!-- Default set of monitored resources. If one of these changes, the    -->
    <!-- web application will be reloaded.                                   -->
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
    <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
 
    <!-- Uncomment this to disable session persistence across Tomcat restarts -->
    <!--
    <Manager pathname="" />
    -->
    <Resource 
        name="jdbc/oracle" 
        auth="Container" 
        type="javax.sql.DataSource" 
        driverClassName="oracle.jdbc.OracleDriver" 
        url="jdbc:oracle:thin:@localhost:1521:XE" 
        username="jyj"
        password="java" 
        maxActive="50" 
        maxWait="-1" 
        />
 
 
</Context>
cs

 

⑤ WebContent > web.xml 에 다음 내용을 작성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?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>pro17_1</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>
  
  <resource-ref>
     <description>connection</description>
     <res-ref-name>jdbc/orcl</res-ref-name>
     <res-type>javax.sql.DataSource</res-type>
     <res-auth>Container</res-auth>
   </resource-ref>
   
</web-app>
cs

 

※ ConnectionPool로 연결할 데이터베이스 속성

- name : DataSource에 대한 JNDI 이름

- auth : 인증 주체

- dirverClassName : 연결할 데이터베이스 종류에 따른 드라이버 클래스 이름

- factory : 연결할 데이터베이스 종류에 따른 ConnectionPool 생성 이름

- maxActive : 동시에 최대로 데이터베이스에 연결할 수 잇는 Connection 수

- maxIdle : 동시에 idle 상태로 대기할 수 있는 최대 수

- maxWait : 새로운 연결이 생길 때까지 기다릴 수 있는 최대 시간

- user : 데이터베이스 접속 ID

- password : 데이터베이스 접속 비밀전호

- type : 데이터베이스 종류별 DataSource

- url : 접속할 데이터베이스 주소와 포트 번호 및 SID

 

 

 

⑤ MemberVO.java / MemberDAO.java / MemberServlet.java 생성

 

- MemberVO.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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
package sec02.ex01;
 
import java.util.Date;
 
public class MemberVO {
    private String id;
    private String pwd;
    private String name;
    private String email;
    private Date joinDate;
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getPwd() {
        return pwd;
    }
    public void setPwd(String pwd) {
        this.pwd = pwd;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public Date getJoinDate() {
        return joinDate;
    }
    public void setJoinDate(Date joinDate) {
        this.joinDate = joinDate;
    }
    
    
}
 
cs

 

- MemberDAO.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
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
64
65
package sec02.ex01;
 
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
 
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
 
public class MemberDAO {
    private Connection con;
    private PreparedStatement pstmt;
    private DataSource dataFactory;
    
    public MemberDAO() {
        try {
            Context ctx = new InitialContext();
            Context envContext = (Context) ctx.lookup("java:/comp/env");
            dataFactory = (DataSource) envContext.lookup("jdbc/oracle");
        }catch(Exception e) {
            e.printStackTrace();
        }
    }
    
    public List<MemberVO> listMembers(){
        List<MemberVO> list = new ArrayList<MemberVO>();
        try {
            con = dataFactory.getConnection();
            String query = "select * from t_member";
            System.out.println("prepareStatement : " + query);
            pstmt = con.prepareStatement(query);
            ResultSet rs = pstmt.executeQuery();
            
            while(rs.next()) {
                String id = rs.getString("id");
                String pwd = rs.getString("pwd");
                String name = rs.getString("name");
                String email = rs.getString("email");
                Date joinDate = rs.getDate("joinDate");
                
                MemberVO vo = new MemberVO();
                vo.setId(id);
                vo.setPwd(pwd);
                vo.setName(name);
                vo.setEmail(email);
                vo.setJoinDate(joinDate);
                
                list.add(vo);
                
            }
            rs.close();
            pstmt.close();
            con.close();
        }catch (Exception e) {
            e.printStackTrace();
        }
        return list;
    }
    
}
 
cs

 

- MemberServlet.java

 

http://colorscripter.com/s/EFjEX7B

 

공유된 코드 - Color Scripter

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

colorscripter.com

 

 

 

▶ 실행 결과 

 

- 테이블

 

- 결과

 

반응형
반응형

① 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로 변경한 후 실행 )

 

반응형

+ Recent posts