-> http.://localhost:7777/BackEndProject/Hello
=>htp.://server:port/context-root/url-pattern(mapping)
서블릿의 url -mapping 값
@WebServlet("/Hello")
-> request.getRemoteAddr();
1. <%@ directive{지시어 속성} %>
2. 선언문(<%! %>)
jsp 멤버필드나 메소드
멤버변수 선언이나 메소드를 선언하는 영역
<%! java code %>
3. 스크립트릿(<% %>)
client 요청 시 매번 호출 영역(service)
최소한으로 사용
<% java code %>
4. 표현식(<%= %>)
데이터를 브라우저에 출력할 때때 사용
<% = 문자열 %>
5. 주석
코드 상에서 부가 설명을 작성
html의 주석과 jsp주석의 차이점은
→ jsp주석은 서블릿으로 변환될때 포함시키지 말아라는 의미
→ 소스를 봐도 보이지 않는다.
<%— 주석 할 코드 —%>
requset
html폼 요소의 선택 값 등 사용자 입력 정보를 읽어올 때 사용
response
사용자 요청에 대한 응답을 처리하기 위해 사용
session
클라이언트에 대한 세션 정보를 처리하기 위해 사용
Request, session 아주 중요 !!
Request는 1회성 이번에 쓰고 버려질것을 저장하는것이 용이
Session 은 공통적으로 쓸 수 있다. (session이 false 인곳을 제외하고)
Application은 어디에서든 사용 할 수 있다.
Redirect
->클라이언트가 새로 페이지를 요청한 것과 같은 방식으로 페이지가 이동됨.request.response가 유지X(새로 만들어짐)
-> 이동한 url이 화면에 보인다.
->response.sendRedirect(request.getContextPath() + "/guestbook/writesuccess.jsp");
Forward
-> 이전에 있던 페이지의 request,response가 유지(바로 다음 페이지에서만 유지된다)
-> 이동한 url이 화면에 안보인다(사용자는 이동했는지 모름)
->pageContext.forward("이동할 페이지");
-> <jsp:forwar page ="이동할 페이지"/>;
->response.sendRedirect("/guestbook/writesuccess.jsp");
Model
→ Business logic / Data (java) → ex) register(id,pwe,name) ⇒ DTO
Controller
→ View-Model 사이의 상호동작 관리 (java)
View
→ GUI / design / Presentation (jsp)
http는 한번 접속을 하고 나면 끊기 때문에 정보를 저장 할 수 없다 → 이용하는것이 cookie, session
Cookie / session → server쪽에 Client 정보를 식별할 수 있는 저장하는게 목적!
세션은 쿠키를 기반하고 있지만, 사용자 정보 파일을 브라우저에 저장하는 쿠키와 달리 세션은 서버 측에서 관리합니다.
서버에서는 클라이언트를 구분하기 위해 세션 ID를 부여하며 웹 브라우저가 서버에 접속해서 브라우저를 종료할 때까지 인증상태를 유지합니다.
물론 접속 시간에 제한을 두어 일정 시간 응답이 없다면 정보가 유지되지 않게 설정이 가능 합니다.
사용자에 대한 정보를 서버에 두기 때문에 쿠키보다 보안에 좋지만, 사용자가 많아질수록 서버 메모리를 많이 차지하게 됩니다.
즉 동접자 수가 많은 웹 사이트인 경우 서버에 과부하를 주게 되므로 성능 저하의 요인이 됩니다.
<%@= errorPage="" %>
-예외 발생시 어떤 페이지를 보여줄 것인지 지정할 수 있다.
<%@ page isErrorPage = "true" %>
-isErroPage = true : 에러페이지로 허락한다.
servlet은 웹에서 돌아가는 자바라고 생각!
컴파일과 인터프리트
CPU는 어셈블리나 바이너리코드라고 불리는 특정 명령만을 실행시킬 수 있습니다.즉, CPU가 실행하는 프로그램들은 이러한 언어로 변환되어 실행되어야 한다는 의미기도 합니다.
C++
, Forttarn
과 같은 언어는 한 번에 모든 코드를 읽고 해석PHP
, Perl
, python
과 같은 언어는 한 번에 한 줄의 코드만 읽고 해석Java
는 흔히들 컴파일 언어
라고 잘못 알고 있는 경우가 많은데 실은 인터프리터 언어
입니다.그렇기에 한 번에 한 줄씩 수행하여 느리다는 인터프리터의 단점을 그대로 가지고 있습니다.
Java
는 여기서 절충안을 찾으려고 시도합니다.바이트 코드를 JIT Complier
한 줄씩 읽으면서 바이너리 코드
로 변환
을 하는 방식을 채택했습니다.여기까지는Java Interpreter
와 크게 다를게 없지만 JVM
의 CodeCache
에 Caching
해놓습니다.그렇기에, 같은 코드가 나오더라도 매번 바이너리 코드로 해석하는 작업을 하는 Java Interpreter
와 달리,같은 코드가 나온다면 다시 번역할 필요 없이 Code Cache에서 해당 바이너리 코드를 가져와 사용합니다.
자바 서브릿은 자바를 사용하여 웹페이즈를 동적으로 생성하는 서버측 프로그램
서블릿과 JSP와 비슷한점이 있지만 JSP가 HTML문서 안에 java를 포함하고 있는 반면 서블릿은 java안에 HTML을 포함하고 있다.
장점
플랫폼 독립성
서버 독립성
확장성
개발 용이개발 용이
서블릿 관련 패키지
javax.servlet - 일반 서비스를 위한 서블릿 패키지
javax.servlet.http - http서비스를 위한 패키지javax.servlet.http - http서비스를 위한 패키지
Code
package com.hello;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//http://localhost:7777/BackEndProject/Hello
//http://server:port/context-root/url-pattern
//annotation: 웹프로그램 실행시 필요한 설정 정보, 환경 정보 등을 표시
///HelloServlet: 이 서블릿의 url-mapping 값
@WebServlet("/Hello")
public class HelloServlet extends HttpServlet {
//service method: 클라이언트로부터 요청이 들어 왔을 때 응답을 만들어 내는 메소드
//request: 클라이언트로부터 서버로 들어오는 요청에 관한 정보가 담겨 있음
//response: 클라이언트로 보내는 응답에 관한 정보가 담겨 있음
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//서버에서 클라이언트로 보내는 컨텐트 타입 지정
response.setContentType("text/html;charset=utf-8");//mime
//클라이언트로 보낼 컨텐트 출력을 위한 스트림 준비
PrintWriter out = response.getWriter();
out.print("<html><body>");
out.print("<h1>My First Servlet2</h1>");
out.print("</body></html>");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
자바 서버 페이지 는 HTML내에 자바 코드를 삽입하여 웹 서버에서 동적으로 웹페이즈를 생성하여 웹 브라우저에 돌려주는 언어이다.
자바 서버 페이지는 자바서블릿으로 변환 된 후에 실행되므로 서블릿과 거의 유사하다.
장점
웹 페이지 작성이 쉬움
웹 디자인 도구와 같이 사용할 수 있음
비즈니스 로직(java)과 프레젠테이션(디자인 화면)의 분리가 가능
단점
디버깅이 어려움
JSP 페이지 처리 과정
Page 지시어 <%@ page { 지시어 속성} %>
웹 컨테이너 jsp를 서블릿으로 변환할 때 이 정보들을 참조함
import를 제외하고 다른 속성들은 한번만 나와야한다
Include 지시어(복붙 효과)
외부 데이터(html 문서 , jsp 페이지)를 jsp 페이지에 포함 시키기 위해 사용하는 지시어
<%@ include file = "in,jsp"%>
코드
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.ArrayList, java.util.Date" %>
<%@ page import="java.awt.Button"%>
<!-- jsp 파일 안에서 자바를 사용하려면 반드시 import 속성으로 지정해줘야 함 -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>My First JSP</h1>
THIS iS MY FIRST JSP PAGE
<!-- include 지시어 : 복사해서 붙여 넣기 -->
<%@ include file="in.jsp" %>
<hr>
<%@ include file="in.jsp" %>
</body>
</html>
선언(Declaration)
jsp 멤버필드나 메소드
멤버변수 선언이나 메소드를 선언하는 영역
형식
<%! 멤버변수와 method 작성 %>
스크립트릿(scriptlet)
client 요청 시 매번 호출 영역(service)
최소한으로 사용
형식
<% java code %>
표현식(expression)
데이터를 브라우저에 출력할 떄 사용
형식
<% = 문자열 %>
주석
코드 상에서 부가 설명을 작성
html의 주석과 jsp주석의 차이점은 → jsp주석은 서블릿으로 변환될때 포함시키지 말아라는 의미 → 소스를 봐도 보이지 않는다.
형식
<%— 주석 할 코드 —%>
Page Directive
컨테이너에게 현재 jsp페이지를 어떻게 처리할 것인가에 대한 정보를 제공한다.
형식
<%@ page arrt1="val1" attr2="val2" %>
session 기본 값 → true 바로 사용 가능하다.
exception은 isErrorPage가 true일 때만 사용 가능
⇒ 바구니
Request, session 아주 중요 !!
Request는 1회성 이번에 쓰고 버려질것을 저장하는것이 용이
Session 은 공통적으로 쓸 수 있다. (session이 false 인곳을 제외하고)
Application은 어디에서든 사용 할 수 있다.
redirect 인 경우는
response.sendRedirect(request.getContextPath() + "/guestbook/writesuccess.jsp");
Forward 인 경우는 (바로 다음페이지에만 유지가 됨)
→ request를 같은것을 쓴다.
response.sendRedirect("/guestbook/writesuccess.jsp");
예 )
<%= request.getParameter("num")%>
<c:out value = "${param.num}"/>
${param.num}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>EL test</h1>
${3+5 }<br>
${2 eq 6 } <br>
${param.num }
</body>
</html>
표준화된 태그 라이브러리
JSTL 구현
taglib 지시어
<%@ taglib prefix ="c" uri = "http://java.sun.com/jsp/jstl/core" %>
→ 선언을 하고 나면 원래 c에 uri가 들어와야하지만 그것이 너무 길기 떄문에 접두어가 나온다
core Library
jsp를 이용해서 구성 할 수 있는 Web Application Architecture 는 크게 model1 , model1로 나뉜다.
jsp가 client 요청에 대한 logic 처리과 response page(view)에 대한 처리를 모두 하느냐, 아니면 response page에 대한 처리만 하는지가 가장 큰 차이점
모든 처리를 jsp 페이지에서 하는것이 아니라, client 요청에 대한 처리는 servlet이, logic 처리는 java class, client에게 출력하는 response page를 jsp가 담당한다.
구현하려는 전체 어플리케이션을 모델 - 뷰 - 컨트롤러(Model -View - Controller)의 구조로 나누어 구성
→ 만들 때는 어렵더라도 사용하는 사람이 유지 보수를 편하게 가능하다
비즈니스 로직과 디자인 분리
비즈니스 로직의 재사용 : 디자인의 변경에 영향을 받지 않음
서블릿/jsp 에서 비즈니스 로직의 분리가 필요
장점
출력을 위한 view 코드와 로직 처리를 위한 java코드가 분리 되었기 떄문에 jsp는 model1에 비해 코드가 복잡하지 않다.
화면 단과 logic단이 분리 되었기에 분업이 용이해 졌다.
기능에 따라 code가 분리 되었기 때문에 유지보수가 쉬워졌다.
확장성이 뛰어나다
단점
구조가 복잡하여 초기 집입이 어렵다.
개발 시간의 증가로 개발비용 증가
Model
→ Business logic / Data (java) → ex) register(id,pwe,name) ⇒ DTO
Controller
→ View-Model 사이의 상호동작 관리 (java)
View
→ GUI / design / Presentation (jsp)
http는 한번 접속을 하고 나면 끊기 때문에 정보를 저장 할 수 없다 → 이용하는것이 cookie, session
Cookie / session → server쪽에 Client 정보를 식별할 수 있는 저장하는게 목적!
브라우저에 저장되는 텍스트 형식의 데이터 저장되는 텍스트 형식의 데이터
coockie → server
쿠키가 서버에 요청을 보내면 서버에서 cookie를 식별할 수 있는 정보를 덧 붙여서 전송 → 받은것을 저장