mjeongriver
article thumbnail
Published 2022. 12. 1. 15:29
day42-jsp TIL/JSP

1.

* application 기본 객체

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

- application 객체는 웹 어플리케이션 전반에 걸쳐서 사용되는 정보를 담고 있습니다.

 

* 생명주기

- request 객체는 요청영역마다 생성되고,

- session 객체는 브라우저별로 생성되고,

- application은 프로그램 전체에서 딱 한번 최초 가동시 생성됩니다.

 

1) 예제(1)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
    <%
    /* 
    application은 session과 사용 방법은 거의 동일하며
    생명주기가 톰캣을 stop할 때 까지 1개가 유지가 됩니다.
    */
    
    int total = 0;
    
    //값이 있으면 기존값 꺼내서 위에 total에 저장하고 total++ 
    if(application.getAttribute("total") != null) {
       total = (int)application.getAttribute("total");
    }
    total++;
    
    application.setAttribute("total", total); //저장
    
    
    %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<a href = "app_basic_ok.jsp">total 값 확인 </a>
	
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
    <%
    int total = (int)application.getAttribute("total");
    
    //삭제는 removeAttribute
    %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	app에 유지되는 total값 <%= total%>

</body>
</html>

 

2) 상대경로, 절대경로 예제

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

	<h2>path_ex01</h2>
	<!-- 
	절대 경로: 프로젝트의 전체 경로(ip 주소, port 번호를 제외한 /컨택스트경로 부터 시작)
	상대 경로: 현재 위치에서 다른 파일의 경로를 참조
	 -->
 
 <a href = "path_ex02.jsp"> ex02(상대))</a>
 <a href = "http://Localhost:8181/JSPBasic/path/path_ex02.jsp">ex02(절대))</a>
 <a href = "/JSPBasic/path/path_ex02.jsp">ex02(절대)</a>
 
</body>
</html>
<%@ 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>
	<h2>path_ex02</h2>
	<a href = "test/path_ex03.jsp"> ex03(상대)</a>
	<a href = "/JSPBasic/path/test/path_ex03.jsp"> ex03(절대)</a>
	
</body>
</html>
<%@ 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>

	<h2>path_ex03</h2>
	<a href="../path_ex01.jsp">ex01(상대)</a>
	<a href="/JSPBasic/path/path_ex01.jsp">ex01(절대)</a>
	
	<hr>
	<!-- a태그를 이용해서 session_login 페이지로 상대 경로, 절대 경로로 이동 -->
	<a href = "../../session/session_login.jsp">session_login(상대)</a>
	<a href = "/JSPBasic/session/session_login.jsp">session_login(절대)</a>
	
	<!-- a태그를 이용해서 testServlet으로 상대경로, 절대 경로로 이동 -->
	<a href = "../../banana">testServlet(상대)</a>
	<a href = "/JSPBasic/banana">testServlet(절대)</a>
	
	<!-- img 태그를 이용해서 html 폴더 안에 1.jpg 참조 -->
	<img alt="제목" src="../../HTML/1.jpg">
	
	
	
</body>
</html>

 

2. 

* 예외 페이지

- 예외 상황이 발생했을 경우 웹 컨테이너(톰캣)에서 제공되는 기본적인 예외페이지가 보여집니다.

- 개발 과정에서는 이러한 예외 페이지를 보고 어떤 에러가 발생했는지 알 수 있기 때문에 오류를 수정하는 데 도움이 됩니다.

- 그러나 사용자에게 상용 서비스를 제공하고 있는데 이러한 딱딱한 페이지가 보여진다면 사용자로 하여금 불쾌감을 일으키고, 해당 사이트에 대한 신뢰도가 하락하게 됩니다.

- 또한 코드의 일부가 노출되어 보안 측면에도 좋지 않습니다.

- 그래서 개발자가 따로 만들어 둔 에러 페이지로 유도하여 사용자에게 친숙한 페이지를 보여줍니다.

 

* HTTP 주요 응답 상태 코드

1) 404: 요청한 URL을 찾을 수 없는 경우.

2) 500: 서버측 내부 오류로 인해 페이지가 나타나지 않는 경우(java, JSP 페이지 내의 코드오류)

3) 200: 요청을 성공적으로 처리함.

 

1) 예제

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

<style>
	
	.box {
		height: 100vh;
		display: flex;
		align-items: center;
		justify-content: center;	
	}

</style>

</head>
<body>

	<div class = "box">
		요청한 페이지를 찾을 수 없습니다.
		<img alt ="제목" src="JSPBasic/HTML/1.jpg" width = "100px">		
	</div>

</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%
 	String name = request.getParameter("name");
	
	int a = name.length();
	

%>   
 
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

</body>
</html>

 

3. 포워딩 액션 태그

* JSP Action Tag - JSP 페이지 내에서 어떤 동작을 하도록 지시하는 태그입니다.

* forward vs sendRedirect

1) forward

- 요청 받은 요청객체(request)를 위임하는 컴포넌트에 요청 객체값을 동일하게 전달할 수 있습니다.

- 요청을 처리함과 동시에 해당 결과를 바로 보여줘야 하는 경우 ex) 게시판 목록에서 글 제목을 클릭했을 때 바로 내용을 보여줘야 하는 경우.

2) sendRedirect

- 요청 받은 요청객체를(request) 위임하는 컴포넌트에 전달하는 것이 아닌, 새로운 요청객체를 생성합니다.

- 요청을 처리한 다음 새로운 요청으로 작업을 해야할 경우에 사용합니다.

ex) 게시판 글 쓰기 완료 이후 해당 글의 내용이 아닌 글 목록을 보여줘야 하는 경우.

 

3) 예제(1)

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

	<form action="send_ex02.jsp" method="post">
	
	아이디: <input type="text" name = "id"><br>
	비밀번호: <input type="password" name = "pw"><br>
	<input type="submit" value = "로그인"><br>
	
	
	</form>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
response.sendRedirect("send_ex03.jsp");
%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%
    //request객체의 생명 주기는 다음 페이지까지만 유효함
    String id = request.getParameter("id");
    String pw = request.getParameter("pw");
    %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	id: <%=id %><br>
	pw: <%=pw %><br>

</body>
</html>

- null값으로 표시됨

 

4) 예제(2)

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

	<form action="forward_ex02.jsp" method="post">
	
	아이디: <input type="text" name = "id"><br>
	비밀번호: <input type="password" name = "pw"><br>
	<input type="submit" value = "로그인"><br>
	
	</form>

</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

  <%
  //포워드 이동
  //RequestDispatcher dp = request.getRequestDispatcher("forward_ex03.jsp");
  //dp.forward(request, response);
  request.getRequestDispatcher("forward_ex03.jsp").forward(request, response);
  
    
    
  %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>

	<%
	
    //forward로 넘어온 데이터 
    String id = request.getParameter("id");
    String pw = request.getParameter("pw");
   	%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	id:<%=id %><br> 
	pw:<%=pw %><br>

</body>
</html>

- 데이터가 넘어옴(데이터를 받아서 가지고 있는 request를 가지고 3번 페이지로 감) 

 

5) 예제(3)

<%@ 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>
	
	<h3>과제</h3>
	<%--
	1. form태그를 이용해서 post형식으로 이름, 국어, 영어, 수학점수을 받습니다.
	2. 2번페이지 에서는 평균을 구합니다
	3. 평균이 60이상이라면 성공페이지에 (평균점수를 출력하세요)
	4. 평균이 60이하라면 실패페이지로 리다이렉트 시키세요
	--%>
	
	<form action="forward_quiz02.jsp" method="post">
		이름:<input type="text" name="name"><br>
		국어:<input type="number" name="kor"><br>
		영어:<input type="number" name="eng"><br>
		수학:<input type="number" name="math"><br>
		<input type="submit" value="확인"><br>
	</form>
	
	
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
	
	<% 
	request.setCharacterEncoding("utf-8");
	String kor = request.getParameter("kor");
	int kor2 = Integer.parseInt(kor);
	//int kor = Integer.parseInt(request.getParameter("kor"));
    String eng = request.getParameter("eng");
    int eng2 = Integer.parseInt(eng);
    String math = request.getParameter("math");
    int math2 = Integer.parseInt(math);
	double avg = (kor2+eng2+math2)/3.0;
	
	
	if(avg >= 60){
		//평균 데이터 넘긴다.
	request.setAttribute("avg", avg);
	RequestDispatcher dp = request.getRequestDispatcher("forward_quiz03.jsp");
	dp.forward(request, response);		
	} else {
	response.sendRedirect("forward_quiz04.jsp");
	}
	
	
	%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
    <%
    
  	double avg = (double)request.getAttribute("avg");
   
    %>
    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	
	평균점수: <%=avg %>

	

</body>
</html>

'TIL > JSP' 카테고리의 다른 글

day44-jsp  (0) 2022.12.05
day43-jsp  (1) 2022.12.02
day41-jsp  (2) 2022.11.30
day40-jsp  (0) 2022.11.29
day39-jsp  (2) 2022.11.28
profile

mjeongriver

@mjeongriver

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그