실행 중 오류가 발생할 경우 전용 예외 처리 페이지를 설정하여 사용자 친화성 향상
일반 페이지
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"
errorPage="addException.jsp" %> <%-- 실행 중 오류 발생 시 이동할 에러페이지 --%>
<%
/* 내용 */
%>
<!DOCTYPE html>
<html>
<head>
<title>제목</title>
</head>
<body>
<!-- 내용 -->
</body>
</html>
에러 페이지
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"
isErrorPage="true" %>
<!DOCTYPE html>
<html>
<head>
<title>에러 페이지</title>
</head>
<body>
<!-- 에러 안내 -->
<a href='add.html'>다시 하기</a> <!-- 예외발생 후 이동할 링크 -->
</body>
</html>
404: 존재하지 않는 JSP 페이지 요청
500: 컨테이너에서 JSP 페이지 처리 중 오류 발생
WebContent \ err \ error_???.jsp
예외처리 JSP 파일 폴더 생성
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<!--
<error-page>
<error-code>오류코드</error-code>
<location>오류 페이지 위치</location>
</error-page>
-->
<error-page>
<error-code>404</error-code>
<location>err/error_404.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>err/error_500.jsp</location>
</error-page>
</web-app>
pro12/WebContent/err/error_404.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>404 예외 처리 페이지</title>
</head>
<body>
<h1>요청한 페이지는 존재하지 않습니다.</h1>
</body>
</html>
pro12/WebContent/err/error_500.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>500 예외 처리 페이지</title>
</head>
<body>
<img src="../image/duke.png" /><br>
<h1>죄송합니다.서비스 실행 중 오류가 발생했습니다.</h1>
<h1>잠시 후 다시 시도해 보세요.</h1>
</body>
</html>
JSP 페이지에 errorPage 속성 지정 + xml <error-page> 지정
동시 발생 시 errorPage 속성 우선
xml에 등록하는 웹 애플리케이션 첫 화면 (홈페이지)
컨텍스트 이름만으로 간단하게 요청 가능
브라우저에서 일일이 각 파일을 요청할 필요 없음
여러 개 등록 시 첫번째 파일부터 차례로 찾아서 보여줌
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<!--
<welcome-file-list>
<welcome-file>jsp 또는 html 파일 이름1</welcome-file>
<welcome-file>jsp 또는 html 파일 이름2</welcome-file>
...
</welcome-file-list>
-->
<welcome-file-list>
<welcome-file>/test02/main.jsp</welcome-file>
<welcome-file>/test02/add.jsp</welcome-file>
<welcome-file>/test02/add.html</welcome-file>
</welcome-file-list>
</web-app>
스크립트 요소를 통한 데이터 조회
pro12/WebContent/test03/search.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원 검색창</title>
</head>
<body>
<!-- 데이터 입력받아 전송 -->
<form method="post" action="member.jsp">
이름:<input type="text" name="name"><br>
<input type ="submit" value="조회하기">
</form>
</body>
</html>
pro12/WebContent/test03/member.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" import="java.util.*" import="sec02.ex01.*" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<style>
h1 { text-align: center; }
</style>
<meta charset="UTF-8">
<title>회원 정보 출력창</title>
</head>
<body>
<h1>회원 정보 출력</h1>
<% request.setCharacterEncoding( "utf-8" );
/* (전송된 데이터 -> VO)를 포함하는 DAO 조회 -> membersList */
String _name = request.getParameter("name");
MemberVO memberVO = new MemberVO();
memberVO.setName(_name);
MemberDAO dao = new MemberDAO();
List membersList = dao.listMembers(memberVO); %>
<table border=1 width=800 align=center>
<tr align=center bgcolor="#FFFF66">
<td>아이디</td>
<td>비밀번호</td>
<td>이름</td>
<td>이메일</td>
<td>가입일자</td>
</tr>
<% /* 조회한 데이터 출력 */
for (int i=0; i < membersList.size(); i++) {
MemberVO vo=(MemberVO) membersList.get(i);
String id=vo.getId();
String pwd=vo.getPwd();
String name=vo.getName();
String email=vo.getEmail();
Date joinDate=vo.getJoinDate(); %>
<tr align=center>
<td><%= id %></td>
<td><%= pwd %></td>
<td><%= name %></td>
<td><%= email %></td>
<td><%= joinDate %></td>
</tr>
<% } %>
</table>
</body>
</html>
pro12/src/sec02.ex01/MemberDAO.java
package sec02.ex01;
...
public class MemberDAO {
private Connection con;
private PreparedStatement pstmt;
private DataSource dataFactory;
public MemberDAO() {
try {
Context ctx = new InitialContext();
Context envContext = (Context) ctx.lookup("java:/comp/env");
dataFactory = (DataSource) envContext.lookup("jdbc/oracle");
} catch (Exception e) { e.printStackTrace(); }
}
public List listMembers(MemberVO memberVO) {
List membersList = new ArrayList();
String _name = memberVO.getName(); //조회 요청받은 데이터(이름)
try {
con = dataFactory.getConnection();
String query = "select * from t_member ";
if((_name!=null && _name.length()!=0)) { //요청 이름 지정시
query +=" where name=?";
pstmt = con.PreparedStatement(query);
pstmt.setString(1, _name);
} else { pstmt = con.PreparedStatement(query); } //요청 이름 미지정 시
System.out.println("prepareStatememt: " + query);
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
String id = rs.getString("id");
String pwd = rs.getString("pwd");
String name = rs.getString("name");
String email = rs.getString("email");
Date joinDate = rs.getDate("joinDate");
MemberVO vo = new MemberVO();
vo.setId(id);
vo.setPwd(pwd);
vo.setName(name);
vo.setEmail(email);
vo.setJoinDate(joinDate);
membersList.add(vo);
}
rs.close();
pstmt.close();
con.close();
} catch (Exception e) { e.printStackTrace(); }
return membersList;
}
}
*자바 웹을 다루는 기술