jsp 기본 문법
1.디렉티브(Directive)
- jsp 파일에 대한 설정
<%@
으로 시작<%@ 디렉티브이름 속성="값" 속성="값"... %>
형식으로 작성
1) 종류
- page 디렉티브 : 페이지에 대한 설정
- taglib 디렉티브 : 태그 라이브러리에 대한 설정
- include 디렉티브 : 다른 jsp 파일을 포함시키고자 하는 경우 사용
2) page 디렉티브
- contentType : jsp 페이지가 변환될 문서의 타입을 설정하는 것으로 기본값은 text/html
- json 이나 xml 등을 출력하고자 하면 이 부분을 수정
- import : 패키지 이름을 줄여쓰기 위해서 사용
- session : 세션 사용 여부를 설정하는 것으로 기본값은 true
- errorPage : 에러가 발생했을 때 보여질 페이지를 설정
- isErrorPage : 스스가 에러가 발생했을 때 보여지는 페이지인지 설정하는 것인데 이 설정을 true로 설정하면 exception 객체를 사용할 수 있음
- pageEncoding : 현재 문서의 인코딩 방식
- isELIgnored : EL 사용여부를 설정
- trimDirectiveWhitespaces : 공백 제거 여부를 설정하는 기본값은 false
<!-- charset은 출력을 UTF-8
pageEncoding은 현재 문서를 UTF-8로 저장 -->
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- 소스보기를 했을 때 공백을 제거하도록 해주는 설정 -->
<%@ page trimDirectiveWhitespaces = "true"%>
<!DOCTYPE html>
<html>
<head>
2.스크립트 요소
- Model2 에서는 사용하지 않음
1) 자바코드
<% 자바코드 %>
2) 자바 내용을 출력
<%= 데이터 %>
3) static 메소드나 변수 선언
<%! 함수나 변수 선언 %>
4) jsp 파일에 java 코드나 java의 내용을 출력하는 부분이 있으면 이 코드가 먼저 수행되고 그 다음 html의 내용이 수행됩니다.
- java 내용이 html 코드보다 아래 있더라도 먼저 실행됩니다.
<body>
<h2>처음 만들어 본 jsp 파일</h2>
<p>내용수정</p>
<%
//자바코드 작성
int a = 10;
int b = 20;
int result = a + b;
System.out.println(result);
%>
<p>reslut :<%=result%></p>
</body>
</html>
3.jsp 주석
<%--내용--%>
html 코드에서는 html 주석을 javascript에서는 javascript의 주석을 css 부분에서는 css의 주석을 java 코드에서는 java 의 주석을 사용하므로 잘 사용하지는 않습니다.
java 의 주석 :
// , /* */
- html 주석 :
<!-- 주석 -->
- css 주석 :
/* */
- javascript 주석 :
// , /* */
- python의 주석 :
#
내장 객체
- jsp 파일을 만들면 처음부터 제공되는 객체
- servlet에서는 doGet이나 doPost의 전달되는 매개변수인 request 와 response로 생성해서 사용합니다.
1.종류
1) HttpServletRequest request : 클라이언트의 요청 정보를 가지고 있는 객체
2) HttpServletResponse response : 클라이언트에 출력할 정보를 가지고 있는 객체
3) JSPWriter out : html 출력 객체
4) HttpSession session : 접속한 브라우저에 대한 정보를 저장할 수 있는 객체
5) ServletContext application : 웹 애플리케이션 객체 - 1개만 생성
6) ServletConfig config :| jsp 구성 정보를 저장한 객체
7) PageContext pageContext : 현재 페이지의 데이터를 저장할 수 있는 객체
8) Object page : jsp 페이지로부터 생성된 서블릿
9) Throwable exception : 예외가 발생했을 때 예외 정보를 저장할 객체
2.request 객체
- jsp에서는 제공되고 Servlet에서는 doGet 과 doPost 메소드의 첫번째 매개변수
- 클라이언트의 정보를 저장한 내장 객체
1) 주요 메소드
String getRemoteAddr()
: 클라이언트의 IP를 리턴(로컬에서 접속하면 127.0.0.1 이나 0::0::0::0::0::0::0::1) 어떤 IP로 접속했는지 확인 할수 있다.String getMethod()
: 요청 방식을 문자열로 리턴String getRequestURI()
: 클라이언트의 전체 요청 경로 (클라이언트가 접속해서 움직이는 경로는 파일에 저장해두것이 좋습니다. 이 데이터를 분석해서 UI 개선)String getContextPath()
: 컨텍스트 경로 - 도메인String getQueryString()
: 클라이언트가 전송한 파라미터 문자열
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>request 객체</title>
</head>
<body>
<h3>접속한 클라이언트의 IP: <%=request.getRemoteAddr() %></h3>
<h3>컨텍스트 경로: <%=request.getContextPath() %></h3>
<h3>전체요청 경로: <%=request.getRequestURI() %></h3>
<%
String requestURI = request.getRequestURI();
String contextPath = request.getContextPath();
//위에서 requestURI에서 contextPath를 제외한 부분 생성
//문자열 잘라내기 - 기호(split) 또는 위치(substring)
String command = requestURI.substring(contextPath.length()); %>
<!-- Controller 패턴을 이용할 때 이렇게 잘라서 라우팅을 합니다. -->
<p>전체요청경로에서 contextPath를 제외한 부분:<%=command %></p>
</body>
</html>
2) parameter 처리
- parameter: 클라이언트가 서버에게 전송하는 데이터
파라미터 전송방식(중요)
get
- 파라미터를 URL 뒤에 ?이름=값&이름=값... 형식으로 붙여서 전송하는 방식
- 자동 재 전송 기능이 있음
- 값의 길이에 제한이 있음 - 255자로 제한
- 보안기능이 없음 - 파라미터가 브라우저에 노출
post
- 파라미터를 Header에 숨겨서 전송하는 방식
- 값의 길이에 제한이 없고 보안기능도 있음
- 자동 재 전송 기능이 없음
- put 과 delete도 같은 방식인데 작업의 종류에 따라 구분하기 위해서 post는 삽입에서 put은 수정에서 delete는 삭제 작업에 이용하는 것을 권장
- 예전 브라우저들이 post 만 지원하기 때문에 아직도 put 과 delete보다는 post로 대부분 처리
- 전송할 때 비밀번호, textarea, file 이 있는 경우는 반드시 post를 사용
- 최근에는 form 의 데이터는 거의 무조건 post로 전송하는 것을 권장
- 검색어 입력 form의 경우 작업 자체가 검색이 목적이기 때문에 이 경우만 예외적으로 get 방식으로 전송
put
- 파라미터를 Header에 숨겨서 전송하는 방식
delete
- 파라미터를 Header에 숨겨서 전송하는 방식
호환성 문제로 put, delete 가 안되는 경우가 발생하여 버전으르 낮추는 방법도 고민해보자
최신버전이 능사가 아니다. 나는 볼수있겠지만 다른사람들은??