분류 전체보기
- Chapter03 JSP로 시작하는 웹프로그래밍 2020.10.03
- 포트 확인 2020.10.01
- Chapter13 이클립스를 이용한 웹개발 2019.04.03
- ㄹㄹㄹㄹㄹ 2018.12.26
- 미래의 나를 알수 있는 법 2018.12.26
- 헨리코튼 PK니트 2018.09.16
- 2018-08-19 소비 2018.08.19
- 바닷마을다이어리 2018.08.12
- Chapter06 에러처리 2018.07.09
- Excel 2010 문서 열 때 새창에서 열기 2017.12.12
- Chapter05 기본객체와 영역 2017.12.05
- Chapter04 필수 이해 요소 2017.12.05
- Chapter03 JSP로 시작하는 웹프로그래밍 2017.11.29
- Chapter02 웹프로그래밍 기초 2017.11.29
- 포트 확인 2017.11.29
Chapter03 JSP로 시작하는 웹프로그래밍
01. JSP에서 HTML문서를 생성하는 기본코드구조
02. JSP페이지 구성요소
01.디렉티브
<%@ 디렉티브 이름 속성1="값1" 속성2="값2" .... @>
02.스크립트요소
03.기본객체
- JSP에서 웹어플리케이션 프로그래밍을 하는데 필요한 기능을 제공해주는 기본객체로 request, response, session, application, page 등이 존재한다.
04.표현언어
a * b = ${param.a = param.b]
05.표준액션태그와 태그 라이브러리
<jsp:include page="header.jsp" flush="true" />
03. page디렉티브
<%@ page contentType="text/html; charset=utf-8" %>
<%@ page import="java.util.Date" %>
contentType 속성과 캐릭터셋
MIME
<%@ page contentType="text/html; charset=utf-8">
기본 캐릭터셋은 ISO-8859-1을 사용하게 된다. ISO-8859-1은 한글을 제대로 표현할 수 없다.
따라서 EUC-KR이나 UTF-8 같이 한국어를 포함하고 있는 캐릭터셋을 사용해야 한다.
※ 저장할 때 사용한 캐릭터 인코딩과 page디렉티브의 contentType속성에 지정한 캐릭터셋이 일치하지 않을 떄 깨진다.
import 속성
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import = "java.util.Calendar" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<%
Calendar cal = Calendar.getInstance();
%>
오늘은
<%= cal.get(Calendar.YEAR) %>년
<%= cal.get(Calendar.MONTH) + 1 %>월
<%= cal.get(Calendar.DATE) + 1 %>일
입니다
trimDirectiveWhitespaces 속성을 이용한 공백처리
<%@ page contentType="text/html; charset=utf-8" %> //생성된 html소스에 page디렉티브로 인해 공백이 생긴다
<%@ page trimDirectiveWhitespace = "true" %> // 공백문자를 제거해준다.
JSP페이지의 인코딩과 pageEncoding속성
<%@ page contentType="text/html; charset=euc-kr" %> //차선
<%@ page pageEncoding="utf-8">//우선
//html code
//다음과 같이 작성히 인코딩방식은 EUC-KR로 지정된다.
04. 스크립트요소
스크립트릿
<%@ page contentTYpe = "text/html; charset=utf-8" %>
<head><title>1-10까지의합</title></head>
<%
int sum = 0;
for(int i=1; i<=10; i++) {
sum = sum+i;
}
%>
1부터 10까지의 합은 <%=sum%> 입니다.
표현식
1부터 10까지의 합은 <%= 1+2+3+4+5+6+7+8+9+10 %> 입니다. // =55
선언부
<%! public 리턴타입 메서드이름(파라미터목록) {
자바코드1
자바코드2
}
다음과 같이 사용할 수 있다.
<%@ page contentType="text/html; charset=utf-8" %>
<%!
public int multiply(int a, int b) {
int c = a*b;
return c;
}
//2개 연속으로 메소드 선언도 가능하다.
<head><title>선언부를 사용한 두 정수값의 곲</title></head>
<body>
10*25=<%=multiply(10,25)%>
</body>
05. request 기본 객체
- 클라이언트와 관련된 정보 읽기 가능
- 서버와 관련된 정보 읽기 가능
- 클라이언트가 전송한 요청 파라미터 읽기 기능
- 클라이언트가 전송한 요청 헤더 읽기 기능
- 클라이언트가 전송한 쿠키 읽기 기능
- 속성 처리 기능
5.1 클라이언트 정보 및 서버 정보 읽기

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
클라이언트IP = <%= request.getRemoteAddr() %> <br>
요청정보길이 = <%= request.getContentLength() %> <br>
요청정보 인코딩 = <%= request.getCharacterEncoding() %> <br>
요청정보 컨텐츠 타입 = <%= request.getContentType() %> <br>
요청정보 프로토콜 = <%= request.getProtocol() %> <br>
요청정보 전송방식 = <%= request.getMethod() %> <br>
요청 URI = <%= request.getRequestURI() %> <br>
컨텍스트 경로 = <%= request.getContextPath() %> <br>
서버이름 = <%= request.getServerName() %> <br>
서버포트 = <%= request.getServerPort() %> <br>
</body>
</html>
URL로부터 추출한 정보는 다음과 같다.
5.2 요청파라미터 처리
HTML폼과 요청 파라미터
HTML폼의 각 입력요소는 이름을 갖는다. 이름은 서버에 전송하는 요청 파라미터의 변수명으로 사용된다.
request 기본 객체의 요청 파라미터 관련 메서드
rqeuest 기본 객체는 웹 브라우저가 전송 한 파라미터를 읽어올 수 잇는 메서드를 제공한다.
//chap03/form.jsp
<%@ page contentType = "text/html; charset=utf-8" %>
<html>
<head><title>폼생성</title></head>
<body>
<form action="viewParameter.jsp" method="post">
이름: <input type="text" name="name" size="10"> <br>
주소: <input type="text" name="address" size="30"> <br>
좋아하는 동물 :
<input type="checkbox" name="pet" value="dog">강아지
<input type="checkbox" name="pet" value="cat">고양이
<input type="checkbox" name="pet" value="pig">돼지
<br>
<input type=submit" value="전송">
</form>
</body>
</html>
//viewParameter.jsp
<%@ page contentType="text/html; charset=utf-8" %>
<%@ page import="java.util.Enumeration" %>
<%@ page import="java.util.Map" %>
<%
request.setCharacterEncoding("utf-8");
%>
<html>
<title>요청 파라미터 출력</title>
<body>
<b>request.getParameter() 메서드 사용</b>
name 파라미터 = <%= request.getParameter("name") %> <br />
address 파라미터 = <%= request.getParameter("address") %>
<p>
<b>request.getParameterValues() 메서드 사용</b><br />
<%
String[] values = request.getParameterValues("pet");
if(values!=null) {
for(int i=0; i<values.length; i++)="" {="" %="">
<%= values[i] %>
<%
}
}
%>
</values.length;></p><p>
<b>request.getParameterNames() 메서드 사용</b><br />
<%
Enumeration paramEnum = request.getParameterNames();
while(paramEnum.hasMoreElements()) {
String name = (String)paramEnum.nextElement();
%>
<%= name %>
<%
}
%>
</p><p>
<b>request.getParameterMap() 메서드 사용 </b><br />
<%
Map parameterMap = request.getParameterMap();
String[] nameParam = (String[])parameterMap.get("name");
if(nameParam!=null) {
%>
name = <%= nameParam[0] %>
<%
}
%>
</p>
</body>
</html>
</tex>
입력한 데이터는 요청 파라미터로 전송되며 request 기본 객체의 메서드를 사용해서 요청 파라미터를 읽어올 수 있다.
pet파라미터에 경우 한개 이상의 입력값이 전달될 수 있기 때문에 request.getParameterValues() 메서드를 사용하여 String 배열로 읽어와야한다.
GET방식과 POST방식 전송
<form action="/chap03/viewParameter.jsp" method="get"> // get 방식지정
웹 브라우저가 GET방식으로 데이터를 전송하는 경우, 웹 브라우저에서 웹 서버로 전송되는 데이터는 다음과 같은 형식을 갖는다.
GET /chap03/viewParameter.jsp?name=cbk&address=seoul&pet=cat HTTP/1.1
Host:localhost:8080
User-Agent:Mozila/5.0 (Macintosh:Inter Mac OS X 10.10: rv:36.0) Gecko ~~~~
Accept : text/html, application/xhtml+xml, application/xml;q=0.9~
Accept-Language=en-US,en;q=0.5
Accept-Encoding:gzip.deflate
Connection:keep-alive
Cache-Control:max-age=0
웹 브라우저는 HTTP프로토콜에 맞춰 위 코드와 같은 데이터를 전송한다.
GET방식은 파라미터값의 길이에 제한이 있을 수 있으나 POST방식은 데이터 영역을 이용해서 데이터를 전송하기 때문에 파라미터 길이에 제한이 없다.
요청 파라미터 인코딩
<%@ page contentType="text.html; charset=utf-8" %>
<%
request.setCharacterEncoding("utf-8");
%>
만약 request.setCharacterEncoding() 메소드로 캐릭터셋을 지정하지 않을 경우 ISO-8859-1 캐릭터셋을 기본으로 사용한다. request.setCharacterEncoding() 메서드는 파라미터 값을 사용하기 전에 실행해주어야 한다.
캐릭터셋을 지정하기 전에 파라미터 값을 사용하면 모든 파라미터 값을 기본 캐릭터 셋(ISO-8859-1)을 이용해서 디코딩한다.
GET 방식으로 파라미터 전송 시에는 다음과 같다.

익스플로러는 MS949 캐릭터셋을 크롬은 UTF-8 캐릭터셋을 인코딩해서 전송한다.
WAS마다 GET방식의 디코딩 결정 캐릭터셋도 다르다.
톰캣8은 UTF-8 캐릭터셋을 사용하지만 톰캣7의 경우는 ISO-8859-1을 사용한다.
또한 GET방식으로 전송 된 파라미터에 대해서는 request.setCharacterEncoding()메서드로 지정한 캐릭터 셋이 적용되지 않는다.
톰캣에서 GET방식 파라미터를 위한 인코딩 처리하기
Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"
userBodyEncodingForURI="true">


<%@ page contentType="text/html; charset=utf-8" %>
<%@ page import = "java.util.Enumeration" %>
<html>
<head><title>헤더목록 출력</title></head>
<body>
<%
Enumeration headerEnum = request.getHeaderNames();
while(headerEnum.hasMoreElements()) {
String headerName = (String)headerEnum.nextElement();
String headerValue = request.getHeader(headerName);
%>
<%= headerName %> = <%= headerValue %> <br>
<%
}
%>
</body>
</html>
06. response 기본 객체
6.1 웹브라우저에 헤더 정보 전송하기

6.2 웹 브라우저 캐시 제어를 위한 응답 헤더 입력

다음은 캐시를 보관하지 않도록 설정하는 코드이다.
<%
response.setHeader("Cache-Control","no-cache");
response.addHeader("Cache-Control","no-store");
response.setHeader("Pragma","No-cache");
response.setDateHeader("Expires",1L);
%>
위 코드에서 Expires 응답 헤더의 값으로 long 타입 숫자를 설정했다.
이 값은 1970년 1월1일 이후를 기준으로 1/1000초 단위로 값을 입력한다.
웹 브라우저가 응답을 캐시하지 않도록 하고 싶다면 이값을 현재 시간보다 이전 값으로 지정하면 된다.
6.3 리다이렉트를 이용해서 페이지 이동하기
String id = request.getParameter("memberId");
if(id!=null && id.equals("madvirus")) {
response.sendRedirect("/chap03/index.jsp");
}
else {
%>
<html>
<head><title>로그인에 실패</title></head>
<body>
잘못된 아이디 입니다.
</body>
</html>
<%
}
%>
URL을 입력해서 테스트 시 쿼리문자열을 인코딩 한 형태로 URL를 입력해야 한다.
예를 들어 파라미터 입력 값이 자바 인 경우 '%EC%9E%90%EB%B0%94'로 변경해주는 작업을 개발자가 손으로 계산해야 한다면 괴롭겠지만
java.net.URIEncoder 클래스의 URLEncode.encode() 메서드 사용하면 파라미터 값을 쉽게 인코딩 할 수 있다.
<%@ page pageEncoding="utf-8" %>
<%@ page import = "java.net.URLEncoder" %>
<%
String value = " 자바";
String encodedValue = URLEncoder.encode(value, "utf-8");
response.sendRedirect("/chap03/index.jsp?name=" + encodedValue);
%>
포트 확인
1. 포트 확인을 위해서 telnet 클라이언트 기능을 활성화한다.
윈도우10기준 -> 제어판 -> Windows 기능 -> telnet클라이언트 체크 -> 확인
2. 명령어 프롬포트에서 telnet IP주소 포트번호로 확인한다.
> telnet 211.101.11.1 8088
Trying 211.101.11.1
//방화벽에 의해 포트가 차단된 경우 - 대기 후 TimeOut 발생
telnet: connect to address 211.101.11.1: Connection timed out
telnet: Unable to connect to remote host: Connection timed out
//방화벽 서비스 포트는 열려있으나, 프로세스미실행 상태인 경우 - Connection refused 발생
Trying 211.101.11.1
telnet: Unable to connect to remote host: Connection refused
//정상 동작 시
Connected to 211.101.11.1
Escape character is '^]'.
Chapter13 이클립스를 이용한 웹개발
01. 통합개발환경도구(IDE)
현재 널리 사용하는 통합개발환경도구는 이클립스(Eclipse)가 있다.
웹 개발을 하려면 Eclipse IDE for JAVA EE Developers 배포판을 다운로드하면 된다.
02. 서버 실행 환경 설정하기
이클립스에서 사용할 서버를 설정한다.
[Window]->[Preferences] 메뉴를 실행
서버선택 대화창에서 Apache Tomcat 선택하고 톰캣 경로를 설정한다.
03. UTF-8 설정
JSP의 기본 엔코딩은 UTF-8이다.
[Window]->[Preferences]->[General]->[Workspace]
[Window]->[Preferences]->[Web]->[JSP Files]
04. 웹 프로젝트 생성하기
[File]->[Dynamic Web Project]
Target Runtime : 사용할 서버
Dynamic Web Module Version : 서블릿 버전
소스 폴더에는 Java파일이 위치, 컴파일해서 생성된 Class 파일은 build\classes 폴더에 위치하게 된다.
Context Root : 웹 어플리케이션 컨텍스트 경로, 루트인 경우 입력하지 않는다.
http://서버:포트/[컨텍스트경로]
Content Directory : JSP, HTML, 이미지, WEB-INF 폴더가 위치할곳
Generate web.xml deployment descriptor : web.xml 파일을 생성할지를 지정한다.
05. JSP, JAVA 파일 작성하기
package chap13;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Clock {
public String now() {
SimpleDateFormat format = new SimpleDateFormat("HH시 mm분 ss초");
return format.format(new Date());
}
}
Java Resource> src> chap13> Clock.java
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="chap13.Clock"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>현재 시간 출력</title>
</head>
<body>
현재 시간은 <%=new Clock().now() %> 입니다.
</body>
</html>
WebContent> now.jsp
06. 배포WAR 생성하기
이클릾스의 동적 웹 프로젝트 폴더구조는 서블릿 규약에 정의되어 있는 표준 폴더구조와 다르다.
따라서 개발한 코드를 실제로 사용할 WAS에 배포해서 적용하려면 서블릿규약에 맞는 구조로 바꿔주어야한다.
[Export]->[WAR file]
생성된 WAR파일을 [톰캣]\webapps 폴더에 복사하면 배포가 끝난다.
톰캣을 실행하면 [톰캣]\webapps\chap13폴더가 생성되고 war파일의 이름을 컨텍스트경로로 사용한다.
따라서 http://localhost:8080\chap13\now.jsp 주소를 이용해서 실행할 수 있다.
'IT > JSP2.3 웹프로그래밍' 카테고리의 다른 글
Chapter06 에러처리 (0) | 2018.07.09 |
---|---|
Chapter05 기본객체와 영역 (0) | 2017.12.05 |
Chapter04 필수 이해 요소 (0) | 2017.12.05 |
Chapter03 JSP로 시작하는 웹프로그래밍 (0) | 2017.11.29 |
Chapter02 웹프로그래밍 기초 (0) | 2017.11.29 |
ㄹㄹㄹㄹㄹ
fda
안녕하세요
5677767676
미래의 나를 알수 있는 법
지금 무엇을 했는가?
오늘 무엇을 했는가?
자의든 타의든 현재의 나가 곧 미래의 나이다.
현재 당신은 어떤 모습인가?
미래를 바꾸고 싶다면 부디
현재 내 모습을 바꾸길...
헨리코튼 PK니트
AHWAM18911NYX
AHWAM18901PIX
AHWAM18901GYX
AHWAM18971MIX
AHWAM18971CRX
AHWAM18931NYX
AHWAM18921GYX
AHWAM18931GYL
2018-08-19 소비
1. 더니트컴퍼니 오버핏올리브티, 스트라이프티
2. 무신사 유틸리티 팬츠 3종, 페이크삭스 84,600원
3. 일빵빵 스토리가 있는 영어1, 네이버페이 마일리지로 구입
바닷마을다이어리
사람을 소중히 대하자...
존중받아야 되는 사람으로서 대하자
바닷마을 다이어리
Chapter06 에러처리
01. 익셉션 직접처리
다음과 같은 에러화면을 노출하지 않기 위해 try-catch를 이용해서 익셉션이 발생할때 알맞은 응답을 생성할 수 있다.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
name 파라미터 값
<% try { %>
<%=request.getParameter("name").toUpperCase() %>
<% } catch(Exception ex) { %>
name 파라미터가 올바르지 않습니다.
<%} %>
02. 에러페이지 지정하기
익셉션이 발생하면 보여줄 JSP 페이지는 page 디렉티브의 errorPage 속성을 사용해서 지정한다.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page errorPage = "viewErrorMessage.jsp" %>
파라미터 출력
name 파라미터 값:
<%=request.getParameter("name").toUpperCase()%>
page디렉티브의 isErrorPage 속성값을 "true"로 지정하면 JSP페이지는 에러페이지가 된다.
에러페이지로 지정된 JSP는 exception 기본 객체를 사용할 수 있다.
이 exception 객체는 실행과정 중 발생된 익셉션 객체이다.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page isErrorPage = "true" %>
에러 발생
요청 처리 과정에서 에러가 발생하였습니다.
빠른 시간 내에 문제를 해결하도록 하겠습니다.
에러 타입 : <%= exception.getClass().getName() %>
에러 메세지: **<%= exception.getMessage() %>**
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
name 파라미터 값
<% try { %>
<%=request.getParameter("name").toUpperCase() %>
<% } catch(Exception ex) { %>
name 파라미터가 올바르지 않습니다.
<%} %>
'IT > JSP2.3 웹프로그래밍' 카테고리의 다른 글
Chapter13 이클립스를 이용한 웹개발 (0) | 2019.04.03 |
---|---|
Chapter05 기본객체와 영역 (0) | 2017.12.05 |
Chapter04 필수 이해 요소 (0) | 2017.12.05 |
Chapter03 JSP로 시작하는 웹프로그래밍 (0) | 2017.11.29 |
Chapter02 웹프로그래밍 기초 (0) | 2017.11.29 |
Excel 2010 문서 열 때 새창에서 열기
Chapter05 기본객체와 영역
01. 기본 객체
기본 객체 |
실제 타입 |
설명 |
request |
javax.servlet.http.HttpServletRequest |
클라이언트의 요청 정보를 저장한다. |
response |
javax.servlet.http.HttpServletResponse |
응답 정보를 저장한다. |
pageContext |
javax.servlet.jsp.PageContext |
JSP페이지에 대한 정보를 저장한다. |
session |
javax.servlet.http.HttpSession |
HTTP 세션 정보를 저장한다. |
application |
javax.servlet.ServletContext |
웹 어플리케이션에 대한 정보를 저장한다. |
out |
javax.servlet.jsp.JspWriter |
JSP 페이지가 생성하는 결과를 출력할 때 사용하는 출력 스트림이다. |
config |
javax.servlet.ServletConfig |
JSP 페이지에 대한 설정 정보를 저장한다. |
page |
java.lang.Object |
JSP 페이지를 구현한 자바 클래스 인스턴스 이다. |
exception |
java.lang.Throwable |
익셉션 객체이다. 에러 페이지에서만 사용한다. |
exception객체를 제외한 8개의 기본 객체는 모든 JSP페이지에서 사용할 수 있다.
02. out 기본 객체
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
out.println("안녕하세요");
%>
기본 텍스트 입니다
</body>
</html>
2.1 out 기본객체의 출력 메서드
2.2 out 기본 객체와 버퍼의 관계
메서드 |
리턴타입 |
설명 |
getBufferSize() |
int |
버퍼의 크기를 구한다 |
getReamining() |
int |
현재 버퍼의 남은 크기를 구한다 |
clear() |
void |
버퍼의 내용을 비운다. 만약 이미 플러시 됬다면 IOException 발생 |
clearBuffer() |
void |
버퍼의 내용을 비운다. 플러시 되도 가능 |
flush() |
void |
버퍼를 플러시한다. 버퍼 내용을 클라이언트에 전송 |
isAutoFlush() |
boolean |
버퍼가 다 찼을 경우 자동 플러시 할 경우 true를 리턴한다. |
03. pageContext 기본 객체
3.1 기본 객체 접근 메서드
메서드 |
리턴 타입 |
getRequest() |
ServletRequest |
getResponse() |
ServletResponse |
getSession() |
HttpSession |
getServletContext(0 |
ServletContext |
getServletConfig() |
ServletConfig |
getOut() |
JspWriter |
getException() |
Exception |
getPage() |
Object |
getException() 메서드는 에러페이지인 경우에만 의미가 있다.
다음 수식 값은 true이다
<%= request == (HttpServletRequest)pageContext.getRequest() %>
04. application 기본 객체
4.1 웹 어플리케이션 초기화 파라미터 읽어오기
<context-param>
<description> 파라미터 설명(필수아님) </description>
<param-name>파라미터이름</param-name>
<param-value>파라미터 값</param-value>
</context-param>
web.xml
메서드 |
리턴타입 |
설명 |
getInitParameter(String name) |
String |
이름이 name인 웹 어플리케이션 초기화 파라미터의 값을 읽어온다. 존재하지 않으면 null을 리턴한다. |
getInitParameterNames() |
Enumeration<String> |
웹 어플리케이션 초기화 파라미터의 이름 목록을 리턴한다. |
//web.xml
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
<context-param>
<description>로깅 여부</description>
<param-name>logEnabled</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<description>디버깅 레벨</description>
<param-name>debugLevel</param-name>
<param-value>5</param-value>
</context-param>
</web-app>
</span>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import = "java.util.Enumeration" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>초기화 파라미터 읽어오기</title>
</head>
<body>
초기화 파라미터 목록 :
<ul>
<%
Enumeration<String> initParamEnum = application.getInitParameterNames();
while(initParamEnum.hasMoreElements()) {
String initParamName = initParamEnum.nextElement();
%>
<li><%= initParamName %> = <%= application.getInitParameter(initParamName) %></li>
<%
}
%>
</ul>
</body>
</html>
4.2 서버 정보 읽어오기
application 기본 객체는 현재 사용 중인 웹 컨테이너에 대한 정보를 읽어오는 메서드를 제공하고 있다.
메서드 |
리턴타입 |
설명 |
getServerInfo() |
String |
서버 정보를 구한다. |
getMajorVersion() |
String |
서버가 지원하는 서블릿규약 메이저 버전을 구한다. |
getMinorVersion() |
String |
서버가 지원하는 서블릿 규약의 마이너 버전을 구한다. |
4.3 로그 메시지 기록하기
메서드 |
리턴타입 |
설명 |
log(String msg) |
void |
msg를 로그로 남긴다. |
log(String msg, Throwable throwable) |
void |
msg를 로그로 남긴다. 익셉션 정보도 함께 로그에 기록한다. |
<% log("로그 메시지 기록2"): %>
4.4 웹 어플리케이션의 자원 구하기
메서드 |
리턴타입 |
설명 |
getRealPath(String path) |
String |
웹 어플리케이션 내에서 지정한 경우에 해당하는 자원의 시스템상에서의 경로를 리턴한다 |
getResource(String path) |
java.net.URL |
웹 어플리케이션 내에서 지정한 경로에 해당하는 자원에 접근할 수 있는 URL 객체를 리턴한다. |
getResourceAsStream(String path) |
java.io.inputStream |
웹 어플리케이션 내에서 지정한 경로에 해당하는 자원으로부터 데이터를 읽어올수 있는 InputStream을 리턴한다. |
JSP페이지에서 웹 어플리케이션 폴더에 위치한 파일을 사용해야 할 때가 있다. 예를 들어 message\notice.txt 파일의 내용을 다음과 같이 출력할 수 있다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import = "java.io.*" %>
<%@ page import = "java.net.URL" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>자원 읽기</title>
</head>
<body>
<h3>절대경로 사용하여 자원 읽기 </h3>
<%
char[] buff = new char[128];
int len = -1;
String filePath = "C:\\workspace\\JSP_Study\\WebContent\\ch05\\message\\notice.txt";
try(InputStreamReader fr = new InputStreamReader(new FileInputStream(filePath), "UTF-8")) {
while((len=fr.read(buff))!=-1) {
out.print(new String(buff,0,len));
}
} catch(IOException ex) {
out.println("익셉션 발생 : " + ex.getMessage());
}
%>
<h3>application 기본 객체 사용하여 자원 읽기 </h3>
<%
buff = new char[128];
len = -1;
String resourcePath = "/ch05/message/notice.txt";
URL url= application.getResource(resourcePath);
try(InputStreamReader br = new InputStreamReader(url.openStream(), "UTF-8")) {
while((len=br.read(buff))!=-1) {
out.print(new String(buff,0,len));
}
} catch(IOException ex) {
out.println("익셉션 발생 : " + ex.getMessage());
}
%>
</body>
</html>
05. JSP기본객체와 영역
REQUEST 영역 하나의 HTTP 요청을 처리할 때 사용되는 영역
SESSION 영역 하나의 웹 브라우저와 고나련된 영역
APPLICATION 영역 하나의 웹 어플리케이션과 관련된 영역
각각 영역은 관련된 기본객체를 갖고 있다.
PAGE 영역 : pageContext 기본객체
REQUEST 영역 : request 기본 객체
SESSION 영역 : session 기본 객체
APPLICATION 영역 : application 기본 객체
06. JSP 기본 객체의 속성(Attribute) 사용하기
'IT > JSP2.3 웹프로그래밍' 카테고리의 다른 글
Chapter13 이클립스를 이용한 웹개발 (0) | 2019.04.03 |
---|---|
Chapter06 에러처리 (0) | 2018.07.09 |
Chapter04 필수 이해 요소 (0) | 2017.12.05 |
Chapter03 JSP로 시작하는 웹프로그래밍 (0) | 2017.11.29 |
Chapter02 웹프로그래밍 기초 (0) | 2017.11.29 |
Chapter04 필수 이해 요소
이 장에서는 JSP 소스 코드가 어떤 과정을 거쳐서 웹 브라우저의 서비스 요청에 응답하는지 출력 버퍼가 응답 과정에서 어떻게 동작하는지 살펴볼 것이다.
01. JSP 처리 과정
02. 출력버퍼와 응답
2.1 page디렉티브에서 버퍼 설정하기 : buffer 속성과 autoFlush속성
buffer 속성
buffer 속성의 값을 "none" 으로 지정하면 다음과 같은 제한이 따른다.
- <jsp:forward> 기능을 사용할 수 없다.
- 곧바로 전송되기 때문에 출력한 내용을 취소할 수 없다.
버퍼가 다 찼을 때 버퍼에 쌓인 데이터를 실제로 전송되어야 할 곳에 전송하고 버퍼를 비우는 것을 플러시라고 한다.
처음 플러시 될 때 응답 헤더, 응답 상태코드가 전송된다. 따라서 이후에는 응답 헤더 값을 변경해도 웹 브라우저에 전송되지 않고 무시된다.
autoFlush 속성
윗 JSP 페이지에서 autoFlush 속성을 false로 지정했을 때와 true로 지정했을 때를 비교해보자
autoFlush 속성값을 "false" 지정시 버퍼크기보다 많은 데이터를 생성하므로 익셉션이 발생한다.
autoFlush 속성값을 "true" 지정시 정상적으로 실행된다.
03. 웹 어플리케이션 폴더 구성과 URL 매핑
WEB-INF : 웹어플리케이션 설정 정보를 담고 있는 web.xml파일이 위치한다.
WEB-INF/classes : 웹어플리케이션에서 사용하는 클래스 파일이 위치한다.
WEB-INF/lib : 웹어플리케이션에서 사용하는 jar파일이 위치한다.
WEB-INF을 제외한 나머지 폴더에는 JSP, HTML, 이미지 등의 파일이 위치한다.
※ web.xml을 작성해야 하는 경우는 3가지가 있다.
3.1 웹 어플리케이션 폴더와 URL의 관계
[톰캣]/webapps/[웹경로] -> http://host:port[/웹경로]
3.2 웹 어플리케이션 폴더 내에서의 하위 폴더 사용
04. 웹 어플리케이션 배포
'IT > JSP2.3 웹프로그래밍' 카테고리의 다른 글
Chapter06 에러처리 (0) | 2018.07.09 |
---|---|
Chapter05 기본객체와 영역 (0) | 2017.12.05 |
Chapter03 JSP로 시작하는 웹프로그래밍 (0) | 2017.11.29 |
Chapter02 웹프로그래밍 기초 (0) | 2017.11.29 |
Chapter01 들어가며 (0) | 2017.11.28 |
Chapter03 JSP로 시작하는 웹프로그래밍
01. JSP에서 HTML문서를 생성하는 기본코드구조
02. JSP페이지 구성요소
01.디렉티브
02.스크립트요소
03.기본객체
- JSP에서 웹어플리케이션 프로그래밍을 하는데 필요한 기능을 제공해주는 기본객체로 request, response, session, application, page 등이 존재한다.
04.표현언어
05.표준액션태그와 태그 라이브러리
03. page디렉티브
contentType 속성과 캐릭터셋
MIME
기본 캐릭터셋은 ISO-8859-1을 사용하게 된다. ISO-8859-1은 한글을 제대로 표현할 수 없다.
따라서 EUC-KR이나 UTF-8 같이 한국어를 포함하고 있는 캐릭터셋을 사용해야 한다.
※ 저장할 때 사용한 캐릭터 인코딩과 page디렉티브의 contentType속성에 지정한 캐릭터셋이 일치하지 않을 떄 깨진다.
import 속성
trimDirectiveWhitespaces 속성을 이용한 공백처리
JSP페이지의 인코딩과 pageEncoding속성
04. 스크립트요소
스크립트릿
표현식
선언부
다음과 같이 사용할 수 있다.
05. request 기본 객체
- 클라이언트와 관련된 정보 읽기 가능
- 서버와 관련된 정보 읽기 가능
- 클라이언트가 전송한 요청 파라미터 읽기 기능
- 클라이언트가 전송한 요청 헤더 읽기 기능
- 클라이언트가 전송한 쿠키 읽기 기능
- 속성 처리 기능
5.1 클라이언트 정보 및 서버 정보 읽기
URL로부터 추출한 정보는 다음과 같다.
5.2 요청파라미터 처리
HTML폼과 요청 파라미터
HTML폼의 각 입력요소는 이름을 갖는다. 이름은 서버에 전송하는 요청 파라미터의 변수명으로 사용된다.
request 기본 객체의 요청 파라미터 관련 메서드
rqeuest 기본 객체는 웹 브라우저가 전송 한 파라미터를 읽어올 수 잇는 메서드를 제공한다.
입력한 데이터는 요청 파라미터로 전송되며 request 기본 객체의 메서드를 사용해서 요청 파라미터를 읽어올 수 있다.
pet파라미터에 경우 한개 이상의 입력값이 전달될 수 있기 때문에 request.getParameterValues() 메서드를 사용하여 String 배열로 읽어와야한다.
GET방식과 POST방식 전송
데이터 영역에 파라미터 데이터가 전송되는 것을 확인 할 수 있다.
GET방식은 파라미터값의 길이에 제한이 있을 수 있으나 POST방식은 데이터 영역을 이용해서 데이터를 전송하기 때문에 파라미터 길이에 제한이 없다.
요청 파라미터 인코딩
만약 request.setCharacterEncoding() 메소드로 캐릭터셋을 지정하지 않을 경우 ISO-8859-1 캐릭터셋을 기본으로 사용한다. request.setCharacterEncoding() 메서드는 파라미터 값을 사용하기 전에 실행해주어야 한다.
캐릭터셋을 지정하기 전에 파라미터 값을 사용하면 모든 파라미터 값을 기본 캐릭터 셋(ISO-8859-1)을 이용해서 디코딩한다.
GET 방식으로 파라미터 전송 시에는 다음과 같다.
익스플로러는 MS949 캐릭터셋을 크롬은 UTF-8 캐릭터셋을 인코딩해서 전송한다.
WAS마다 GET방식의 디코딩 결정 캐릭터셋도 다르다.
톰캣8은 UTF-8 캐릭터셋을 사용하지만 톰캣7의 경우는 ISO-8859-1을 사용한다.
또한 GET방식으로 전송 된 파라미터에 대해서는 request.setCharacterEncoding()메서드로 지정한 캐릭터 셋이 적용되지 않는다.
톰캣에서 GET방식 파라미터를 위한 인코딩 처리하기
5.3 요청 헤더 정보의 처리
06. response 기본 객체
6.1 웹브라우저에 헤더 정보 전송하기
6.2 웹 브라우저 캐시 제어를 위한 응답 헤더 입력
다음은 캐시를 보관하지 않도록 설정하는 코드이다.
위 코드에서 Expires 응답 헤더의 값으로 long 타입 숫자를 설정했다.
이 값은 1970년 1월1일 이후를 기준으로 1/1000초 단위로 값을 입력한다.
웹 브라우저가 응답을 캐시하지 않도록 하고 싶다면 이값을 현재 시간보다 이전 값으로 지정하면 된다.
6.3 리다이렉트를 이용해서 페이지 이동하기
URL을 입력해서 테스트 시 쿼리문자열을 인코딩 한 형태로 URL를 입력해야 한다.
예를 들어 파라미터 입력 값이 자바 인 경우 '%EC%9E%90%EB%B0%94'로 변경해주는 작업을 개발자가 손으로 계산해야 한다면 괴롭겠지만
java.net.URIEncoder 클래스의 URLEncode.encode() 메서드 사용하면 파라미터 값을 쉽게 인코딩 할 수 있다.
'IT > JSP2.3 웹프로그래밍' 카테고리의 다른 글
Chapter06 에러처리 (0) | 2018.07.09 |
---|---|
Chapter05 기본객체와 영역 (0) | 2017.12.05 |
Chapter04 필수 이해 요소 (0) | 2017.12.05 |
Chapter02 웹프로그래밍 기초 (0) | 2017.11.29 |
Chapter01 들어가며 (0) | 2017.11.28 |
Chapter02 웹프로그래밍 기초
01.웹과 웹프로그래밍
01. URL(Uniform Resource Locator)
프로토콜 : 웹브라우저가 서버와 사용할 규칙
서버이름 : 서버이름
경로 : 웹페이지 상세 주소
쿼리문자열 : 추가로 서버에 송신하는 데이터
02. 웹브라우저와 웹서버
1 URL의 IP주소 DNS서버에 요청
2 IP주소 응답
3 웹서버에 웹페이지 요청
한 서버 컴퓨터에는 여러 서버프로그램이 가동될 수 있다.
각 서버를 구분하기 위해서 IP주소와 함께 포트번호가 부여되게 된다.
웹서버가 사용하는 기본 포트 번호는 80이다.
프로토콜이 http://인 경우 포트를 지정하지 않으면 기본적으로 80포트로 연결한다는 것을 의미한다.
톰캣은 기본적으로 8080포트를 사용하도록 설정되어있다.
03. HTML과 HTTP
HTML(HyperText Markup Language)
HTTP(Hypermedia Trasfer Protocol)
04. JSP
JSP(Java Server Pages)
WAS(Web Application Server)
02. JSP 실행
<%@ page contentType="text/html; charset=UTF-8"%> <html> <head> <title>현재시간</title> </head> <body> 지금 : <%=new java.util.Date()%> </body> </html>
※ 에러404->파일경로에러, 에러500 -> 소스코드 에러
'IT > JSP2.3 웹프로그래밍' 카테고리의 다른 글
Chapter06 에러처리 (0) | 2018.07.09 |
---|---|
Chapter05 기본객체와 영역 (0) | 2017.12.05 |
Chapter04 필수 이해 요소 (0) | 2017.12.05 |
Chapter03 JSP로 시작하는 웹프로그래밍 (0) | 2017.11.29 |
Chapter01 들어가며 (0) | 2017.11.28 |
포트 확인
1. 포트 확인을 위해서 telnet 클라이언트 기능을 활성화한다.
윈도우10기준 -> 제어판 -> Windows 기능 -> telnet클라이언트 체크 -> 확인
2. 명령어 프롬포트에서 telnet IP주소 포트번호로 확인한다.
'IT > Tips' 카테고리의 다른 글
Excel 2010 문서 열 때 새창에서 열기 (0) | 2017.12.12 |
---|