Backend/JSP

JSP 정리

Jeffrey Oh 2019. 3. 29. 12:05
반응형

웹 페이지 상태유지 기법

하나의 JSP 페이지에서 정의한 변수는 링크를 통해 페이지가 이동된 후에는 유실된다.

페이지가 이동되는 과정에서 변수의 값을 그대로 다음 페이지에서 인식할 수 있도록

처리하는 기법을 상태유지 기법이라고 한다.

주요 상태유지 기법

  • get
  • post
  • cookie
  • session

HTTP GET 방식의 데이터 전송

데이터를 URL에 포함하여 링크를 통해 값을 전달하는 방식.

  • URL의 총 길이가 1024byte로 제한되기 때문에 전송할 수 있는 데이터에 한계가 있다.
  • 모든 데이터가 URL에 그대로 노출되기 때문에 보안이 필요한 경우 적용하지 않는 것이 좋다.
  • 한글이나 공백은 URLEncoding 처리를 해야만 전송할 수 있다.

데이터 전송 방법

URL 뒤에 ? 를 명시하고 이름=값&이름=값의 형태로 설정한다.

데이터 수신 방법

  • 데이터가 전송된 페이지에서는 request 내장객체에 이전 페이지로부터 전송된 변수가 저장된다.
  • URL에 명시한 변수이름을 getParameter() 메서드에 전달하여 값을 리턴받는다.

HTTP POST 방식의 데이터 전송

HTML의 <form>태그 내에 포함되어 있는 <input> 태그에 입력한 내용을 전송하기 위한 방법.

  • 전송할 수 있는 데이터에 한계가 없다.

  • 전송하는 내용이 URL에 노출되지 않기 때문에 GET방식에 비해서 상대적으로 보안에 유리하다.

    • 절대적으로 안전하다는 의미는 아님
  • 한글이나 공백에 대한 URLEncoding 처리가 필요 없다.

데이터 전송 방법

  1. <form>태그의 method 속성에 post라고 명시
  2. action속성에 데이터를 수신할 jsp 페이지의 URL(경로)를 지정
  3. <form>내의 submit 버튼이 눌러졌을 때 모든 input 요소에 대한 입력값(value속성의 값)이 전송된다.

데이터 수신 방법

  • 데이터가 전송된 페이지에서는 get방식과 동일하게 처리한다.
  • <input>태그에 명시한 name 속성의 값을 request.getParameter()에 파라미터로 전달하여 입력값을 리턴받는다.

GET/POST 파라미터 수신시 주의사항

  1. 전송된 값이 null일 수 있다.
  2. null이 아니더라도 빈 문자열("")일 수 있다.

위의 두가지 상황에 대한 예외처리를 if문으로 먼저 처리한 후 필요한 로직을 구현한다. ex) 원하는 형태의 값이 전달되지 않은 경우 임의의 기본값으로 처리하기.

페이지 상태 유지

GET방식의 경우

이전 페이지에서 전달된 파라미터를 URL에 누적시켜 전달한다.

POST방식의 경우

이전 페이지에서 전달된 파라미터를 hidden field에 포함시켜 submit 처리한다.


WebHelper에 적용된 기능

메서드명설명
String getString(String field, String defaultValue)field를 이름으로 하는 HTTP GET, POST 파라미터를 수신하고 값이 없을 경우 defaultValue를 대신 리턴한다.
int getInt(String field, int defaultValue)field를 이름으로 하는 HTTP GET, POST 파라미터를 수신하여 정수 형태로 변환한 결과를 리턴하고 값이 없을 경우 defaultValue를 대신 리턴한다.

JSP 3일차 요점정리

웹 페이지 강제 이동 처리

js

jsp

response.sendRedirect("이동할 페이지 URL")

html

<meta http-equiv="refresh" content="지연시간(초);url=이동할 페이지 주소">

<form>요소의 submit처리에 의해 호출된 action 페이지는 요청에 따른 프로그램 로직을 수행한 후 결과 표시를 위한 페이지로 이동해야 한다. 이때 action 페이지가 브라우저의 히스토리에 남지 않도록 하기 위해 <meta>태그를 이용한 방식을 사용해야 한다.

WebHelper에 적용된 기능

메서드명설명
String getString(String field, String defaultValue)field를 이름으로 하는 HTTP GET, POST 파라미터를 수신하고
값이 없을 경우 defaultValue를 대신 리턴한다.
int getInt(String field, int defaultValue)field를 이름으로 하는 HTTP GET, POST 파라미터를 수신하여 정수 형태로
변환한 결과를 리턴하고
값이 없을 경우 defaultValue를 대신 리턴한다.
String getString(String field)field를 이름으로 하는 HTTP GET,POST 파라미터를 수신하고
값이 없을 경우 null을 리턴한다.
int getInt(String field)field를 이름으로 하는 HTTP GET,POST 파라미터를 수신하여 정수 형태로
변환한 결과를 리턴하고
값이 없을 경우 0을 리턴한다.
void redirect(String url, String msg)javascript alert 메시지 표시 후 url로 이동한다. url이 null인 경우 이전 페이지로
이동한다.

RegexHelper 클래스

  • 값의 존재 여부를 검사하는 기능을 비롯하여 각종 정규표현식을 메서드로 내장한 싱글톤 클래스

사용 패턴

WebHelper web = WebHelper.getInstance();
RegexHelper regex = RegexHelper.getInstance();
String input = web.getString("파라미터이름");

// RegexHelper를 통한 형식검사
if (!regex.메서드이름(input)) {
    // 메시지 표시 후 이전 페이지로 이동
    web.redirect(null, "사용자 알림메시지");
    // 웹페이지 처리 중단
    return;
}

메일 발송

웹 서버 자체적으로는 메일 발송 기능이 없기 때문에 smtp서버와의 연동이 필요함.

Javamail

JSP에서 메일 발송을 위한 SMTP 서버와의 연동 기능을 제공하는 오픈소스 라이브러리

  • activation.jar, mail.jar : 메일 발송 라이브러리
  • SMTPAuthenticator.java : 메일 발송에 필요한 계정정보 설정
  • MailHelper.java : 메일발송 기능 Helper

인증정보 설정 클래스

package study.jsp.helper;

import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;

public class SMTPAuthenticator extends Authenticator{

	/**
	 * 메일 발송시 계정 정보를 리턴해 주는 역할을 한다.
	 */
	@Override
	protected PasswordAuthentication getPasswordAuthentication() {
		// 자신의 Gmail 메일 주소와 비밀번호 입력.
		return new PasswordAuthentication("taehyun920121@gmail.com", "qzouakgxnwmdliae");
	}
	
}

메일발송 기능 클래스

package study.jsp.helper;

import java.util.Properties;

import javax.mail.Address;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class MailHelper {
	// ---------- 싱글톤 객체 생성 시작 ----------
	private static MailHelper current = null;
	
	public static MailHelper getInstance() {
		if (current == null) {
			current = new MailHelper();
		}
		return current;
	}
	
	public static void freeInstance() {
		current = null;
	}
	
	private MailHelper() {
		super();
	}
	// ---------- 싱글톤 객체 생성 끝 ----------
	
	/**
	 * 메일을 발송한다.
	 * @MethodName - sendMail
	 * @param sender	- 발송자 메일 주소
	 * @param receiver	- 수신자 메일 주소
	 * @param subject	- 제목
	 * @param content	- 내용
	 * @throws MessagingException
	 * @author     - JeffreyOh
	 * @lastUpdate - 2019. 3. 6.
	 */
	// --> import javax.mail.MessagingException;
	public void sendMail(String sender, String receiver, String subject, String content) throws
    MessagingException {
		/** 메일 발송 환경설정 */
		// 발송 정보를 담기 위한 객체
		// --> import java.util.Properties;
		Properties p = new Properties();
		
		// 본인의 Gmail 주소로 계정 설정
		p.put("mail.smtp.user", "taehyun920121@gmail.com");
		
		// Google SMTP 서버 정보 설정
		p.put("mail.smtp.host", "smtp.gmail.com");
		p.put("mail.smtp.port", "465");
		
		// 아래 정보는 수정하지 마세요.
		p.put("mail.smtp.startls.enable", "true");
		p.put("mail.smtp.auth", "true");
		p.put("mail.smtp.debug", "true");
		p.put("mail.smtp.socketFactory.port", "465");
		p.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
		p.put("mail.smtp.socketFactory.fallback", "false");
		
		/** 미리 준비한 SMTPAuthenticator클래스에 대한 인증정보 객체 생성 */
		// helper 패키지에 준비한 인증정보 리턴 기능을 갖는 클래스의 객체 생성
		// --> import javax.mail.Authenticator;
		Authenticator auth = new SMTPAuthenticator();
		
		/** 인증정보와 설정정보를 하나로 묶어서 메일서버에 대한 세션객체 생성 */
		// --> import javax.mail.Session;
		Session ses = Session.getInstance(p, auth);
		
		// 메일을 전송할 때 상세항 상황을 콘솔에 출력한다.
		ses.setDebug(true);
		
		/** 세션을 포함하는 메시지 객체 생성 --> 발신주소, 수신주소, 제목, 내용 설정 */
		// 메일의 내용을 담기 위한 객체
		// --> 
		MimeMessage msg = new MimeMessage(ses);
		
		// 제목 설정
		msg.setSubject(subject);
		
		// 보내는 사람의 메일주소
		// --> import javax.mail.Address;
		Address fromAddr = new InternetAddress(sender);
		msg.setFrom(fromAddr);
		
		// 받는 사람의 메일주소
		Address toAddr = new InternetAddress(receiver);
		// --> import javax.mail.Message;
		msg.addRecipient(Message.RecipientType.TO, toAddr);
		
		// 메시지 본문의 내용과 형식, 캐릭터 셋 설정
		msg.setContent(content, "text/html;charset=UTF-8");
		
		/** 메일 발송하기 */
		// --> import javax.mail.Transport;
		Transport.send(msg);
	}
}

파일업로드

<input type="file"> 요소에 의해 등록된 파일에 대한 업로드 처리

HTML 폼 구성

<form> 태그에 enctype="multipart/form-data" 속성이 반드시 추가되어야 함.

<form method="post" action="JSP페이지" enctype="multipart/form-data">
    <input type="file" name="photo" [multiple] /> <!-- multiple 속성 추가하면 다중 업로드 가능 -->
</form>

JSP에서의 파일 업로드

commons-iocommons-fileupload 라이브러리를 활용하여 구현됨.

FileInfo.java

업로드 된 파일의 정보를 저장하기 위한 Beans 클래스

public class FileInfo {
    private String fieldName;   // <input type="file">의 name속성
    private String orginName;   // 원본 파일 이름
	private String fileDir;     // 파일이 저장되어 있는 서버상의 경로
	private String fileName;    // 서버상의 파일 이름
	private String contentType; // 파일의 형식
	private long fileSize;      // 파일의 용량
	
    // 생성자, getter, setter 생략
}

UploadHelper.java

파일 업로드 수행 후 텍스트 정보와 파일 정보를 분류하여 보관한다. JSP에서는 이 정보를 getter 메서드를 통해 리턴받아 사용한다.

public class UploadHelper {
    // ---------- 싱글톤 객체 생성 생략 ----------

    /** ===== 업로드에 필요한 상수 및 객체 선언 ===== */
    /** 업로드 될 폴더 경로 */
    public static final String homeDir = "Z:/";
    /** 업로드 된 결과물이 저장될 폴더 */
    public static final String fileDir = homeDir;
    /** 업로드가 진행될 임시 폴더 */
    public static final String tempDir = fileDir + "/temp";
    
    /**
     * Multipart로 전송되는 데이터는 하나의 컬렉션 객체 안에
     * String과 File 데이터가 뒤섞인 상태이기 때문에
     * JSP에서는 업로드 정보에서 텍스트 정보와 파일 정보를 구분하여 분류해야 한다.
     */
    /** File정보를 저장하기 위한 컬렉션 */
    private List<FileInfo> fileList;
    
    /** 그 밖의 일반 데이터를 저장하기 위한 컬렉션 */
    private Map<String, String> paramMap;
    
    /** 업로드된 파일의 리스트를 리턴한다. */
    public List<FileInfo> getFileList() {
        return this.fileList;
    }
    
    /** 업로드시에 함께 전달된 파라미터들의 컬렉션을 리턴한다. */
    public Map<String, String> getParamMap() {
        return this.paramMap;
    }
    
    /**
     * ===== 업로드를 수행하기 위한 메서드 정의와 구현절차 확인 =====
     * - multipart로 전송된 데이터들은 request 객체가 처리할 수 없기 때문에,
     *     commons-file-upload 라이브러리를 통해
     *     request 객체 안에 포함된 전송 정보를 추출해 내야 한다.
     * - 이 메서드 안에서 발생되는 예외를, 이 메서드를 호출하는 측에 의탁한다.
     */
    /**
     * Multipart로 전송된 데이터를 판별하여 파일리스트와 텍스트 파라미터를 분류한다.
     * @param request
     * @throws Exception
     */
    public void multipartRequest(HttpServletRequest request)
        throws Exception {
        /**
         * ===== 업로드를 위한 준비 과정 (1) =====
         * - 전송 데이터가 multipart인지 검사
         * - 업로드 파일이 저장될 폴더와 업로드 처리가 진행될 임시 폴더 생성하기
         */
        /** multipart로 전송되었는지 여부 검사 */
        // -> import org.apache.commons.fileupload.servlet.ServletFileUpload;
        boolean isMultipart = ServletFileUpload.isMultipartContent(request);
        
        if(!isMultipart) {
            // 전송될 데이터가 없으므로 강제 예외 발생
            throw new Exception();
            /**
             * ===== 참고) throw 구문의 제어 흐름 =====
             * ## 강제 예외 발생
             * - throw 구문을 만나면 JVM은 그 위치를 예외 상황으로 인식한다.
             * - throw 구문을 사용할 경우, 그 위치를 try~catch로 묶거나
             *     메서드 선언시에 throws를 지정해야 한다.
             *     
             * - 호출된 메서드 내에서 throw구문을 만나면,
             *     호출한 위치에서는 예외로 감지되어 catch 블록이 실행된다.
             */
        }
        
        /** 폴더의 존재 여부 체크해서 생성하기 */
        // -> import java.io.File
        File uploadDirFile = new File(fileDir);
        if(!uploadDirFile.exists()) {
            uploadDirFile.mkdirs();
        }
        
        File tempDirFile = new File(tempDir);
        if(!tempDirFile.exists()) {
            tempDirFile.mkdirs();
        }
        
        /** 업로드가 수행될 임시 폴더 연결 */
        // -> import org.apache.commons.fileupload.disk.DiskFileItemFactory;
        DiskFileItemFactory factory = new DiskFileItemFactory();
        factory.setRepository(tempDirFile);
        
        /** 
         * ### 이 구문이 실행되면 사실상 모든 데이터가 items객체에 저장된다.
         * (텍스트 데이터와 파일 데이터가 일괄 저장됨.)
         */
        /** 업로드 시작 */
        ServletFileUpload upload = new ServletFileUpload(factory);
        // UTF-8 처리 지정
        upload.setHeaderEncoding("UTF-8");
        // 최대 파일 크기 -> 20M
        upload.setSizeMax(20 * 1024 * 1024);
        // 실제 업로드를 수행하여 파일 및 파라미터들을 얻기
        List<FileItem> items = upload.parseRequest(request);
        
        /**
         * ### Items 객체 안에 저장된 데이터를
         * 미리 준비해둔 컬렉션에 텍스트와 파일로 분류해서
         * 추출해야 한다. 
         */
        // itemas에 저장 데이터가 분류될 컬렉션들 할당하기
        fileList = new ArrayList<FileInfo>();
        paramMap = new HashMap<String, String>();
        
        /** 업로드 된 파일의 정보 처리 */
        for(int i = 0; i < items.size(); i++) {
            /**
             * ===== 전송된 데이터의 수 만큼 반복처리 하기 =====
             * - 반복문 안에서
             *     각각의 데이터 요소들을 텍스트와 파일로 구분하기 위한
             *     if문을 구성한다.
             */
            // 전송된 정보 하나를 추출한다.
            // -> import 
            FileItem f = items.get(i);
            
            if(f.isFormField()) {
                /**
                 * ===== 텍스트 데이터인 경우 key와 value 형태의 Map에 분류
                 * - 체크박스의 경우는 같은 이름으로 여러 개의 데이터가 전송되기 때문에
                 *     이 데이터들을 콤마로 구분하여 하나의 key에 묶어둔다.
                 */
                /** 파일 형식의 데이터가 아닌 경우 -> paramMap에 정보 분류 */
                String key = f.getFieldName();
                // value를 UTF-8 형식으로 취득한다.
                String value = f.getString("UTF-8");
                
                // 이미 동일한 키 값이 map 안에 존재한다면? -> checkbox
                if(paramMap.containsKey(key)) {
                    // 기존의 값 뒤에 콤마(,)를 추가해서 값을 병합한다.
                    String new_value = paramMap.get(key) + "," +value;
                    paramMap.put(key, new_value);
                } else {
                    // 그렇지 않다면 키와 값을 신규로 추가한다.
                    paramMap.put(key, value);
                }
            } else {
                /**
                 * ===== 파일 형식의 데이터인 경우 업로드 처리 절차 =====
                 * - HTML에서 전송된 데이터들은 임시 폴더에 우선적으로 저장된다.
                 * - 이 파일들의 정보를 추출해서 원하는 경로에 복사하고,
                 *     임시파일을 삭제해야 한다.
                 * - 이 과정에서 파일의 이름, 용량, 형식 등의 부가 정보를 획득할 수 있다.
                 */
                /** 파일 형식의 데이터인 경우 -> fileList에 정보 분류 */
                
                /** ===== 파일의 부가 정보 획득하기 ===== */
                /** 1) 파일의 정보를 추출한다. */
                String orginName = f.getName();         // 파일의 원본 이름
                String contentType = f.getContentType(); // 파일 형식
                long fileSize = f.getSize();             // 파일 사이즈
                
                // 파일 사이즈가 없다면 조건으로 돌아간다.
                if(fileSize < 1) {
                    continue;
                }
                
                // 파일이름에서 확장자만 추출
                String ext = orginName.substring(orginName.lastIndexOf("."));
                
                /** ===== 임시 폴더의 파일을 원하는 경로로 복사하기 (파일명 중복 방지) */
                /** 2) 동일한 이름의 파일이 존재하는지 검사한다. */
                // 웹 서버에 저장될 이름을 "현재의 Timestamp+확장자(ext)"로 지정 (중복저장 우려)
                String fileName = System.currentTimeMillis() + ext;
                // 저장된 파일 정보를 담기 위한 File객체
                File uploadFile = null;
                // 중복된 이름의 파일이 존재할 경우 index값을 1씩 증가하면서 뒤에 덧붙인다.
                int index = 0;
                
                // 일단 무한루프
                while(true) {
                    // 업로드 파일이 저장될 폴더 + 파일이름으로 파일객체를 생성한다.
                    uploadFile = new File(uploadDirFile, fileName);
                    
                    // 동일한 이름의 파일이 없다면 반복 중단
                    if(!uploadFile.exists()) {
                        break;
                    }
                    
                    // 그렇지 않다면 파일이름에 index값을 적용하여 이름 변경
                    fileName = System.currentTimeMillis() + (++index) + ext;
                } // End while
                
                // 최종적으로 구성된 파일객체를 사용해서
                // 임시 폴더에 존재하는 파일을 보관용 폴더에 복사하고, 임시파일 삭제
                f.write(uploadFile);
                f.delete();
                
                /**
                 * ===== 업로드 된 파일의 정보를 Beans 객체로 묶어서 List에 저장 =====
                 * - 멀티 업로드가 수행될 경우 여러 개의 파일이 전송 될 수 있기 때문에,
                 *     업로드 된 파일의 정보는 List에 저장한다.
                 */
                /** 3) 파일 저장 및 파일 정보 분류 처리 */
                // 생성된 정보를 Beans의 객체로 설정해서 컬렉션에 저장한다.
                // -> 이 정보는 추후 파일의 업로드 내역을 DB에 저장할 때 사용된다.
                FileInfo info = new FileInfo();
                info.setOrginName(orginName);
                info.setFileDir(fileDir);
                info.setFileName(fileName);
                info.setContentType(contentType);
                info.setFileSize(fileSize);
                
                fileList.add(info);
            } // End if~else
        } // End for
        
    } // End multipartRequest Method
}

파일 다운로드

  • 웹 브라우저는 프로젝트 내의 WebContent 폴더 안에만 접근할 수 있다.
  • 파일 업로드는 프로젝트 외부 경로에서 처리된다. (업로드 된 파일이 웹에 노출되지 않음)
  • 다운로드를 위해서는 JSP 파일이 업로드 된 파일을 직접 읽어 들여서, 그 파일의 바이너리 데이터를 스스로에게 출력시켜야 한다.
  • response 객체를 통해 OutputStream을 생성하면 이러한 처리를 구현할 수 있다.
  • 위와 같이 코딩하면 대용량 파일을 읽기가 힘들어서 버퍼링을 적용하면 완화된다.

썸네일 이미지

사용자가 업로드 한 이미지를 웹 페이지에 노출하기 위해 생성한 축소판 이미지 파일 (웹 페이지 트래픽 절약)

  • resize 형식 : 긴 축을 기준으로 이미지를 축소시키고 짧은 축은 비율에 맞게 축소
  • crop 형식 : 짧은 축을 기준으로 이미지를 축소시키고 긴 축의 남는 부분은 잘라냄

UploadHelper에 구현된 기능

void multipartRequest(HttpServletRequest request)

  1. 업로드 된 파일 데이터를 List<FileInfo> 형식으로 분류한다.
  2. 전송된 텍스트 데이터를 Map<String, String> 형식으로 분류한다.
  3. 분류된 데이터를 각각 getFileList()getParamMap()으로 리턴받을 수 있다.

void printFileStream(HttpServletResonse response, String filepath, String orginName)

파일경로(filePath)와 원본 파일이름(orginName)을 전달하여 다운로드 처리한다.

String createThumbnail(String loadFile, int width, int height, boolean crop)

썸네일 이미지를 생성하고 생성된 파일의 경로를 리턴한다.

void printFileStream(HttpServletResponse response, String filePath, int width, int height, boolean crop)

썸네일 이미지를 생성하고 생성된 파일을 다운로드 처리한다.

Cookie

  • 변수값을 사용자의 PC에 텍스트 형태로 저장

  • 초 단위의 유효시간과 유효 도메인을 설정해야 함.

    • 서로 다른 도메인간에는 공유할 수 없지만 서브도메인간에는 공유 가능함.

      • ex) 쿠키 저장시 도메인을 .itpaper.co.kr로 설정할 경우 www.itpaper.co.krblog.itpaper.co.kr간에 데이터가 공유됨.
  • 보안에 취약

  • 데이터 저장시 urlencode 처리가 필요함.

  • 데이터를 읽어올 때 urldecode 처리가 필요함.

  • 지정된 시간동안은 브라우저를 닫았다가 다시 열어도 삭제되지 않는다.

  • 사이트 내의 모든 페이지에서 읽을 수 있는 전역 변수의 역할을 한다.

쿠키 저장하기

String input = URLEncoder.encode("저장할 값");
// 쿠키 생성 (이름, 값 설정)
Cookie info = new Cookie("mycookie", input);
// 쿠키의 유효시간(초)
info.setMaxAge(60);
// 쿠키가 유효한 경로 설정
// 경로는 / 로 할 것 바꾸지 않기
info.setPath("/");
// 쿠키가 유효한 도메인 설정
// --> 상용화시에는 사이트에 맞게 수정해야 함
info.setDomain("localhost");
// 쿠키 저장하기
response.addCookie(info);

쿠키 읽기

// 저장된 쿠키 목록을 가져온다.
Cookie[] cookies = request.getCookies();
// 쿠키값을 저장할 문자열
String mycookie = null;

// 쿠키목록이 있다면?
if (cookies != null) {
    for (int i=0; i<cookies.length; i++) {
        // 쿠키의 이름을 취득한다.
        String cookieName = cookies[i].getName();
        
        // 이름이 내가 원하는 값일 경우 값을 복사한다.
        if (cookieName.equals("mycookie")) {
            mycookie = cookies[i].getValue();
            
            // 원하는 값을 찾았으므로 반복처리 중단
            break;
        }
    }
}

Session

  • 사용자마다의 개인화 데이터를 서버의 메모리에 직접 저장함.
  • 데이터가 외부로 전송되지 않기 때문에 상대적으로 보안에 유리 (과용할 경우 서버 메모리에 부담. -> 성능에 영향)

세션 사용시간 설정 (초단위)

session.setMaxInactiveInterval(30);

세션 데이터 사용

// 세션 저장하기 -> 모든 형태의 객체 저장 가능
String input = "Hello World";
session.setAttribute("mysession", input);

// 세션 읽기 -> 리턴값을 원래의 형태로 변환 필요함.
String input = (String) session.getAttribute("mysession");

세션 개별 삭제

session.removeAttribute("mysession");

세션 전체 삭제

session.invalidate();

WebHelper에 추가된 기능

쿠키 저장

void setCookie(String key, String value, int timeout)

지정된 시간동안 쿠키를 저장한다.

  • timeout값이 -1인 경우 브라우저를 닫기 전까지 유지되다가 부라우저를 닫으면 삭제.
  • timeout값이 0인 경우 즉시 삭제
  • timeout값이 0보다 큰 경우 그 시간(초)만큼 유지됨

쿠키값 읽기

String getCookie(String key, String defaultValue)

저장된 쿠키를 리턴한다. 값이 없을 경우 defaultValue를 대신 리턴한다.

String getCookie(String key)

저장된 쿠키를 리턴한다. 값이 없을 경우 null을 리턴한다.

쿠키 삭제

void removeCookie(String key)

저장된 쿠키를 삭제한다.

세션 저장

void setSession(String key, Object value)

세션을 저장한다.

세션 읽기

Object getSession(String key, Object defaultValue)

저장된 세션값을 리턴한다. 값이 없을 경우 defaultValue를 대신 리턴한다. 이 메서드의 리턴값은 다시 원래 형태로 형변환 해야 한다.

Object getSession(String key)

저장된 세션값을 리턴한다. 값이 없을 경우 null을 리턴한다.

세션 삭제

void removeSession(String key)

특정 세션값을 삭제한다.

void removeAllSession()

현재 사용자에 대해 저장되어 있는 모든 세션값을 삭제한다.

반응형