1. 헤더정보 읽기
<title>헤더 정보를 읽어보자</title>
</head>
<body>
<h1>모든 헤더 정보를 읽어보자</h1>
<%
Enumeration<String> herderNames = request.getHeaderNames();// 이름만
while(herderNames.hasMoreElements()){ // 끝까지 반복
String headerName = herderNames.nextElement(); // 이름얻기
String headerValue = request.getHeader(headerName); // 값얻기
out.println(headerName + " : " + headerValue + "<br>"); // 출력
}
%>
<hr />
<%
herderNames = request.getHeaderNames(); // 이름만
while(herderNames.hasMoreElements()){
String headerName = herderNames.nextElement(); // 이름 얻기
Enumeration<String> em = request.getHeaders(headerName); // 값을 열거형으로
out.println(headerName + "<br>" ); // 이름찍고
while(em.hasMoreElements()){ // 끝까지 반복
String headerValue = em.nextElement(); // 값얻기
out.println(headerValue + "<br>"); // 값 출력
}
out.println("<hr>" ); // 선그리기
}
out.println(request.getHeader("user-agent").contains("Trident")? "IE로 접속":"IE아님");
%>
</body>
</html>
헤더를 읽는 방법
-> Enumeration인터페이스를 사용한다
Enumberation의 메서드는
hasMoreElements() : 읽어올 요소가 남아있는지 확인 후 있으면 true, 없으면 false
nextElement(): 다음 요소를 읽어 온다.
헤더 이름을 request.getHeagerName(); 로 불러온다.
그리고 hasMoreElements()메서드를 통해 읽어올 요소가 남아 있는지 확인. 있다면
headerName에 이름을 얻고
headerValue에 값을 얻는다.
그리고 이를 출력한다.
아래의 내용도 조건식만 조금 바뀌었을 뿐 로직은 똑같다.
1. 헤더 이름 얻고
2. 값 얻고
3. 출력
인데 2번째 코드는 따로 이름을 Enumeration<String>em에 값을 열거형으로 저장하고
이름 찍고 그 안의 요소(값)을 얻어 출력하는 과정이다.
<hr>: 선 그리기
2. WEB-INF 폴더
-> 중요한 로직을 담고 있는 JSP파일은 직접 URL로 접근할 수 없다.
response.sendRedirect(request.getContextPath()+"파일"); -->불가능
--> WEB-INF 폴더는 직접 URL로 접근 할 수 없지만 프로그램상으로는 접근이 가능하다.
pageContext.forward("WEB-INF/파일.jsp");
forward: 실행을 옮겨주고 URL은 변하지 않는다.
3. 초기화 파라미터 읽기
-> WEB-INF에 있는 web.xml에 context-param 값을 넣어준다.
<context-param>
<param-name>DBMS</param-name>
<param-value>Oracle</param-value>
</context-param>
<context-param>
<param-name>DBUSER</param-name>
<param-value>OracleUser</param-value>
</context-param>
<context-param>
<param-name>DBPWD</param-name>
<param-value>Oracle1234</param-value>
</context-param>
<%@page import="java.io.File"%>
<%@page import="java.util.Enumeration"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>초기화파라메터 읽기</title>
</head>
<body>
<h2>web.xml에 저장된 변수값을 읽어보자!!!</h2>
<%
String db = application.getInitParameter("DBMS");
String user = application.getInitParameter("DBUSER");
String password = application.getInitParameter("DBPWD");
%>
DBMS 이름 : <%=db %> <br />
DBMS 사용자 아이디 : <%=user %> <br />
DBMS 사용자 비번 : <%=password %> <br />
<hr />
<%
Enumeration<String> names = application.getInitParameterNames();
while(names.hasMoreElements()){
String name = names.nextElement();
String value = application.getInitParameter(name);
out.println(name + " : " + value + "<br>");
}
%>
<hr />
서버의 실제 경로 : <%=application.getRealPath("/") %> <br />
서버의 실제 경로 : <%=application.getRealPath("\\") %> <br />
서버의 실제 경로 : <%=application.getRealPath(File.separator) %> <br />
<hr />
<h2>json폴더의 존재 여부 확인해서 없으면 만들어 주기</h2>
<%
String path = application.getRealPath("/json"); // 경로 얻기
File file = new File(path); // 파일객체 생성
if(!file.exists()){ // 있는지 확인
out.println("없다!!!<br>");
file.mkdir(); // 없으면 폴더 생성
}else{
out.println("있다!!!<br>");
}
%>
</body>
</html>
String db,, user, password의 값을 가져오기 위해
--> application.getInitParameter("DBMS(<-- param-name의 값 대입-->)");
이 부분에 대해서는 정말 이해하기 쉽게 작성하신 분이 있었다.
https://dololak.tistory.com/47
[서블릿/JSP] 서블릿의 초기화 과정 및 초기화 방법
서블릿의 초기화 서블릿은 클라이언트로부터 최초 요청시 단 한번 초기화되며 생성됩니다. WAS 내부의 서블릿 컨테이너에서 서블릿 객체 생성 후 초기화시에 init()메서드를 호출하는데 이 과정
dololak.tistory.com
자 이제 db, user, password 값을 가지고 왔다.
다른 방법으로는 getInitParameterNames() 메서드를 사용하여 Enumeration<String>names에 저장하고
방법은 헤더정보 읽기와 비슷하다
name을 읽고, value 값을 읽는다.
4. 서버의 실제경로 구하기
application.getRealPath("/");
application.getRealPath("\\");
application.getRealPath("File.separator");
--> 이 방법을 통해 서버의 실제 경로를 알아낼 수 있다.
5. 예제) Json폴더의 존재 여부를 파악->없으면 생성해주기
1. json이름의 폴더가 있는지 경로를 얻는다. 똑같이 getRealPath를 사용
2. 경로를 넣은 파일 객체를 생성한 후
3. if else문으로 폴더가 존재하면 out.println("있다")출력, 없다면 out.println("없다")출력 후
폴더를 생성해주는 file.mkdir(); 메서드를 실행한다.
mkdir과 mkdirs의 차이점을 정리해놓은 블로그-->
https://froginpot.tistory.com/51
[Java Tips] File.mkdir()과 File.mkdirs()의 차이점
Java API에서는 디렉토리를 생성하기 위해, File.mkdir()과 File.mkdirs(), 두 개의 API가 제공됩니다. 위 두 개의 API는 모두 디렉토리를 생성하는 기능을 하지만, 세부적으로는 약간 틀린 기능을 합니다. Fi
froginpot.tistory.com
6. application객체를 이용한 자원 접근하기
<%@page import="java.util.Scanner"%>
<%@page import="java.net.URL"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>application객체를 이용한 자원 접근하기</title>
<style type="text/css">
div.out {
border: 1px solid gray; width: 90px; height: 70px;
text-align: center; font-size: 25pt; float: left;
margin: 5px; padding: 5px; border-radius: 20px;
}
div.in {
border: 1px solid gray; width: 82px; height: 20px;
text-align: center; font-size: 11pt; background-color: silver;
padding: 3px; border-radius: 10px;
}
</style>
</head>
<body>
<h1>천자문 1</h1>
<%
URL url = application.getResource("chunja.txt"); // 자원을 URL객체로 얻기
Scanner sc = new Scanner(url.openStream(), "UTF-8");
while (sc.hasNextLine()) {
String line[] = sc.nextLine().split("\\|");
// out.println(line[0] + ". " + line[1] + "(" + line[3] + ")<br>");
out.println("<div class='out'>" + line[1]);
out.println("<div class='in'>" + line[3]);
out.println("</div>");
out.println("</div>");
}
sc.close();
%>
<h1 style="clear: both;">천자문 2</h1>
<%
Scanner sc2 = new Scanner(application.getResourceAsStream("chunja2.txt"), "UTF-8"); // 자원을 스트림으로 얻기
while (sc2.hasNextLine()) {
String line[] = sc2.nextLine().split("\\|");
out.println(line[0] + ". " + line[1] + "(" + line[2] + ") : " + line[4] + "<br>");
}
sc2.close();
%>
</body>
</html>
application객체를 이용해 자원을 접근하는 방법!
1. url객체를 만든다. 이 때 application.getResource("파일");
2. url객체를 Scanner 클래스를 통해 읽는다. 이 때 .openStream()을 통해 읽는다.
3. 이후에는 다른 스캐너 메서드를 사용하는 것과 동일하다. while문 안에 hasNextLine()을 이용한다.
4. 배열을 선언하고 파일의 데이터를 .split으로 열을 나누어 저장한다.
여기서 문제!
.split으로 나눌때 ("\\|")을 사용했다. \\는 무엇일까?정규식을 알고 있어야 한다. (regex)참고하시길~~ 이스케이프 문자가 필요한 이유는 여기에 나와있다.
https://mytory.net/archives/285
5. 틀을 짜서 이쁘게 찍으려면 div 태그를 이용하는 방법이 있다.
6. 스캐너를 닫는다.
바로 주소 읽어서 Scanner 클래스로 객체 만들고 읽는 방법
1. Scanner(여기에 application.getResourceAsStream("파일이름"))
.getResourceAsStream을 이용하여 절대경로를 읽은 Scanner객체 생성
2. 똑같다. while문에 hasNextLine()을 사용한다.
3. 배열 선언 후 .split으로 열을 나누어 저장
4. 찍고 싶다면 찍고, 아니면 스캐너를 닫는다.
7. 4개의 영역에 변수 저장해보기
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>4개의 영역에 변수를 저장해보자!!!(pageContext,request, session, application)</title>
</head>
<body>
<%
int i = 100;
// 영역에 저장하기
pageContext.setAttribute("i", 111);// 현재페이지에서만 사용가능
request.setAttribute("i", 222); // 2~3개 페이지에서 사용가능
session.setAttribute("i", 333); // 브라우저 1개 당 사용가능
application.setAttribute("i", 444); // 어플리케이션 전체에서 사용가능
// i라는 변수를 5개 만들었다.
// 영역에 저장된 변수 읽기
out.println("i = " + i + "<br>");
out.println("pageContext i = " + pageContext.getAttribute("i") + "<br>");
out.println("request i = " + request.getAttribute("i") + "<br>");
out.println("session i = " + session.getAttribute("i") + "<br>");
out.println("application i = " + application.getAttribute("i") + "<br>");
%>
<hr />
<h2>영역에 저장된 변수는 EL로 출력이 가능하다.</h2>
그냥 i = ${i } <br />
pageContext i = ${pageScope.i } <br />
request i = ${requestScope.i } <br />
session i = ${sessionScope.i } <br />
application i = ${applicationScope.i } <br />
</body>
</html>
https://dololak.tistory.com/742
[서블릿/JSP] 표현 언어(EL)의 내장객체 사용법
이전글 [서블릿/JSP] 표현 언어(EL) 기본 사용법 및 자료형 설명 표현 언어(EL)를 이용한 내장객체 사용법 JSP에서는 request , session , application 등의 기본적인 내장객체에 대한 참조변수를 제공하여 사
dololak.tistory.com
이 내용을 꼭 읽어보시길 바란다.
딱 봐도 이해는 쉽다.
int i= 변수; 선언한 것은 이 페이지 안에서만 유효하다.
pageContext.setAttribute("i", 111);// 현재페이지에서만 사용가능
request.setAttribute("i", 222); // 2~3개 페이지에서 사용가능
session.setAttribute("i", 333); // 브라우저 1개 당 사용가능
application.setAttribute("i", 444); // 어플리케이션 전체에서 사용가능
값을 가져올때는
.getArttribute메서드를 이용하면 된다.
여기서 문제!
int i = 100; 와 pageContext.setAttribute("변수", 값); 은 똑같은 성격을 가지고 있다.
그럼 pageContext는 왜 쓰는 것일까?
영역에 저장된 변수는 EL로 출력이 가능하기 때문!!
i = ${i}; 로 출력이 가능 (=pageScope.i)와 같다.
나머지의 값들도 requestScope.변수, sessionScope.변수, applicationScope.변수 를 통해 값을 출력할 수 있다.
'JSP' 카테고리의 다른 글
게시판 만들어 볼까? <1> (0) | 2021.08.11 |
---|---|
JSP 페이지 모듈화& 요청 흐름 제어 (0) | 2021.07.22 |