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);
%>
당신의 브라우저는 <%=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;
public enum Browser{
EDG("엣지"), CHROME("크롬"), TRIDENT("익스플로러"), OTHER("기타");
private String browserName;
Browser(String browserName){
this.browserName = browserName;
}
public String getBrowser(){
return browserName;
}
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){}