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>