5월 ~ 7월) 웹/servlet
54Day - GuestDTO(sql) &$$ Guest Select Servlet & Guest insert Form Servlet & Guest insert servlet & Guest Select Servlet / $$ [jsp]hello.jsp / script_element.jsp / counter.jsp / directive.jsp / page_import/ web_xml/ error 400~500
첼로그
2023. 6. 22. 19:41
Guest(sql)
//방명글 게시글을 저장하기 위한 GUEST 테이블 생성
//create table guest(num number primary key, writer varchar2(50), subject varchar2(200)
// , content varchar2(1000), regdate date);
//방명글 게시글의 글번호를 제공하기 위한 시퀸스 생성
//create sequence guest_seq;
GuestDTO
package xyz.itwill.dto;
//방명글 게시글을 저장하기 위한 GUEST 테이블 생성
//create table guest(num number primary key, writer varchar2(50), subject varchar2(200)
// , content varchar2(1000), regdate date);
//방명글 게시글의 글번호를 제공하기 위한 시퀸스 생성
//create sequence guest_seq;
/*
이름 널? 유형
------- -------- --------------
NUM NOT NULL NUMBER - 방명록 게시글 번호 : 시퀸스로 제공되는 자동 증가값 저장
WRITER VARCHAR2(50) - 방명록 게시글 작성자 : 사용자 입력값을 전달받아 저장
SUBJECT VARCHAR2(200) - 방명록 게시글 제목 : 사용자 입력값을 전달받아 저장
CONTENT VARCHAR2(1000) - 방명록 게시글 내용 : 사용자 입력값을 전달받아 저장
REGDATE DATE - 방명록 게시글 작성날짜 : 시스템의 현재 날짜와 시간 저장
*/
//GUEST 테이블의 행을 표현하기 위한 클래스
public class GuestDTO {
private int num;
private String writer;
private String subject;
private String content;
private String regdate;
public GuestDTO() {
// TODO Auto-generated constructor stub
}
public GuestDTO(int num, String writer, String subject, String content, String regdate) {
super();
this.num = num;
this.writer = writer;
this.subject = subject;
this.content = content;
this.regdate = regdate;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public String getWriter() {
return writer;
}
public void setWriter(String writer) {
this.writer = writer;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getRegdate() {
return regdate;
}
public void setRegdate(String regdate) {
this.regdate = regdate;
}
}
&$$ Guest Select Servlet
package xyz.itwill.guest;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import xyz.itwill.dao.GuestDAO;
import xyz.itwill.dto.GuestDTO;
//GUEST 테이블에 저장된 모든 행을 검색하여 클라이언트에게 전달하여 응답하는 서블릿
// => [글쓰기] 태그를 클릭한 경우 방명록 게시글 입력페이지(/guest/writeForm.itwill)로 이동
// => 방명록 게시글의 [변경] 태그를 클릭한 경우 방명록 게시글 입력페이지(/guest/modifyForm.itwill)로 이동 - 글번호 전달
@WebServlet("/guest/list.itwill")
public class GuestSelectServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out=response.getWriter();
//GUEST 테이블에 저장된 모든 행을 검색하여 List 객체로 반환하는 DAO 클래스의 메소드 호출
List<GuestDTO> guestList=GuestDAO.getDAO().selectGuestList();
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<meta charset='UTF-8'>");
out.println("<title>Servlet</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>방명록 글목록</h1>");
out.println("<hr>");
out.println("<table width='1000'>");
out.println("<tr>");
out.println("<td align='right'>");
out.println("<button type='button' onclick='location.href=\"writeForm.itwill\";'>글쓰기</button>");
out.println("</td>");
out.println("</tr>");
if(guestList.isEmpty()) {//List 객체에 요소가 없는 경우 - 검색행이 없는 경우
out.println("<tr>");
out.println("<td>");
out.println("<table border='1' cellspacing='0' width='100%'>");
out.println("<tr>");
out.println("<td align='center'>검색된 방명록 게시글이 하나도 없습니다.</td>");
out.println("</tr>");
out.println("</table>");
out.println("</td>");
out.println("</tr>");
} else {//List 객체에 요소가 있는 경우 - 검색행이 있는 경우
for(GuestDTO guest : guestList) {
out.println("<tr>");
out.println("<td align='center'>");
out.println("<table border='1' cellspacing='0' width='100%'>");
out.println("<tr>");
out.println("<th width='150'>작성자</th>");
out.println("<td width='200' align='center'>"+guest.getWriter()+"</td>");
out.println("<th width='150'>작성일자</th>");
out.println("<td width='500' align='center'>"+guest.getRegdate()+"</td>");
out.println("</tr>");
out.println("<tr>");
out.println("<th width='150'>제목</th>");
out.println("<td width='650' colspan='3'>"+guest.getSubject()+"</td>");
out.println("</tr>");
out.println("<tr>");
out.println("<th width='150'>내용</th>");
out.println("<td width='650' colspan='3'>"+guest.getContent().replace("\n", "<br>")+"</td>");
out.println("</tr>");
out.println("<tr>");
out.println("<td align='right' colspan='4'>");
out.println("<button type='button' onclick='location.href=\"modifyForm.itwill?num="+guest.getNum()+"\";'>변경</button>");
out.println("<button type='button'>삭제</button>");
out.println("</td");
out.println("</tr>");
out.println("</table>");
out.println("</td>");
out.println("</tr>");
out.println("<tr>");
out.println("<td> </td>");
out.println("</tr>");
}
}
out.println("</table>");
out.println("</body>");
out.println("</html>");
}
}
Guest insert Form Servlet
package xyz.itwill.guest;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//사용자로부터 방명록 게시글을 입력받기 위한 서블릿
// => [글저장] 태그를 클릭한 경우 방명록 게시글 삽입페이지(/guest/write.itwill)로 이동 - 입력값 전달
// => [글목록] 태그를 클릭한 경우 방명록 게시글 목록페이지(/guest/list.itwill)로 이동
@WebServlet("/guest/writeForm.itwill")
public class GuestInsertFormServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out=response.getWriter();
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<meta charset='UTF-8'>");
out.println("<title>Servlet</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>방명록 글쓰기</h1>");
out.println("<hr>");
out.println("<form action='write.itwill' method='post' name='insertForm'>");
out.println("<table>");
out.println("<tr>");
out.println("<td>작성자</td>");
out.println("<td><input type='text' name='writer'></td>");
out.println("</tr>");
out.println("<tr>");
out.println("<td>제목</td>");
out.println("<td><input type='text' name='subject'></td>");
out.println("</tr>");
out.println("<tr>");
out.println("<td>내용</td>");
out.println("<td><textarea rows='4' cols='60' name='content'></textarea></td>");
out.println("</tr>");
out.println("<tr>");
out.println("<td colspan='2'>");
out.println("<button type='button' id='saveBtn'>글저장</button>");
out.println("<button type='reset'>다시쓰기</button>");
out.println("<button type='button' onclick='location.href=\"list.itwill\";'>글목록</button>");
out.println("</td>");
out.println("</tr>");
out.println("</table>");
out.println("</form>");
out.println("<script type='text/javascript'>");
out.println("insertForm.writer.focus();");
out.println("document.getElementById('saveBtn').onclick=function() {");
out.println("if(insertForm.writer.value=='') {");
out.println("alert('작성자를 입력해 주세요.');");
out.println("insertForm.writer.focus();");
out.println("return;");
out.println("}");
out.println("if(insertForm.subject.value=='') {");
out.println("alert('제목을 입력해 주세요.');");
out.println("insertForm.subject.focus();");
out.println("return;");
out.println("}");
out.println("if(insertForm.content.value=='') {");
out.println("alert('내용을 입력해 주세요.');");
out.println("insertForm.content.focus();");
out.println("return;");
out.println("}");
out.println("insertForm.submit();");
out.println("}");
out.println("</script>");
out.println("</body>");
out.println("</html>");
}
}
Guest insert servlet
package xyz.itwill.guest;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import xyz.itwill.dao.GuestDAO;
import xyz.itwill.dto.GuestDTO;
//방명록 게시글을 전달받아 GUEST 테이블에 삽입하고 방명록 게시글 목록페이지(/guest/list.itwill)로
//이동하기 위한 URL 주소를 클라이언트에게 전달하여 응답하는 서블릿
// => 방명록 게시글 입력페이지(guest/writeForm.itwill)에서 form 태그를 사용해 post 방식으로 요청하는 서블릿
@WebServlet("/guest/write.itwill")
public class GuestInertServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//서블릿을 GET 방식으로 요청한 경우 - 비정상적 요청
if(request.getMethod().equals("GET")) {
response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED);
return;
}
//리퀘스트 메세지 몸체부에 저장되어 전달되는 값에 대한 캐릭터셋 변경
request.setCharacterEncoding("utf-8");
//전달값을 반환받아 저장
String writer=request.getParameter("writer");
String subject=request.getParameter("subject");
String content=request.getParameter("content");
//DTO 객체를 생성하여 전달값으로 필드값 변경
GuestDTO guest=new GuestDTO();
guest.setWriter(writer);
guest.setSubject(subject);
guest.setContent(content);
//DTO 객체를 전달받아 GUEST 테이블에 행을 삽입하는 DAO 클래스의 메소드 호출
GuestDAO.getDAO().insertGuest(guest);
//클라이언트에게 URL 주소를 전달하여 응답 처리
// => 클라이언트는 전달받은 URL 주소의 서블릿을 요청하여 실행결과를 응답받아 출력 - 리다이렉트 이동
response.sendRedirect("list.itwill");
}
}
Guest Select Servlet
package xyz.itwill.guest;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import xyz.itwill.dao.GuestDAO;
import xyz.itwill.dto.GuestDTO;
//GUEST 테이블에 저장된 모든 행을 검색하여 클라이언트에게 전달하여 응답하는 서블릿
// => [글쓰기] 태그를 클릭한 경우 방명록 게시글 입력페이지(/guest/writeForm.itwill)로 이동
// => 방명록 게시글의 [변경] 태그를 클릭한 경우 방명록 게시글 입력페이지(/guest/modifyForm.itwill)로 이동 - 글번호 전달
@WebServlet("/guest/list.itwill")
public class GuestSelectServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out=response.getWriter();
//GUEST 테이블에 저장된 모든 행을 검색하여 List 객체로 반환하는 DAO 클래스의 메소드 호출
List<GuestDTO> guestList=GuestDAO.getDAO().selectGuestList();
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<meta charset='UTF-8'>");
out.println("<title>Servlet</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>방명록 글목록</h1>");
out.println("<hr>");
out.println("<table width='1000'>");
out.println("<tr>");
out.println("<td align='right'>");
out.println("<button type='button' onclick='location.href=\"writeForm.itwill\";'>글쓰기</button>");
out.println("</td>");
out.println("</tr>");
if(guestList.isEmpty()) {//List 객체에 요소가 없는 경우 - 검색행이 없는 경우
out.println("<tr>");
out.println("<td>");
out.println("<table border='1' cellspacing='0' width='100%'>");
out.println("<tr>");
out.println("<td align='center'>검색된 방명록 게시글이 하나도 없습니다.</td>");
out.println("</tr>");
out.println("</table>");
out.println("</td>");
out.println("</tr>");
} else {//List 객체에 요소가 있는 경우 - 검색행이 있는 경우
for(GuestDTO guest : guestList) {
out.println("<tr>");
out.println("<td align='center'>");
out.println("<table border='1' cellspacing='0' width='100%'>");
out.println("<tr>");
out.println("<th width='150'>작성자</th>");
out.println("<td width='200' align='center'>"+guest.getWriter()+"</td>");
out.println("<th width='150'>작성일자</th>");
out.println("<td width='500' align='center'>"+guest.getRegdate()+"</td>");
out.println("</tr>");
out.println("<tr>");
out.println("<th width='150'>제목</th>");
out.println("<td width='650' colspan='3'>"+guest.getSubject()+"</td>");
out.println("</tr>");
out.println("<tr>");
out.println("<th width='150'>내용</th>");
out.println("<td width='650' colspan='3'>"+guest.getContent().replace("\n", "<br>")+"</td>");
out.println("</tr>");
out.println("<tr>");
out.println("<td align='right' colspan='4'>");
out.println("<button type='button' onclick='location.href=\"modifyForm.itwill?num="+guest.getNum()+"\";'>변경</button>");
out.println("<button type='button'>삭제</button>");
out.println("</td");
out.println("</tr>");
out.println("</table>");
out.println("</td>");
out.println("</tr>");
out.println("<tr>");
out.println("<td> </td>");
out.println("</tr>");
}
}
out.println("</table>");
out.println("</body>");
out.println("</html>");
}
}
$$ [jsp]hello.jsp
<%@page import="java.text.SimpleDateFormat"%>
<%@page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%-- 클라이언트가 JSP 문서를 요청하면 WAS 프로그램은 JSP 문서를 해석하여 JSP 문서에 대한
서블릿 클래스를 생성하고 컴파일하여 객체를 생성한 후 요청 처리 메소드를 호출해 클라이언트
요청에 대한 처리와 실행결과를 저장한 파일을 생성하여 클라이언트에게 전달하여 응답 --%>
<%-- => JSP 문서에 대한 서블릿 클래스가 이미 생성되어 있는 경우 객체를 이용하여 요청 처리 메소드 호출 --%>
<%-- => JSP 문서가 변경된 후 클라이언트에 의해 요청되면 JSP 문서를 해석하여 서블릿 클래스 생성 --%>
<%
//Java 명령 작성
Date now=new Date();
SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy년 MM월 dd일 HH시 mm분 ss초");
String displayNow=dateFormat.format(now);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP</title>
<style type="text/css">
#displayDiv {
width: 600px;
margin: 0 auto;
padding: 30px 0;
font-size: 2em;
font-weight: bold;
text-align: center;
border: 2px solid black;
}
</style>
</head>
<body>
<h1>Hello, JSP!!!</h1>
<hr>
<!-- HTML 주석 : 주석문이 클라이언트에게 전달 - 소스보기 가능 : 웹디자이너 -->
<%-- JSP 주석 : 주석문이 클라이언트에게 미전달 - 소스보기 불가능 : 웹프로그래머 --%>
<p>JSP(Java Server Page) : 서블릿보다 쉽게 웹프로그램 작성하기 위한 기술
- 스트립트 요소(Script Element), 지시어(Directive), 표준 액션 태그(Standard Action Tag)</p>
<hr>
<div id="displayDiv"><%=displayNow %></div>
<script type="text/javascript">
setInterval(function() {
location.reload();
}, 1000);
</script>
</body>
</html>
$$counter.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%-- 선언문(Declaration) : 필드 또는 메소드를 선언하는 명령을 작성하는 영역 제공 --%>
<%-- => 서블릿 클래스의 명령으로 해석 --%>
<%!
//서블릿 객체에 필요한 값을 저장하기 위한 필드
// => 필드는 서블릿 객체가 메모리에서 없어지면 자동 소멸
int count=0;
%>
<%-- 스크립틀릿(Scriptlet) : 요청을 처리하기 위한 Java 명령을 작성하는 영역 제공 --%>
<%-- => 요청 처리 메소드의 명령으로 해석 --%>
<%
//요청 처리 메소드에서 생성되어 사용되는 지역변수
// => 지역변수는 변수가 선언된 메소드 종료시 자동 소멸
//int count=0;
count++;
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP</title>
</head>
<body>
<h1>스크립트 요소(Script Element)</h1>
<hr>
<%-- out 객체 : JSP 문서의 처리결과를 저장한 파일을 생성하기 위한 출력스트림 --%>
<%-- <p>JSP 문서의 요청 횟수 = <% out.println(count); %></p> --%>
<%-- 표현식(Expression) : 값(변수값, 연산결과값, 메소드반환값)을 응답파일에 포함하기
위한 영역 제공 --%>
<p>JSP 문서의 요청 횟수 = <%=count%></p>
</body>
</html>
script_element.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP</title>
</head>
<body>
<h1>스크립트 요소(Script Element)</h1>
<hr>
<p>스크립틀릿(Scriptlet) : JSP 문서에서 Java 명령을 작성하는 영역을 표현하기 위한 스크립트
요소(요청 처리 메소드의 명령) - <% Java 명령; Java 명령; ... %></p>
<p>선언문(Declaration) : JSP 문서에서 필드 또는 메소드를 선언하는 영역을 표현하기 위한
스크립트 요소(서블릿 클래스의 필드 또는 메소드) - <%! 필드 또는 메소드 선언 %></p>
<p>표현식(Expression) : JSP 문서에서 Java 명령으로 발생되는 결과값을 출력하는 영역을
표현하기 위한 스크립트 요소(요청 처리 메소드의 명령) - <%={변수명|연산식|메소드호출}%>
</body>
</html>
$$ directive.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP</title>
</head>
<body>
<h1>지시어(Directive)</h1>
<hr>
<p>page Directive : JSP 문서에 필요한 정보를 제공하도록 지시
- <%@page 속성="속성값" 속성="속성값" ... %></p>
<p>include Directive : JSP 문서에 외부파일의 소스코드(SourceCode)를 포함하도록 지시
- <%@include file="URL" %></p>
<p>taglib Directive : JSP 문서에 태그 라이브러리 파일(커스텀 태그)을 포함하도록 지시
- <%@tablib prefix="namespace" uri="tldId" %></p>
</body>
</html>
page_countentType - * contentType
<%-- <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> --%>
<%@ page language="java" contentType="application/msword; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP</title>
<style type="text/css">
table {
border: 1px solid black;
border-collapse: collapse;
}
th, td {
border: 1px solid black;
text-align: center;
width: 200px;
padding: 2px;
}
</style>
</head>
<body>
<h1>page Directive - contentType 속성</h1>
<hr>
<p>page Directive의 contentType 속성에는 JSP 문서를 요청하여 응답 받을 수 있는 파일형태
(MimeType)와 파일의 문자형태(CharacterSet - Encoding)를 속성값으로 설정</p>
<hr>
<table>
<tr>
<th>학번</th><th>이름</th><th>주소</th>
</tr>
<tr>
<td>1000</td><td>홍길동</td><td>서울시 강남구 역삼동</td>
</tr>
<tr>
<td>2000</td><td>임꺽정</td><td>인천시 월미구 상당동</td>
</tr>
<tr>
<td>3000</td><td>전우치</td><td>수원시 팔달구 구래동</td>
</tr>
</table>
</body>
</html>
page_error.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP</title>
</head>
<body>
<h1>에러페이지</h1>
<hr>
<p>요청한 프로그램 실행시 예기치 못한 오류가 발생되었습니다.
빠른 시일내로 조치 하겠습니다.</p>
</body>
</html>
page_errorPage.jsp
<%-- <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" errorPage="page_error.jsp"%> --%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%-- JSP 문서에서 page Directive의 errorPage 속성을 이용하여 JSP 문서 실행시 예외가 발생되면
에러페이지로 응답되도록 설정할 수 있지만 JSP 문서마다 errorPage 속성을 설정해야하는 문제점 발생 --%>
<%-- WAS 프로그램에 의해 에러코드(4XX or 5XX)가 전달될 때 에러페이지로 응답되도록 설정 가능 --%>
<%-- => [web.xml] 파일에 에러코드 대신 응답될 에러페이지의 URL 주소 설정 --%>
<%-- => 프로젝트에서 작성된 모든 웹프로그램 실행시 발생되는 에러코드 대신 에러페이지로 응답 처리 가능 --%>
<%
String text="ABCDEFG";
//String text=null;
//int su=10/0;
/*
if(request.getMethod().equals("GET")) {
//클라이언트에게 400 에러코드를 전달하여 응답
response.sendError(HttpServletResponse.SC_BAD_REQUEST);
return;
}
*/
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP</title>
</head>
<body>
<h1>page Directive - errorPage 속성</h1>
<hr>
<p>page Directive의 errorPage 속성에는 JSP 문서 실행시 에러(예외)가 발생될 경우 클라이언트에게
500 상태코드 대신 응답될 웹문서의 URL 주소를 속성값으로 설정 - 클라이언트의 URL 주소 미변경</p>
<hr>
<p>문자열의 문자 갯수 = <%=text.length() %></p>
</body>
</html>
page_import.jsp
<%-- <%@page import="java.util.ArrayList, java.util.List"%> --%>
<%-- page 디렉티브의 import 속성과 속성값은 자동 완성 기능 사용 --%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%-- page 디렉티브에서 다른 속성값이 저장된 동일한 속성을 여러번 선언할 경우 에러 발생 --%>
<%-- => import 속성 제외 --%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//java.util.List<String> nameList=new java.util.ArrayList<>();
List<String> nameList=new ArrayList<>();
nameList.add("홍길동");
nameList.add("임꺽정");
nameList.add("전우치");
nameList.add("일지매");
nameList.add("장길산");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP</title>
</head>
<body>
<h1>page Directive - import 속성</h1>
<hr>
<p>page Directive의 import 속성에는 JSP 문서에서 사용할 클래스 또는 인터페이스를 속성값으로
설정 - 클래스 또는 인터페이스를 패키지를 사용하여 명확하게 표현하여 제공하기 위한 사용</p>
<hr>
<ul>
<% for(String name : nameList) { %>
<li><%=name %></li>
<% } %>
</ul>
</body>
</html>
error_400
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP</title>
</head>
<body>
<h1>에러페이지</h1>
<hr>
<p>비정상적인 방법으로 프로그램을 요청 하였습니다.
정상적인 방법으로 사이트를 이용해 주세요.</p>
</body>
</html>
error_404
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP</title>
</head>
<body>
<h1>에러페이지</h1>
<hr>
<p>원하시는 페이지의 주소가 잘못 입력되었거나, 변경 혹은 삭제되어 요청하신
페이지를 찾을 수 없습니다.</p>
</body>
</html>
error_500
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP</title>
</head>
<body>
<h1>에러페이지</h1>
<hr>
<p>요청한 프로그램 실행시 예기치 못한 오류가 발생되었습니다.
빠른 시일내로 조치 하겠습니다.</p>
</body>
</html>
error_null
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP</title>
</head>
<body>
<h1>에러페이지</h1>
<hr>
<p>요청하신 웹프로그램 실행시 NullPointerException이 발생 하였습니다.
빠른 시일내로 조치 하겠습니다.</p>
</body>
</html>