분류 전체보기

01. JSP에서 HTML문서를 생성하는 기본코드구조

JSP코드는 설정부분과 HTML문서를 생성하는 생성부분으로 나눌 수 있다.
설정부분에는 생성문서타입, 사용할커스텀태그, 사용할자바클래스 를 입력한다.
 

02. JSP페이지 구성요소

01.디렉티브

-JSP페이지에 대한 설정 정보를 지정할 때 사용

<%@ 디렉티브 이름 속성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" />
- 액션 택그는 <jsp:액션태그이름> 의 형태를 띠며 액션태그 종류에 따라서 서로 다른 속성과 값을 갖는다.
- 커스텀 태그는 JSP를 확장시켜주는 기능으로 개발자가 직접 개발하는 코드이다. 
- 자주 사용되는 커스텀 태그를 표준화한 태그 라이브러리를 "JSTL(Javaserver Pages Standard Tag Library)"라고 한다.

03. page디렉티브

JSP페이지에 대한 정보를 입력하기 위해서 사용된다. 
 

<%@ page contentType="text/html; charset=utf-8" %>
<%@ page import="java.util.Date" %>

 

 

contentType 속성과 캐릭터셋

page디렉티브의contentType 속성은 JSP페이지가 생성할 문서의 타입을 지정한다. 

MIME

Multipurpose Internet Mail Extensions의 약자로 메일, HTTP 등의 프로토콜에서 응답 데이터의 내용을 설명하기 위해 사용된다.
ex ) text/html ,  applicastion/json , text/xml
 

 

다음은 HTML문서를 생성하는 경우 contentType속성을 설정하는 예를 보여주고 있다. 기본값은 text/html이다.

 <%@ page contentType="text/html; charset=utf-8">

기본 캐릭터셋은 ISO-8859-1을 사용하게 된다. ISO-8859-1은 한글을 제대로 표현할 수 없다. 

따라서 EUC-KR이나 UTF-8 같이 한국어를 포함하고 있는 캐릭터셋을 사용해야 한다. 

※ 저장할 때 사용한 캐릭터 인코딩과 page디렉티브의 contentType속성에 지정한 캐릭터셋이 일치하지 않을 떄 깨진다.

import 속성

JSP는 page디렉티브의 import속성을 사용해서 JSP코드에서 클래스의 단순 이름을 사용할 수 있다. 

<%@ 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 속성을 이용한 공백처리

JSP에서 디렉티브나 스크립트 코드로 인해 생김 줄바꿈 공백문자를 제거하기 위해서 사용한다.

<%@ page contentType="text/html; charset=utf-8" %> //생성된 html소스에 page디렉티브로 인해 공백이 생긴다
<%@ page trimDirectiveWhitespace = "true" %> // 공백문자를 제거해준다.

JSP페이지의 인코딩과 pageEncoding속성

※ BOM : Byte Order Mark의 약자로 UTF-8이나 유니코드 등의 인코딩에서 바이트 의 순서가 리틀엔디언 인지 빅엔디언인지 여부를 알려주는 16비트값
 
JSP로드시 캐릭터셋을 결정하는 기본과정은 다음과 같다.
 
- 파일이 BOM으로 시작하지 않을 경우
1. 기본 인코딩을 이용해서 파일을 처음부터 읽고 page디렉티브의 pageEncoding속성을 검색해 속성값을 캐릭터셋으로 사용한다.
2. pageEncoding속성이 없다면 contentTypoe 속성의 charset을 이용해 캐릭터셋으로 사용한다. 
3. 모두 해당되지 않을 경우 ISO-8859-1을 캐릭터셋으로 사용한다.
 
- 파일이 BOM으로 시작할 경우
1. BOM을 이용해서 결정된 인코딩을 이용하여 파일을 읽고 page디렉티브의 pageEncoding속성을 검색한다.다.
2. pageEncoding속성의값과 BOM을 이용해서 결정된 인코딩이 다르면 에러를 발생시킨다.
<%@ page contentType="text/html; charset=euc-kr" %> //차선
<%@ page pageEncoding="utf-8">//우선
//html code
//다음과 같이 작성히 인코딩방식은 EUC-KR로 지정된다.

04. 스크립트요소

스크립트 요소에는 스크립트릿(Scriptlet) 표현식(Expression) 선언부(Declaration) 세가지가 있다.

스크립트릿

JSP에서 자바코드를 실행할 때 사용하는 코드 블록으로 <% 로 시작해서 %> 로 끝나며 안에 실행할 자바코드가 들어간다.

<%@ 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

선언부

JSP페이지의 스크립트릿이나 표현식에서 사용할 수 있는 메서드를 작성할 때는 선언부를 사용한다. 
다음과 같은 형식으로 이루어져 있다.

<%! 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 기본 객체

웹 브라우저에 웹 사이트의 주소를 입력하면 웹 브라우저는 해당 웹 서버에 연결한 후 요청 정보를 전송하는데 요청정보를 제공하는 것이 request 기본 객체이다. 
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방식 전송

웹 브라우저는 GET방식과 POST방식의 두 가지 방식 중 한가지를 이용해서 파라미터를 전송한다.

<form action="/chap03/viewParameter.jsp" method="get"> // get 방식지정
GET 방식은 요청 URL에 파라미터(쿼리문자열)를 붙여서 전송한다.
ex ) http://localhost:8080/JSPStudy/viewParameter.jsp?name=%ED%99~&address=%EC%(%%84%EC%B0%A8%EA%B3%A1
 
쿼리문자열의 양식은 다음과 같이 구성 된다. 각각의 파라미터는 앰퍼샌드(&) 기호로 구분되며 이름과 값은 등호기호(=)로 구분한다.
 
이름1=값1&이름2=값2
 
파라미터 값을 RFC2396규약에 정의된 규칙에 따라 인코딩해서 전송하기 "EC%(%%84%E" 다음과 같이 표시된다.
EC%(%%84%E 는 파라미터값을 UTF-8로 인코딩 한 결과이다.

웹 브라우저가 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프로토콜에 맞춰 위 코드와 같은 데이터를 전송한다. 
프로토콜에 따르면 첫줄은 요청방식과 URI, HTTP프로토콜버전을 명시하도록 되어있다. 
POST방식은 데이터 영역을 이용해서 파라미터를 전송한다.

GET방식은 파라미터값의 길이에 제한이 있을 수 있으나 POST방식은 데이터 영역을 이용해서 데이터를 전송하기 때문에 파라미터 길이에 제한이 없다.

요청 파라미터 인코딩

웹 브라우저는 웹서버는 파라미터를 전송할 때 알맞은 캐릭터셋을 이용해서 파라미터 값을 인코딩한다.
반대로 웹 서버는 알맞은 캐릭터셋을 이용해서 웹브라우저가 전송한 파라미터 데이터를 디코딩 한다.
 
어떤 캐릭터셋을 사용할지의 여부는 두 전송방식 GET방식과 POST방식에 달라진다. 
 
POST방식의 경우 입력폼을 보여주는 화면이 사용하는 캐릭터셋을 사용한다.
form.jsp에서 다음과 같이 캐릭터셋을 지정하고 있기 때문에 전송시 UTF-8 캐릭터셋을 이용해서 인코딩한 값을 서버에 전송한다.
<%@ page contentType="text.html; charset=utf-8" %>
JSP는 request 기본 객체의 setCharacterEncoding() 메서드를 사용해서 파라미터 값을 디코딩할 때 사용할 캐릭터셋을 지정할 수 있다.
 
<%
  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방식 파라미터를 위한 인코딩 처리하기

톰캣에서 UTF-8이 아닌 다른 캐릭터셋을 이용해서 GET방식의 파라미터를 디코딩 하는 경우 
톰캣/conf/server.xml 파일에서 <Connector>의 useBodyEncodingForURI 속성값을 true로 지정하여 한다. 지정 시 request.setCharacterEncoding() 메서드로 지정한 캐릭터셋을 이용하여 파라미터를 올바르게 읽어 올 수 잇게 된다.
Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"
userBodyEncodingForURI="true">
 
HTTP 프로토콜은 헤덩 정보에 부가적인 정보를 담고 있다. 
 
request 기본 객체는 이러한 헤덩 정보를 읽어 올 수 있는 기능을 제공하고 있다.
 
<%@ 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 기본 객체

response 기본 객체는 웹 브라우저에 보내는 응답정보를 담는다. 
response 기본 객체는 다음 기능을 제공한다.
- 헤더 정보 입력
- 리다이렉트 하기
 

6.1 웹브라우저에 헤더 정보 전송하기

response 기본 객체는 응답 정보에 헤더를 추가하는 기능을 제공한다. 헤더 관련 메서드는 다음과 같다.
 

 

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

HTTP는 웹 브라우저가 응답 결과를 캐시 할 것인지에 대한 여부를 설정할 수 있다. 응답 헤더에 관련된 헤더는 다음과 같다.
 

 

다음은 캐시를 보관하지 않도록 설정하는 코드이다.

<%
  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);
%>

 

포트 확인

2020. 10. 1. 22:54

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 '^]'.
 

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 주소를 이용해서 실행할 수 있다.

ㄹㄹㄹㄹㄹ

2018. 12. 26. 02:44

fda

안녕하세요

5677767676

지금 무엇을 했는가?
오늘 무엇을 했는가?

자의든 타의든 현재의 나가 곧 미래의 나이다.

현재 당신은 어떤 모습인가?

미래를 바꾸고 싶다면 부디
현재 내 모습을 바꾸길...

https://blog.naver.com/gkhigh/221426458906

헨리코튼 PK니트

2018. 9. 16. 00:43

AHWAM18911NYX

AHWAM18901PIX

AHWAM18901GYX

AHWAM18971MIX

AHWAM18971CRX

AHWAM18931NYX

AHWAM18921GYX

AHWAM18931GYL

2018-08-19 소비

2018. 8. 19. 16:41

1. 더니트컴퍼니 오버핏올리브티, 스트라이프티

2. 무신사 유틸리티 팬츠 3종, 페이크삭스 84,600원

 

3. 일빵빵 스토리가 있는 영어1, 네이버페이 마일리지로 구입

 

바닷마을다이어리

2018. 8. 12. 00:32

 

사람을 소중히 대하자... 
존중받아야 되는 사람으로서 대하자 

 

바닷마을 다이어리

Chapter06 에러처리

2018. 7. 9. 00:17

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 파라미터가 올바르지 않습니다.
<%} %>

Excel_2010_Multi.reg

Excel_2010_Multi_복구.reg


엑셀 2010 버전 입니다.

적용 / 복구 파일 입니다.

'IT > Tips' 카테고리의 다른 글

포트 확인  (0) 2017.11.29

01. 기본 객체

JSP는 9가지 기본 객체를 제공하고 있다.
 

 기본 객체

 실제 타입

설명 

 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 기본 객체

out 기본객체는 웹 브라우저에 데이터를 전송하는 출력 스트림이다.
JSP페이지 내에서 사용하는 비스크립트요소(HTML, 텍스트)은 out 기본 객체에 그대로 전달되고 표현식의 결과값도 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 기본객체의 출력 메서드

out 기본 객체는 응답 생성을 위해 세가지 메서드를 제공한다.
print() , println(), newLine()
※ 출력할 수 있는 값은 기본 데이터 타입(int, boolean, char 등) 과 String 이다.
 

2.2 out 기본 객체와 버퍼의 관계

JSP페이지가 사용하는 버퍼는 실제로 out 기본객체가 내부적으로 사용하고 있는 버퍼이다.
 

메서드 

리턴타입 

명 

 getBufferSize() 

int 

 버퍼의 크기를 구한다 

 getReamining() 

int 

 현재 버퍼의 남은 크기를 구한다 

 clear() 

void 

 버퍼의 내용을 비운다. 만약 이미 플러시 됬다면 IOException 발생 

 clearBuffer() 

void 

 버퍼의 내용을 비운다. 플러시 되도 가능 

 flush() 

void 

 버퍼를 플러시한다. 버퍼 내용을 클라이언트에 전송 

 isAutoFlush() 

boolean 

 버퍼가 다 찼을 경우 자동 플러시 할 경우 true를 리턴한다.

 

03. pageContext 기본 객체

JSP페이지와 일대일로 연결된 객체로 다음 기능을 제공한다.
- 기본 객체 구하기
- 속성 처리하기 
- 페이지 흐름 제어하기
- 에러데이터 구하기
 

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 기본 객체

웹 어플리케이션에 포함된 모든 JSP 페이지는 하나의 application 기본 객체를 공유하게 된다.

4.1 웹 어플리케이션 초기화 파라미터 읽어오기

서블릿규약은 웹 어플리케이션 전체에 걸쳐서 사용할 수 있는 초기화 파라미터를 정의하고 있다. 
초기화 파라미터 WEB-INF/web.xml 파일에 <context-param> 태그를 사용하여 추가한다.
<context-param>
 <description> 파라미터 설명(필수아님) </description>
 <param-name>파라미터이름</param-name>
 <param-value>파라미터 값</param-value>
</context-param>

 

web.xml

web.xml 파일은 웹 어플리케이션을 위한 설정 정보를 담고 있는 파일이다.
web.xml 파일은 [웹어플리케이션폴더]/WEB-INF 폴더에 위치해야한다.
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 로그 메시지 기록하기

apllication 기본 객체는 웹 컨테이너가 사용하는 로그 파일에 로그 메세지를 기록할 수 있도록 메서드를 제공하고 있다.
 

 메서드

리턴타입 

설명 

 log(String msg)

void 

msg를 로그로 남긴다. 

 log(String msg, Throwable throwable)

void

msg를 로그로 남긴다. 익셉션 정보도 함께 로그에 기록한다. 

 

로그 메시지가 기록되는 파일은 웹 컨테이너에 따르 다르다. 
톰캣은 [톰캣설치폴더]\logs 폴더에 있는 localhost.yyyy-mm-dd.log 형식의 파일에 로그를 기록한다.
 
JSP 페이지가 제공하는 log() 메서드도 존재한다.
<% log("로그 메시지 기록2"): %>
 

4.4 웹 어플리케이션의 자원 구하기

applicastion 기본 객체를 포함해 웹 어플리케이션 내에 있는 파일을 사용 할 때에는 웹 어플리케이션 폴더를 기준으로 파일의 경로를 지정한다.
웹 어플리케이션의 폴더가 c:\apache-tomcat-8.0.21\webapps\chap05라고 할 때 웹 어플리케이션 내에서 이 경로는 "/"가 된다.
 

 메서드

 리턴타입

 설명

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기본객체와 영역

웹 어플리케이션은 다음의 네 가지 영역으로 구성된다.
PAGE 영역 하나의 JSP페이지를 처리할 때 사용되는 영역  
REQUEST 영역 하나의 HTTP 요청을 처리할 때 사용되는 영역
SESSION 영역 하나의 웹 브라우저와 고나련된 영역
APPLICATION 영역 하나의 웹 어플리케이션과 관련된 영역

각각 영역은 관련된 기본객체를 갖고 있다.

PAGE 영역 : pageContext 기본객체
REQUEST 영역 : request 기본 객체
SESSION 영역 : session 기본 객체
APPLICATION 영역 : application 기본 객체

06. JSP 기본 객체의 속성(Attribute) 사용하기

속성(Attribute)는 JSP페이지 사이에서 정보를 주고받거나 공유하기 위한 목적으로 사용된다.
 

 

 

Chapter04 필수 이해 요소

2017. 12. 5. 14:49

이 장에서는 JSP 소스 코드가 어떤 과정을 거쳐서 웹 브라우저의 서비스 요청에 응답하는지 출력 버퍼가 응답 과정에서 어떻게 동작하는지 살펴볼 것이다.

01. JSP 처리 과정



0. 클라이언트 요청
1.1 JSP에 해당하는 서블릿이 존재하지 않을 경우
- 1.2 JSP페이지로부터 자바코드를 생성한다.
- 1.3 자바 코드를 컴파일해서 서블릿 클래스를 생성한다.
- 2.1 서블릿에 클라이언트 요청을 전달한다.
- 2.2 서블릿이 요청을 처리한 결과를 응답으로 생성한다.
- 3. 응답을 웹브라우저에 전송한다
2.1 JSP에 해당하는 서블릿이 존재하는 경우 (즉, 이미 1.1~1.3을 거친 경우)
- 2.1 서블릿에 클라이언트를 요청한다.
- 2.2 서블릿이 요청을 처리한 결과를 응답으로 생성한다.
- 3. 응답을 웹브라우저에 전송한다.

JSP페이지를 요청할 때 JSP를 자바소스로 변환한뒤 컴파일해서 생성한 서블릿을 실행하는 것이다.
JSP페이지를 자바소스로 변경하는 단계를 " 변환 " 단계
자바소스를 서블릿 클래스로 변경하는 단계를 " 컴파일 " 단계라고 한다.

다음 경로에서 JSP의 자바 소스 코드와 서블릿 클래스를 찾을 수 있다.
c:\apache-tomcat~\workCatalina\localhost\chap03\org\apache\jsp 

02. 출력버퍼와 응답

JSP페이지는 응답결과를 곧바로 웹브라우저에 전송하지 않고 출력버퍼에 임시로 응답결과를 저장했다가 한번에 웹브라우저에 전송한다. 

- 데이터 전송성능향상(작은 단위 여러번 전송보다, 큰단위 한번에 전송이 더 높은 성능을 발휘한다)
- JSP 실행 도중(버퍼에 저장하는 도중)에 버퍼를 비우고 새로운 내용 전송 가능
- 버퍼의 내용을 전송하기 전 헤더를 변경해서 전송이 가능해진다.

2.1 page디렉티브에서 버퍼 설정하기 : buffer 속성과 autoFlush속성

buffer 속성 

page디렉티브에서 buffer 속성을 제공하고 있다. 버퍼는 킬로바이트 단위로 지정할 수 있다. 
속성을 지정하지 않으면 최소 8kb 이상의 크기를 갖는 버퍼를 사용하도록 규정하고 있다.

buffer 속성의 값을 "none" 으로 지정하면 다음과 같은 제한이 따른다.

- <jsp:forward> 기능을 사용할 수 없다.

- 곧바로 전송되기 때문에 출력한 내용을 취소할 수 없다. 


버퍼가 다 찼을 때 버퍼에 쌓인 데이터를 실제로 전송되어야 할 곳에 전송하고 버퍼를 비우는 것을 플러시라고 한다.

처음 플러시 될 때 응답 헤더, 응답 상태코드가 전송된다. 따라서 이후에는 응답 헤더 값을 변경해도 웹 브라우저에 전송되지 않고 무시된다.

autoFlush 속성

page 디렉티브는 autoFlush 속성을 제공한다. "false" 으로 속성 값을 지정시 버퍼가 다 차면 익셉션을 발생시키고 작업을 중지한다.


윗 JSP 페이지에서 autoFlush 속성을 false로 지정했을 때와 true로 지정했을 때를 비교해보자


autoFlush 속성값을 "false" 지정시 버퍼크기보다 많은 데이터를 생성하므로 익셉션이 발생한다.


autoFlush 속성값을 "true" 지정시 정상적으로 실행된다.


03. 웹 어플리케이션 폴더 구성과 URL 매핑

서블릿/JSP 규약은 웹 어플리케이션이 특정 폴더 구조를 따르도록 제한하고 있다. 기본 구조는 다음과 같다.


WEB-INF : 웹어플리케이션 설정 정보를 담고 있는 web.xml파일이 위치한다.

WEB-INF/classes : 웹어플리케이션에서 사용하는 클래스 파일이 위치한다.

WEB-INF/lib : 웹어플리케이션에서 사용하는 jar파일이 위치한다. 

WEB-INF을 제외한 나머지 폴더에는 JSP, HTML, 이미지 등의 파일이 위치한다.


※ web.xml을 작성해야 하는 경우는 3가지가 있다.

- 서블릿을 직접 설정하는 경우
- 리스너를 직접 설정하는 경우
- 특정 URL에 속하는 JSP들에 대한 공통 속성값을 설정하는 경우

3.1 웹 어플리케이션 폴더와 URL의 관계

한 개의 웹 어플리케이션은 한 개 폴더를 차지한다. 각 폴더의 이름은 웹 어플리케이션을 실행 할 때 사용되는 URL과 상관있다.

[톰캣]/webapps/[웹경로] -> http://host:port[/웹경로]


톰캣의 webapps 폴더에는 ROOT라는 특수 폴더가 존재한다.

[톰캣]/webapps/root/ -> http://host:port/

URL " http://localhost:8080/chap02 " 에서 " /chap02 " 를 컨텍스트 경로(context path)라고 한다.

URL의 첫번째 경로와 일치하는 컨텍스트 경로를 가진 웹 어플리케이션(/[컨텍스트경로])이 존재하지 않으면 루트 웹 어플리케이션(/root/[컨텍스트경로])이 요청을 처리한다.

request 기본객체는 컨텍스트 경로를 제공하는 메서드를 정의하고 있다. request.getContextPath()

3.2 웹 어플리케이션 폴더 내에서의 하위 폴더 사용

효율적인 운영을 위해 웹 어플리케이션 폴더 밑에 하위 폴더를 생성해서 JSP페이지를 기능별로 분류하는 것이 좋다.

04. 웹 어플리케이션 배포

웹어플리케이션을 WAS 배포하는 방법은 두가지가 있다.
- 대상폴더에 파일을 직접 복사
- war파일로 묶어서 배포

WAS란 Web Application Archive의 약자로 웹어플리케이션의 구성요소를 하나로 묶어 놓은 파일이다.
PATH환경변수에 [JDK설치폴더]/bin 폴더를 추가해주면 전체경로를 입력할 필요없이 jar명령어를 실행할 수 있다.
해당 웹어플리케이션 폴더에서 jar cvf [웹어플리케이션명].war * 명령어를 실행하면 된다.


cvf -> c 새로운파일생성, v 세부정보를콘솔에표시함, f 생성할파일의이름을지정함

생성된 war파일을 [톰캣]/webapps 폴더에 복사해주면 배포가 된다. 해당 경로에는 war파일 이름과 동일한 컨텍스트 경로가 생성된다.


'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

01. JSP에서 HTML문서를 생성하는 기본코드구조

JSP코드는 설정부분과 HTML문서를 생성하는 생성부분으로 나눌 수 있다.
설정부분에는 생성문서타입, 사용할커스텀태그, 사용할자바클래스 를 입력한다.

02. JSP페이지 구성요소

01.디렉티브

-JSP페이지에 대한 설정 정보를 지정할 때 사용


02.스크립트요소

-문서의 내용을 동적으로 생성하기 위한 요소

03.기본객체

- JSP에서 웹어플리케이션 프로그래밍을 하는데 필요한 기능을 제공해주는 기본객체로 request, response, session, application, page 등이 존재한다.

04.표현언어

- 표현언어는 ${ 와 } 사이에 정해진 문법을 따르는 식

05.표준액션태그와 태그 라이브러리

- 액션 택그는 <jsp:액션태그이름> 의 형태를 띠며 액션태그 종류에 따라서 서로 다른 속성과 값을 갖는다.
- 커스텀 태그는 JSP를 확장시켜주는 기능으로 개발자가 직접 개발하는 코드이다. 
- 자주 사용되는 커스텀 태그를 표준화한 태그 라이브러리를 "JSTL(Javaserver Pages Standard Tag Library)"라고 한다.

03. page디렉티브

JSP페이지에 대한 정보를 입력하기 위해서 사용된다. 



contentType 속성과 캐릭터셋

page디렉티브의contentType 속성은 JSP페이지가 생성할 문서의 타입을 지정한다. 

MIME

Multipurpose Internet Mail Extensions의 약자로 메일, HTTP 등의 프로토콜에서 응답 데이터의 내용을 설명하기 위해 사용된다.
ex ) text/html ,  applicastion/json , text/xml

다음은 HTML문서를 생성하는 경우 contentType속성을 설정하는 예를 보여주고 있다. 기본값은 text/html이다.


기본 캐릭터셋은 ISO-8859-1을 사용하게 된다. ISO-8859-1은 한글을 제대로 표현할 수 없다. 

따라서 EUC-KR이나 UTF-8 같이 한국어를 포함하고 있는 캐릭터셋을 사용해야 한다. 

※ 저장할 때 사용한 캐릭터 인코딩과 page디렉티브의 contentType속성에 지정한 캐릭터셋이 일치하지 않을 떄 깨진다.

import 속성

JSP는 page디렉티브의 import속성을 사용해서 JSP코드에서 클래스의 단순 이름을 사용할 수 있다. 

trimDirectiveWhitespaces 속성을 이용한 공백처리

JSP에서 디렉티브나 스크립트 코드로 인해 생김 줄바꿈 공백문자를 제거하기 위해서 사용한다.

JSP페이지의 인코딩과 pageEncoding속성

※ BOM : Byte Order Mark의 약자로 UTF-8이나 유니코드 등의 인코딩에서 바이트 의 순서가 리틀엔디언 인지 빅엔디언인지 여부를 알려주는 16비트값

JSP로드시 캐릭터셋을 결정하는 기본과정은 다음과 같다.

- 파일이 BOM으로 시작하지 않을 경우
1. 기본 인코딩을 이용해서 파일을 처음부터 읽고 page디렉티브의 pageEncoding속성을 검색해 속성값을 캐릭터셋으로 사용한다.
2. pageEncoding속성이 없다면 contentTypoe 속성의 charset을 이용해 캐릭터셋으로 사용한다. 
3. 모두 해당되지 않을 경우 ISO-8859-1을 캐릭터셋으로 사용한다.

- 파일이 BOM으로 시작할 경우
1. BOM을 이용해서 결정된 인코딩을 이용하여 파일을 읽고 page디렉티브의 pageEncoding속성을 검색한다.다.
2. pageEncoding속성의값과 BOM을 이용해서 결정된 인코딩이 다르면 에러를 발생시킨다.


04. 스크립트요소

스크립트 요소에는 스크립트릿(Scriptlet) 표현식(Expression) 선언부(Declaration) 세가지가 있다.

스크립트릿

JSP에서 자바코드를 실행할 때 사용하는 코드 블록으로 <% 로 시작해서 %> 로 끝나며 안에 실행할 자바코드가 들어간다.

표현식

어떤 값을 출력결과에 포함시키고자 할 때 사용된다. <%= 값 %> 형식으로 사용된다.

선언부

JSP페이지의 스크립트릿이나 표현식에서 사용할 수 있는 메서드를 작성할 때는 선언부를 사용한다. 
다음과 같은 형식으로 이루어져 있다.

다음과 같이 사용할 수 있다.

05. request 기본 객체

웹 브라우저에 웹 사이트의 주소를 입력하면 웹 브라우저는 해당 웹 서버에 연결한 후 요청 정보를 전송하는데 요청정보를 제공하는 것이 request 기본 객체이다. 
request가 제공하는 기본 기능은 다음과 같이 구분된다.
  • 클라이언트와 관련된 정보 읽기 가능
  • 서버와 관련된 정보 읽기 가능
  • 클라이언트가 전송한 요청 파라미터 읽기 기능
  • 클라이언트가 전송한 요청 헤더 읽기 기능
  • 클라이언트가 전송한 쿠키 읽기 기능
  • 속성 처리 기능

5.1 클라이언트 정보 및 서버 정보 읽기


다음과 같이 확인 할 수 있다.

URL로부터 추출한 정보는 다음과 같다.

5.2 요청파라미터 처리

HTML폼과 요청 파라미터

HTML폼의 각 입력요소는 이름을 갖는다. 이름은 서버에 전송하는 요청 파라미터의 변수명으로 사용된다.

request 기본 객체의 요청 파라미터 관련 메서드

rqeuest 기본 객체는 웹 브라우저가 전송 한 파라미터를 읽어올 수 잇는 메서드를 제공한다.





입력한 데이터는 요청 파라미터로 전송되며 request 기본 객체의 메서드를 사용해서 요청 파라미터를 읽어올 수 있다.

pet파라미터에 경우 한개 이상의 입력값이 전달될 수 있기 때문에 request.getParameterValues() 메서드를 사용하여 String 배열로 읽어와야한다.

GET방식과 POST방식 전송

웹 브라우저는 GET방식과 POST방식의 두 가지 방식 중 한가지를 이용해서 파라미터를 전송한다.
GET 방식은 요청 URL에 파라미터(쿼리문자열)를 붙여서 전송한다.

ex ) http://localhost:8080/JSPStudy/viewParameter.jsp?name=%ED%99~&address=%EC%(%%84%EC%B0%A8%EA%B3%A1

쿼리문자열의 양식은 다음과 같이 구성 된다. 각각의 파라미터는 앰퍼샌드(&) 기호로 구분되며 이름과 값은 등호기호(=)로 구분한다.

이름1=값1&이름2=값2

파라미터 값을 RFC2396규약에 정의된 규칙에 따라 인코딩해서 전송하기 "EC%(%%84%E" 다음과 같이 표시된다.
EC%(%%84%E 는 파라미터값을 UTF-8로 인코딩 한 결과이다.
웹 브라우저가 GET방식으로 데이터를 전송하는 경우, 웹 브라우저에서 웹 서버로 전송되는 데이터는 다음과 같은 형식을 갖는다.
 
웹 브라우저는 HTTP프로토콜에 맞춰 위 코드와 같은 데이터를 전송한다. 
프로토콜에 따르면 첫줄은 요청방식과 URI, HTTP프로토콜버전을 명시하도록 되어있다. 
POST방식은 데이터 영역을 이용해서 파라미터를 전송한다.

데이터 영역에 파라미터 데이터가 전송되는 것을 확인 할 수 있다.

GET방식은 파라미터값의 길이에 제한이 있을 수 있으나 POST방식은 데이터 영역을 이용해서 데이터를 전송하기 때문에 파라미터 길이에 제한이 없다.

요청 파라미터 인코딩

웹 브라우저는 웹서버는 파라미터를 전송할 때 알맞은 캐릭터셋을 이용해서 파라미터 값을 인코딩한다.
반대로 웹 서버는 알맞은 캐릭터셋을 이용해서 웹브라우저가 전송한 파라미터 데이터를 디코딩 한다.

어떤 캐릭터셋을 사용할지의 여부는 두 전송방식 GET방식과 POST방식에 달라진다. 

POST방식의 경우 입력폼을 보여주는 화면이 사용하는 캐릭터셋을 사용한다.
form.jsp에서 다음과 같이 캐릭터셋을 지정하고 있기 때문에 전송시 UTF-8 캐릭터셋을 이용해서 인코딩한 값을 서버에 전송한다.
JSP는 request 기본 객체의 setCharacterEncoding() 메서드를 사용해서 파라미터 값을 디코딩할 때 사용할 캐릭터셋을 지정할 수 있다.
 

만약 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방식 파라미터를 위한 인코딩 처리하기

톰캣에서 UTF-8이 아닌 다른 캐릭터셋을 이용해서 GET방식의 파라미터를 디코딩 하는 경우 
톰캣/conf/server.xml 파일에서 <Connector>의 useBodyEncodingForURI 속성값을 true로 지정하여 한다. 지정 시 request.setCharacterEncoding() 메서드로 지정한 캐릭터셋을 이용하여 파라미터를 올바르게 읽어 올 수 잇게 된다.

5.3 요청 헤더 정보의 처리

HTTP 프로토콜은 헤덩 정보에 부가적인 정보를 담고 있다. 

request 기본 객체는 이러한 헤덩 정보를 읽어 올 수 있는 기능을 제공하고 있다.

06. response 기본 객체

response 기본 객체는 웹 브라우저에 보내는 응답정보를 담는다. 
response 기본 객체는 다음 기능을 제공한다.
- 헤더 정보 입력
- 리다이렉트 하기

6.1 웹브라우저에 헤더 정보 전송하기

response 기본 객체는 응답 정보에 헤더를 추가하는 기능을 제공한다. 헤더 관련 메서드는 다음과 같다.


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

HTTP는 웹 브라우저가 응답 결과를 캐시 할 것인지에 대한 여부를 설정할 수 있다. 응답 헤더에 관련된 헤더는 다음과 같다.


다음은 캐시를 보관하지 않도록 설정하는 코드이다.

위 코드에서 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

01.웹과 웹프로그래밍

01. URL(Uniform Resource Locator)

http://         www.jihoon.co.kr  /html/category/ ?xzone=ctrl1^html
프로토콜  /      서버이름         /     경로       /       쿼리문자열


프로토콜 : 웹브라우저가 서버와 사용할 규칙

서버이름 : 서버이름

경로 : 웹페이지 상세 주소

쿼리문자열 : 추가로 서버에 송신하는 데이터


02. 웹브라우저와 웹서버

단계별 과정

1 URL의 IP주소 DNS서버에 요청

2 IP주소 응답 

3 웹서버에 웹페이지 요청


한 서버 컴퓨터에는 여러 서버프로그램이 가동될 수 있다. 

각 서버를 구분하기 위해서 IP주소와 함께 포트번호가 부여되게 된다. 

웹서버가 사용하는 기본 포트 번호는 80이다.

프로토콜이 http://인 경우 포트를 지정하지 않으면 기본적으로 80포트로 연결한다는 것을 의미한다.

톰캣은 기본적으로 8080포트를 사용하도록 설정되어있다.


03. HTML과 HTTP

HTML(HyperText Markup Language)

대표적인 웹 문서 개발 언어
HTML표준에 따라 HTML문서로 부터 화면을 생성하는 과정을 '렌더링' 이라고 한다.

HTTP(Hypermedia Trasfer Protocol)

웹브라우저와 서버가 이미지, 동영상, 웹문서 등을 주고받을 때 사용하는 규칙

04. JSP

JSP(Java Server Pages)

서버에 요청 된 데이터에 따라 HTML, XML, JSON, 바이너리 응답을 생성하는 목적으로 JSP를 사용한다.
구동을 위해 별도의 서버프로그램(톰캣, Jetty)이 필요하다.

WAS(Web Application Server)

서버는 웹을 위한 연결, 프로그래밍 언어, 데이터베이스 연동과 같이 어플리케이션을 구현하는데 필요한 기능을 제공한다.
브라우저로부터 요청이 오면 알맞은 프로그램을 실행해 결과를 응답으로 전송한다.

02. JSP 실행

1. [톰캣폴더]/webapps/경로/파일명.jsp      -> 경로에 실행 할 JSP문서를 생성한다.
2. http://localhost:8080/경로/파일명.jsp     -> 결과를 확인한다.
※ 인코딩 옵션을 UTF-8 변경 뒤 저장하여야한다
<%@ 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

포트 확인

2017. 11. 29. 10:02

1. 포트 확인을 위해서 telnet 클라이언트 기능을 활성화한다.


윈도우10기준 -> 제어판 -> Windows 기능 -> telnet클라이언트 체크 -> 확인



2. 명령어 프롬포트에서 telnet IP주소 포트번호로 확인한다.

'IT > Tips' 카테고리의 다른 글

Excel 2010 문서 열 때 새창에서 열기  (0) 2017.12.12

+ Recent posts