개발의변화
1.JSP 구조 본문
xx.jsp-> xxx_jsp.java => xxx_jsp.class=> xxx_jsp.obj(자바 환경에서 나온 결과물을 동작) => HTML
웹 컨테이너 => WAS(web application server) (웹컨테이너(Tomcat)) : 기계가 개발자 코드 이해하게 만듬
Web폴더가 Webcontainer역할이라고 보면 됨
루트폴더 오른쪽 마우스 클릭하여 jsp 파일 생성 -> jsp는 웹컨테이너에 포함되므로 webcontent폴더에 넣음
<%--
Created by IntelliJ IDEA.
User: soo
Date: 2023/06/08
Time: 2:56 PM
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
$END$
<a href="./Hello.test" methods="get">Servlet으로 넘어갑니다.</a>
</body>
</html>
<%--HTML파일에 jsp를 넣는 것라서 합쳐서 만든 것--%>
<%--여기에서 jsp를 추가하면 된다--%>
<%--body에 코딩 가능함--%>
동적인 파일일 때 이 파일 이 어떤지 지시어다 맨위에
실제로 서버에서 구동하는 법
런버튼 클릭
톰캣서버 7부턴가 8부터 코드가 수정되면 조금 시간 지나면 바뀜
servlet
웹 컨테이너에서 컴파일 해서 response로 사용자에게 응답함
web.xml, metainf, webinf
servlet => 순수 자바파일
servlet파일 작성
printwriter 출력의 객체
PrinterWriter out = response.getWriter();
out.print("<html>");
PrinterWrite out 값에 response.getWriter()를 할당해주면
OUT객체가 Print메소드호출하면 태그형성
urlmapping => url주소에 /이름 으로 들어가는 거임
Servlet 맵핑: 외부에서 요청하기 쉽도록 특정문자를 이용해서 맵핑
jsp : 뷰에 해당하는 부분
servlet: 컨트롤러나 모델
servlet 맵핑 : 간결한 맵핑 http://localhost:8080/sdsfds/SE
브라우저에서 servlet
Web.xml파일을 이용한매핑
<servlet>
<servlet-naeme>servletEx</servlet-name>
<servlet-class>com.servlet.ServletEx</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>servletEx</servlet-name>
<url-pattern>/SE</url-pattern>
</servlet-mapping>
/SE로 매핑한다
java annotation 이용한 매핑
@WebServlet(name = "CalcServlet2", value = "/CalcServlet2")
사용자가 서버에게 데이터 요청할 때
Httpservletrequest
서버가 사용자게 데이터 응답할 때
HttpServletResponse
http servlet -> servlet
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
$END$
<a href="./Hello.test" methods="get">Servlet으로 넘어갑니다.</a>
</body>
</html>
%@는 지시어
%!는 스크립트 요소(선언부)
<%= str1 %> 스크립트 요소(표현식)
1.3 지시어
JSP페이지를 자바코드로 변환하는데 필요한 정보를 JSP엔진에 알림
<%@ 지시어종류 속성1="값" 속성2="값2" .... %>
page 지시어: JSP 페이지에 대한 정보를 설정
include 지시어: 외부 파일을 현재 jsp페이지에 포함
taglib 지시어: 표현 언어에서 사용할 자바 클래스나 JSTL선언
<%@ page lanauage="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
language: 스크립팅언어는 자바를 사용
contentType: 문서의 타입, 즉 MIME타입은 text/html이고 캐릭터셋은 UTF-8
pageEncoding: 소스코드의 인코딩 방식은 UTF-8입니다.
Import 속성
JSP파일에서도 필요한 클래스가 있으면 import해와야 한다
<%@ page import= "java.text.SimpleDateFormat" %>
<%--
Created by IntelliJ IDEA.
User: soo
Date: 2023/06/14
Time: 1:23 PM
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import ="java.text.SimpleDateFormat" %>
<%@ page import ="java.util.Date" %>
<html>
<head>
<title></title>
</head>
<body>
<%
Date today = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-mm-dd");
String todayStr = dateFormat.format(today);
out.println("오늘 날짜 : " + todayStr);
%>
</body>
</html>
import <%@ %>로 자바 모듈을 가지고 옴
가지고 온 모듈을 활용하여 <% %>로 바디에서 활용함 println으로 생성
<%@ page contentType="text/html;charset=UTF-8" language="java" errorPage="isErrorPage.jsp" %>
<html>
<head>
<title>Title</title>
</head>
<body>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" isErrorPage="true" %>
<html>
<head>
<title>Title</title>
</head>
<body>
</body>
</html>
에러페이지설정 errorPage = "isErrorPage.jsp"
에러페이지에는 true를 설정해야만 에러 내용 넘겨받을 수 있음 isErrorPage="true"
buffer, autoFlush 속성
JSP파일은 서블릿 코드로 변환된 후 컴파일되어 class파일로 만들어집니다. 이를 실행한 결과물을 HTML형태로 웹 브라우저에 보내 최종적으로 화면에 출력
버퍼란 네트워크로 영상 데이터를 전송할 떄, 작은 단위로 여러 번 전송하는 것보다 큰 단위로 묶어서 한 번에 보내는 편이 훨씬 효율적이기 때문에 버퍼라는 임시 저장소를 두어 데이터들이 충분히 쌓일 때까지 기다림
-> 만약 포워드(페이지 전달)와 에러 페이지 처리를 할 수 있다. JSP가 생성한 결과는 일단 버퍼에 저장
Include 지시어
반복되는 부분을 별도의 파일에 작성해두고 필요한 페이지에서 include 지시어로 포함시킬 수 있다
<%@ include file ="포함할 파일의 경로"%>
<%@ page import ="java.time.LocalDateTime" %>
<%@ page import ="java.time.LocalDate" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
LocalDate today = LocalDate.now();
LocalDateTime tomorrow = LocalDateTime.now().plusDays(1);
%>
이 파일 활용해서
<%@ include file ="includeFile.jsp"%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
out.println("오늘 날짜 : " + today);
out.println("<br/>");
out.println("내일 날짜 : " + tomorrow);
%>
</body>
</html>
나타냄
1.4 스크립트 요소(Script Elements)
1.4.1 선언부(Declaration)
선언부에서는 스크립틀릿이나 표현식에서 사용할 멤버 변수나 메서드를 선언한다. 서블릿으로 변환 시 _jspService()메서드 '내부'에 그대로 기술
<%! 메서드 선언 %>
1.4.2 스크립틀릿(Scriptlet)
JSP 페이지가 요청을 받을 때 실행해야 할 자바 코드를 작성하는 영역, 서블릿으로 변환 시 _jspService()메서드 '내부' 그대로 기술
<% 자바 코드 %>
스크립틀릿에 메서드를 선언한다면 _jspService() 내부에 또 다른 메서드를 선언한 꼴로 에러를 발생, 즉 스크립틀릿에서는 선언부에서 정의한 메시지만 호출 할 수 있다.
1.4.3 표현식(Expression)
<%= 자바 표현식 %>
프로그래밍 언어에서 표현식은 '실행 결과로 하나의 값이 남는 문장'
상수,변수,연산자를 사용한 수식, '반환값이 있는' 메서드 호출 등이 모두 표현식에 속한다.
JSP의 표현식도 이와 마찬가지로, 주로 변수의 값을 웹 브라우저 화면에 출력할 때 사용한다.
예제
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%!
public int add(int num1, int num2) {
return num1 + num2;
}
%>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
int result = add(10,20);
%>
덧셈 결과 1: <%= result %> <br/>
덧셈 결과 2: <%= add(30,40) %>
</body>
</html>
선언부를 <%! %>통해 메서드를 선언하고
body <% %>를 통해 스크립틀릿으로 선언부 메서드를 활용한다
표현식으로 <%= %>을 사용해 값을 간단하게 출력한다