JSP 6_1. enum 활용한 예제

zhyun·2020년 11월 25일
0

JspSpring

목록 보기
8/39

2020.11.25일 수요일

enum활용 request 브라우저명 전송 예제

webStudy01/WebContent/02/userAgent.jsp

<%@ page import="kr.or.ddit.enumpkg.*" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>02/userAgent.jsp</title>
</head>
<body>
<h4>User Agent</h4>
<!-- 클라이언트가 전송한 요청에서 시스템에 대한 정보를 추출 -->
<!-- 
당신의 브라우저는 "크롬"입니다 형태의 메시지 전송(enum 문법 활용)
getHeaders(String name) : 지정한 이름의 헤더목록
getHeaderNames() : 요청에 포함된 모든 헤더의 정보    
-->

<%
	//지역변수

	String agent = request.getHeader("user-agent");
	String name = Browser.getBroserName(agent);
	//ifelse방법 리팩토리 과정
// 	Map<String,String> browsers = new LinkedHashMap<>(); //순서가 유지될 수 있다.LinkedHashMap
	//바뀌지 않는 값들 - 상수로 표현할 수 있다 - enum으로 집합체 마늘거야
// 	browsers.put("Edg","엣지"); 
// 	browsers.put("Chrome","크롬");
// 	browsers.put("Trident","익스플로러");
	
// 	for(Entry<String,String> entry : browsers.entrySet()){
// 		if(agent.contains(entry.getKey())){
// 			name = entry.getValue();
// 			break;
// 		}
// 	}
	
// 	if(agent.contains("Edg")){
// 		name="엣지";		
// 	}else if(agent.contains("Chrome")){
// 		name="크롬";
// 	}else if(agent.contains("Trident")){
// 		name="익스플로러";
// 	}else{
// 		name="기타";
// 	}

%>
당신의 브라우저는 <%=name %>입니다.		
</body>
</html>
  • 맨위에 "kr.or.ddit.enumpkg.*" enumpkg안에 있는 모든 소스 import
  • <%%> 스크립트 태그 안에 request한테 header정보중 "user-agent" 정보를 변수 agent에 받아오고, 그 정보에 대한 이름은 name 변수에 import한 enumpkg에 있는 Browser에서 받아온다.
  • body에서 당신의 브라우저는 <%=name%>입니다를 전송한다

/webStudy01/src/kr/or/ddit/enumpkg/Browser.java

package kr.or.ddit.enumpkg;

//inner 클래스
public enum Browser{
	//이넘에 대한 객체는 외부에서 생성할 수 없다, Browser의 객체는 4개만 가능
	EDG("엣지"), CHROME("크롬"), TRIDENT("익스플로러"), OTHER("기타");
	
	private String browserName;
	Browser(String browserName){
		this.browserName = browserName; //기본생성자가 없애서 지금 위에 상수가 다 에러남 ()안에 값 넣어주기 전에
	}
	
	//이넘에서는 setter를 잘 만들지 않는다
	public String getBrowser(){
		return browserName;
	}
	
	//객체를 생성하지 않아도 바로 접근 public static	
	public static String getBroserName(String agent){
		Browser[] browsers = Browser.values();
		Browser finded = OTHER;
		for(Browser temp :browsers){
			if(agent.toUpperCase().contains(temp.name())){
				finded = temp;
				break;
			}
		}
		return finded.getBrowser();
	}
}
  • enum에 대한 객체는 외부에서 생성할 수 없다.
  • public enum Browser 대신 public class Browser로 해봐도 에러는 안뜬다.
  • 브라우저명은 변하지 않는 값이기 때문에 상수로 표현할 수 있고 enum으로 열거할 수 있다.
  • 기본생성사 Browser(){} 기본생성자안에 파라미터 browserName을 넣어준다.
  • enum에서는 setter를 잘 만들지 않는다. (이미 정해져있는 값들이여서?)
  • gettter는 생성 (위 소스 보면 public String getBrowser(){return browserName;})
  • 객체를 생성하지 않고 바로 접근할 수 있도록 메서드를 public static으로 생성한다.
    • public static String getBrowserName(String agent){}
profile
HI :)

0개의 댓글