[JSP] 예외처리, 홈페이지, 조회

sang·2024년 3월 14일

예외처리

실행 중 오류가 발생할 경우 전용 예외 처리 페이지를 설정하여 사용자 친화성 향상

일반 페이지

<%@ 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 페이지 처리 중 오류 발생

xml 예외 페이지 지정

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 속성 우선



welcome

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>


JSP 데이터 조회

스크립트 요소를 통한 데이터 조회

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;
  }
}


*자바 웹을 다루는 기술

profile
CS 메모장

0개의 댓글