놀코에 오신 것을 환영합니다.

놀아보자 코드랑

KOSTA/WEB

21.06.22 - View, JSP

놀코 2021. 6. 22. 15:08

깃허브

https://github.com/sblee1031/Kosta/tree/main/ORACLE_DB_THEOTY/Oracle_DB_project/myweb

 

sblee1031/Kosta

KOSTA_219. Contribute to sblee1031/Kosta development by creating an account on GitHub.

github.com


응답의 주체는 JSP가 된다. 꼭 Servlet에서 응답을 받아야함. 

Servlet : 제어, 비지니스로직 호출, 결과값 도출 , jsp페이지로 이동.

forward() : request.getRequestDispatcher는 기존에 전달받은 httpRequest, httpResponse 객체를 전달시킨다.

-> 서버쪽에서의 페이지 이동. 주소변경X 

include() : request.getRequestDispatcher는 기존에 전달받은 httpRequest, httpResponse 객체를 전달하고, 다시 현재 위치로 돌아오게 된다.

-> 기존 1페이지에서 2페이지로 이동 후 다시 1페이지로 돌아옮.

redirect() : response.sendRedirect(); 

-> 주소URL 변경.

redirect 흐름도


* 비지니스 로직 : 가장 중요한 로직해당

비지니스 로직 흐름도

 


View

M 모델 : 비지니스로직
V 뷰 : JSP
C 컨트롤러 : Servlet


JSP 라이프 사이클

 

jsp 라이프 사이클

* jsp 객체 소멸되는 시점은 JSP 코드 변경시 -  _jspDestroy()호출 됨.

 

JSP 구성 요소

jsp 구성요소

 

jsp 문법

scripting.jsp
<%@ 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>
<% int i=9; %> <!-- Scriptlet -->
<%i++; %>
<%out.print("i변수의 값은 : "+i); %>
<hr>
지역변수 i변수 값은 : <%=i %> <!--Expression 표현 -->
<hr>
<%! int i; %> <!-- Declaration 선언 -->
멤버 변수값은 : <%=this.i %>
<hr>
<%//자바 주석문 %>
<!-- html 주석문 -->
<%-- jsp 전용 주석문 : 퍼포먼스 향상에 기여됨. --%>
</body>
</html>
   //scripting.jsp 컴파일 후 변수들↓ 내장변수, Default Object
   
   final javax.servlet.jsp.PageContext pageContext;
    javax.servlet.http.HttpSession session = null;
    final javax.servlet.ServletContext application;
    final javax.servlet.ServletConfig config;
    javax.servlet.jsp.JspWriter out = null;
    final java.lang.Object page = this;
    javax.servlet.jsp.JspWriter _jspx_out = null;
    javax.servlet.jsp.PageContext _jspx_page_context = null;

score.jsp

<%@page import="java.text.DecimalFormat"%>
<%@page import="java.text.SimpleDateFormat" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"%>

	
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>별점화면</title>
</head>
<body>
<% String score = request.getParameter("score");
int intScore = Integer.parseInt(score);

%>
<%!int member_count;
int total; %>

<%
if(score==null || score =="") {
	out.print("다시 별점을 선택해주세요.");
}else{
	out.print("선택한 별점은 "+request.getParameter("score")+ " 점 입니다.");
	member_count += 1;
	this.total += intScore;
}
%><br>
<hr>
<%out.print("전체 별점은 "+ total+ " 점 입니다."); %><br>
<%
double avg = (double)total/member_count;
out.print("평점은 "+ avg+ " 점 입니다."); 
%>
<%DecimalFormat df = new DecimalFormat("0.0"); %>
<br>
평점은 약 <%=df.format(avg)%> 입니다.
<br>
<%out.print("전체 참여자 "+ member_count+ " 명 입니다."); %>


 <br>
<a href="score.html">별점주기</a>
</body>
</html>

 

Directive Element내에 pagedirective

jspservice에는 IOException이 throw 되어있기에 추가 excetion는 추가 하지 않아도됨.


pagedirective.jsp (부모페이지)

<%@page import="java.io.FileNotFoundException"%>
<%@page import="java.io.FileInputStream"%>
<%@page errorPage="err.jsp" %>
<%@page buffer="1kb" %> //버퍼크기
<%@ 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>
<%
for(int i=1; i<=100; i++){
%> <div><%=i %> </div>
<%
}
%>

<%
String fileName = "a.txt";
FileInputStream fis = null;
fis = new FileInputStream(fileName);
%>

<%-- <%
String fileName = "a.txt";
FileInputStream fis = null;
try{
fis = new FileInputStream(fileName);
}catch(FileNotFoundException e){
	request.setAttribute("exception", e);
	String path = "err.jsp";
	RequestDispatcher rd = request.getRequestDispatcher(path);
	rd.forward(request, response);
}
%> --%>


<%-- <%//a.txt 파일 내용 1바이트 읽기
String fileName = "a.txt";
FileInputStream fis = null;
try{
fis = new FileInputStream(fileName);
}catch(FileNotFoundException e){
%>
<h1> 오류 내용<%=e.getMessage() %></h1>
<%
}
%> --%>
<h1>END</h1>
</body>
</html>

err.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"
    isErrorPage="true" //true 상태에서는 에러상태를 부모객체로부터 가져옴
    %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body style="background-color:yellow">
<h3><%=exception.getMessage() %></h3>

</body>
</html>

페이지 지시자에 isErrorPage="true" 지정시 exception상태를 부모객체로부터 가져옴

* jsp페이지에 import 하기

*jsp페이지 buffer설정 (기본값 8kb) -> 페이지 내부 에러시, buffer확장하여 진행.

* jsp페이지에 errpage 설정하기


jsp:include page=" * "

jsp: : include -> rd.include(    ,    ) 와 같음

<%@include file="*.*"%> .java파일이 생성시 포함됨.

 

menu.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%String msg = "WELCOME"; %>
<div>
<a href = "#">메뉴1</a>
<a href = "#">메뉴2</a>
</div>

 

menua.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>menua.jsp</title>
</head>
<body>
<%@include file="menu.jsp" %>
<h1><%=msg %></h1>
<%
//String msg = "안녕하세요";%>
</body>
</html>

 

menub.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>menub.jsp</title>
</head>
<body>
<jsp:include page="menu.jsp"/>
<h1><%-- <%=msg %> --%></h1>
<%
//String msg = "안녕하세요";%>
</body>
</html>