Forward/Include
34805 ワード
Include
Error.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>
<p>
요청을 처리하는 중에 문제가 발생하였습니다.
잠시 후에 다시 요청하시기 바랍니다.
만약 계속해서 이 문제가 발생한다면 시스템 운영팀
(사내번호 : 8282)에 연락하기 바랍니다.
</p>
</body>
</html>
Header.jsp<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<div style="background-color:#00008b; color:white; height:20px; padding:5px;">
SPMS(Simple Project Management System)
</div>
Tail.jsp<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<div style="background-color:#f0fff0; height:20px; padding:5px; margin-top:10px;">
SPMS copyright@2021 bitcamp
</div>
MemberList.jsp<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- 페이지 지시자 추가. java의 import와 동일 -->
<%@ page import="spms.vo.Member" %>
<%@ page import="java.util.ArrayList" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원 목록</title>
</head>
<body>
<jsp:include page="/Header.jsp" />
<h1>회원 목록</h1>
<p><a href='add'>신규 회원</a></p>
<%
ArrayList<Member> members =
(ArrayList<Member>)request.getAttribute("members");
for(Member member : members){
%>
<%=member.getNo() %>,
<a href='update?no=<%=member.getNo() %>'>
<%=member.getName() %>
</a>,
<%=member.getEmail() %>,
<%=member.getCreatedDate() %>
<a href='delete?no=<%=member.getNo() %>'>
[삭제]
</a>
<br/>
<%
}
%>
<jsp:include page="/Tail.jsp" />
</body>
</html>
MemberListServletpackage spms.servlets;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import spms.vo.Member;
@SuppressWarnings("serial")
@WebServlet("/member/list")
public class MemberListServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Connection conn = null; // MySQL 연결담당
Statement stmt = null; // SQL문 담당
ResultSet rs = null; // SELECT문의 결과 담당
final String sqlSelect = "SELECT mno,mname,email,cre_date" + "\r\n" +
"FROM members" + "\r\n" +
"ORDER BY mno ASC";
ServletContext sc = this.getServletContext();
String driver = sc.getInitParameter("driver");
String url = sc.getInitParameter("url");
String id = sc.getInitParameter("username");
String pwd = sc.getInitParameter("password");
try {
// 1) MySQL 제어 객체를 로딩
Class.forName(driver);
// 2) MySQL과 연결
conn = DriverManager.getConnection(url, id, pwd);
stmt = conn.createStatement();
rs = stmt.executeQuery(sqlSelect);
resp.setContentType("text/html; charset=UTF-8"); // 먼저 호출
/* members테이블의 전체 인원을 저장하기 위해
* ArrayList를 사용한다
* */
ArrayList<Member> members = new ArrayList<Member>();
// DB로부터 members테이블의 정보를 가져와서 member객체에 담고
// member객체를 ArrayList에 차례로 저장한다.
while(rs.next()) {
members.add(new Member()
.setNo(rs.getInt("mno"))
.setName(rs.getString("mname"))
.setEmail(rs.getString("email"))
.setCreatedDate(rs.getDate("cre_date")));
}
// jsp에 전달하기 위해 request의 공유 공간에 저장한다
req.setAttribute("members", members);
// jsp로 request를 전달한다
RequestDispatcher rd =
req.getRequestDispatcher("/member/MemberList.jsp");
rd.include(req, resp);
/* jsp로 전달(위임)하는 방식 2가지
* 1) forward : 제어권을 아예 넘겨준다(네가 알아서 처리해라)
* 2) include : 실행할 동안 제어권을 줬다가 처리가 끝나면 다시 넘겨 받는다
* (마지막 확인은 내가 처리한다)
* */
}catch(Exception e) {
//throw new ServletException(e);
req.setAttribute("error", e);
RequestDispatcher rd = req.getRequestDispatcher("/Error.jsp");
rd.forward(req, resp);
}finally {
try {
if(rs!=null)
rs.close();
}catch(Exception e) {
e.printStackTrace();
}
try {
if(stmt!=null)
stmt.close();
}catch(Exception e) {
e.printStackTrace();
}
try {
if(conn!=null)
conn.close();
}catch(Exception e) {
e.printStackTrace();
}
}
}
}
結果Forward
mysqlサーバを閉じて故意にエラーが発生しました.
error.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
Exception e = (Exception)request.getAttribute("error");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>시스템 오류!</title>
</head>
<body>
<p>
요청을 처리하는 중에 문제가 발생하였습니다.
잠시 후에 다시 요청하시기 바랍니다.
만약 계속해서 이 문제가 발생한다면 시스템 운영팀
(사내번호 : 8282)에 연락하기 바랍니다.
</p>
<p><%= e.getMessage() %></p>
</body>
</html>
MemberList.jsp:catchセクションの変更
}catch(Exception e) {
//throw new ServletException(e);
req.setAttribute("error", e);
RequestDispatcher rd = req.getRequestDispatcher("/Error.jsp");
rd.forward(req, resp);
}finally {
結果Reference
この問題について(Forward/Include), 我々は、より多くの情報をここで見つけました https://velog.io/@jinkyung/Forward-Includeテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol