2021. 12. 7. 16:50ㆍ[프론트엔드]_/[Javascript]_ES6
간단하게 버튼을 클릭하면 리스너를 달고
지정한 폴더안에 있는 파일을 다운로드하는 코드를 연습하면서 사용한 메소드를 정리한다.
getElementById(elementId: string): HTMLElement | null;
: 지정된 ID에 값을 가진 첫번째 개체에 대한 참조를 반환
파라미터로는 String을 받는다.
createElement<K extends keyof HTMLElementTagNameMap>(tagName: K, options?: ElementCreationOptions): HTMLElementTagNameMap[K];
: 지정된 태그에 대한 요소의 인스턴스를 만듭니다.
HTMLElementTagNameMap 안에 정의되어 있음.
이는 인터페이스로 선언되어 있음
appendChild<T extends Node>(newChild: T): T;
Node.appendChild()
메소드는 한 노드를 특정 부모 노드의 자식 노드 리스트 중 마지막 자식으로 붙입니다. 만약 주어진 노드가 이미 문서에 존재하는 노드를 참조하고 있다면 appendChild() 메소드는 노드를 현재 위치에서 새로운 위치로 이동시킵니다
getProperty(String key)
: 이 속성 목록에서 지정된 키를 사용하여 속성을 검색합니다.
이 속성 목록에서 키를 찾을 수 없으면 기본 속성 목록과
해당 기본값이 재귀적으로 확인됩니다.
이 메소드는 속성을 찾을 수 없는 경우 null을 반환합니다.
request로 받아온 url 핸들링
{
url = /jsp/download.jsp?file=test&userfile=%ED%85%8C%EC%8A%A4%ED%8A%B8.txt&fileType=test
String saveFile = request.getParameter("file");
String usrFile = request.getParameter("userfile");
String fileType = request.getParameter("fileType");
:요청받은 url 중에서 file 부분을 가져온다.
}
replaceAll("\r","")
:첫 파라미터 에 속한 모든 부분을 두번째 파라미터값으로 변경
String conVertNm = URLEncoder.encode(usrFile, "EUC-KR");
특정 인코딩 체계를 사용하여 문자열을 application/x-www-form-urlencoded 형식으로 변환합니다.
이 메소드는 지정된 인코딩 이름을 사용하여 문자 집합을 조회한다는 점을 제외하고는 encode(String s, Charset charset) 와 동일하게 작동합니다.
String usrFileKr = new String(usrFile.getBytes("iso8859-1"), "EUC-KR");
getBytes( String charsetName)
명명된 문자 집합을 사용하여 이 문자열을 바이트 시퀀스로 인코딩하고 결과를 새 바이트 배열에 저장합니다.
이 문자열을 지정된 문자 집합으로 인코딩할 수 없는 경우 이 메소드의 동작은 지정되지 않습니다. java.nio.charset.CharsetEncoder 클래스는 인코딩 프로세스에 대한 더 많은 제어가 필요할 때 사용해야 합니다.
매개변수 : charsetName – 지원되는 charset의 이름
보고 : 결과 바이트 배열
오류 : UnsupportedEncodingException - 명명된 문자 집합이 지원되지 않는 경우
usrFile = URLEncoder.encode(usrFile, "UTF-8");
utf-8로 인코딩 > 보여지는것
[JSP 내장객체 - request/response]
jsp페이지 내에서 제공하는 특수한 레퍼런스 타입의 변수이다.
아무런 선언 생성없이 사용 가능한 이유는 JSP 페이지가 서블릿으로 변환 될 때, JSP 컨테이너가
자동적으로 제공하기 때문이다.
여러가지가 있는데 request와 response가 많아서 두가지 먼저 정리
request : 리턴타입 : javax.servlet.http.HttpServletRequest -> 웹 브라우저의 요청정보를 저장하고 있는 객체
response : 리턴타입 : javax.servlet.http.HttpServletResponse -> 웹 브라우저의 요청에 대한 응답 정보를 저장하고 있는 객체
ServletRequest를 상속받는 HttpServletRequest 의 메소드들을 찾아볼 수 있다.
파라미터 말고 Request 객체에서 얻을 수 있는 정보
request.getHeader()
request.getCookies()
request.getSession()
request.getMethod()
request.getInputStream()
헤더정보는 이름과 값의 쌍으로 이루어져 있다.
헤더정보는 항상 문자 값만 존재한다. 하지만 어떤 헤더 정보의 문자열은 실제로는 숫자 값입니다.
ServletResponse 를 상속받는 HttpServletResponse 의 메소드들을 찾아볼 수 있다.
대부분 클라이언트에 데이터를 전송하기 위해여 Response 객체를 사용한다.
보통 setContentType() 과 getWriter() 메소드를 사용하고
스트림에 HTML을 작성 혹은 컨텐츠를 기록/다운 하는 I/O 작업을 한다
헤더정보 설정,쿠기 추가,오류발생 유도 등 다 Response 객체를 사용한다.
출력방식의 차이
ServletResponse 인터페이스는 두가지 스트림을 제공한다.
byte를 출력하기 위한 ServletOutputStream 과
문자를 출력하기 위한 PrintWriter 가 있습니다.
PrintWiter writer = response.getWriter();
OutputStream도 텍스트 데이터를 출력 가능합니다
ServletOutputStream out = response.getOutputStream();
PrintWriter가 텍스트 데이터만을 출력하기 위해 만들어진 것 뿐입니다.
String hostNm = request.getServerName();
: 말 그대로 서버이름을 가져온다. : localhost
Enumeration<?> headerNames = request.getHeaderNames()
: http프로토콜로 클라이언트로부터 요청 메시지가 전달 될 때, http 헤더가 포함이 된다.
클라이언트의 요청 메시지인 HttpServletRequeset 객체를 이용해서 헤더정보를 추출한다
Enumeration 인터페이스
열거형이라고 이야기하며, 데이터 집합을 순차적으로 접근하기 위한 기능을 제공한다.
boolean blnHeaderNames = headerNames.hasMoreElements()
Enumeration 인터페이스의 hasMoreElements()는 집합의 구성 요소가 더 있는지를 검사하는 메소드이다. 따라서 Enumeration 내에 객체가 하나도 없을 때까지 while 문을 반복하게 된다. nextElement() 메소드는 Enumeration 객체로부터 다음 요소를 반환하는 메소드이며, 이렇게 얻은 HTTP Header의 이름을 이용해서 HttpServletRequest 객체로부터 HTTP Header의 값을 추출할 수 있다.
request.setCharacterEncoding("utf-8"); // 지금은 폼 데이터 주고받는게 아니라서 안써도 상관없다
: jsp나 html 에서 폼태그에 입력한 값을 전송하려고 할때
get과 post로 나뉘게 된다. post 방식으로 보내게 될 때 한글은 꺠지게 되는데 깨지지 않게 전달하기 위해 사용하는 것
get방식의 경우 톰캣이 기본적으로 utf-8이 적용되어 있어서 꺠지지 않는다.
그러나 get과 post 둘다 사용해서 필요하다.
response.setCharcterEncoding("UTF-8")
: 서블릿에서 화면에 데이터를 출력시 한글이 아니라 ?? 와 같은 물을표 출력시 해당 코드 추가시 해결 가능
response.setContentType("application/octet;charset=utf-8");
: respose.setCharacterEncoding("UTF-8") 만 사용하게 되면 이상하게 깨져서 보이게 된다. 브라우저마다 문자코드를 해석하는 default가 다르기 떄문이다.
utf-8문자코드로 사용한다는 것을 명시해야한다.
response.setHeader("Content-Disposition", "attachment;filename=\"" + usrFile + "\";");
: 해당 "" 안의 이름으로 헤더가 이미 존재한다면, 새로운 값으로 대체 없으면 새로운 헤더와 값을 추가
*
setHeader() 이미 존재하는 값을 덮어 씁니다.
addHeader() 이미 헤더가 존재한다면 값을 하나 더 추가합니다.
response.setIntHeader() 현재 존재하는 헤더의 값을 주어진 정수값으로 대체합니다.
[Redirect & Dispatch]
요청에 대한 응답 선택
Redirect : 요청에 대해 완전히 다른 URL로 방향을 바꿀 수 있습니다.
dispatch : 웹 애플리케이션에 있는 다른 컴포넌트에게 처리를 위임
response.sendRedirect("IOException");
() 안에 상대경로를 지정할 수 있습니다
sendRedirect("test.jsp") -> 컨테이너는 원래 주소를 가지고 전체경로를 재작성 합니다.
prefix/suffix 적용
sendRedirect("/test.jsp") -> 컨테이너는 웹 애플리케이션의 URL 전체를 재작성합니다.
/는 root를 의미합니다.
*틀린곳이 있다면 지적 감사드립니다
참고:http://www.silverwolf.co.kr/java/9919
'[프론트엔드]_ > [Javascript]_ES6' 카테고리의 다른 글
[HTML 기초]_개념, 태그 (0) | 2021.12.08 |
---|---|
[MIME 타입]_setContentType() (0) | 2021.12.07 |
[초보개발자]_Web Service, Servlet, JSP 란? (0) | 2021.12.07 |
[초보개발자]_JS, Css 파일 수정 내용 적용 불가 오류 해결 (0) | 2021.12.06 |
[프론트엔드]_JavaScript(es6)_6.Array_APi 연습 (0) | 2021.12.05 |