본문 바로가기

개발자노트/웹

day41 - JSP useBean , Sarvlet , request, Post , MVC 패턴을 이용한 게시판 예제

컨트롤러.jsp 코드

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" errorPage="error/error.jsp" import="java.util.ArrayList,model.vo.BoardVO" %>
<%
	request.setCharacterEncoding("UTF-8");
%>
<jsp:useBean id="bDAO" class="model.dao.BoardDAO" />
<jsp:useBean id="bVO" class="model.vo.BoardVO" />
<jsp:setProperty property="*" name="bVO" />
<%
	// 어떤 요청을 받았는지 파악
	//  -> 해당 요청을 수행

	String action=request.getParameter("action");
	System.out.println("로그: "+action);
	
	if(action.equals("main")){
		ArrayList<BoardVO> datas=bDAO.selectAll(bVO);
		request.setAttribute("datas", datas);
		pageContext.forward("main.jsp"); // forward 액션
	}
	else if(action.equals("insert")){
		if(bDAO.insert(bVO)){
			response.sendRedirect("controller.jsp?action=main");
		}
		else{
			throw new Exception("insert 오류");
		}
	}
	else{
		out.println("<script>alert('action 파라미터 값이 올바르지 않습니다...');location.href='controller.jsp?action=main'</script>");	
	}
%>

 

1. 1~2번 라인 = 페이지 지시어  isError / ErrorPage / import 가 중요

 

2. request.setCharacterEncoding("UTF-8") 상단에 있도록 배치한다.

 

3. <jsp:useBean id="bDAO" class="model.dao.BoardDAO" />
    <jsp:useBean id="bVO" class="model.vo.BoardVO" />

    -> 기본 생성자를 호출하여 new 진행한 것과 같음, 기본 생성자이기 때문에 멤버변수 초기화가 진행되지 않아있음

 

4. <jsp:setProperty property="*" name="bVO" />

    -> bvo.setXxx(reqeust.getParamater("xxx"));
   useBean 기본생성자로 진행하지 못한 멤버변수 초기화를 진행
   요청정보(request 내장객체)에 포함된 파라미터와 이름이 동일한 멤버변수를 초기화

 

5. String action=request.getParameter("action");

    -> request 로 넘어온 action 파라미터값에 대한 로직을 수행하기 위해 변수선언

 

 

 

index(표지페이지) . jsp 코드

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!-- 표지페이지 -->
<!-- main.jsp에서 datas를 출력하려면 C를 방문해야하기때문 -->
<jsp:forward page="controller.jsp?action=main" />
<%
	// pageContext.forward("controller.jsp?action=main");
%>

컨트롤러에 있는 sellectAll(bVO); 된 데이터를 가지고 메인화면을 띄워줘야 하기 때문에 인덱스는 컨트롤러에

main이라는 액션 파라미터값을 보내줘야함

 

 

 

 

메인 페이지 . jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="model.vo.BoardVO,java.util.ArrayList" %>
<jsp:useBean id="datas" class="java.util.ArrayList" scope="request" />
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>메인페이지</title>
</head>
<body>

<table border="2">
	<tr>
		<th>번 호</th><th>제 목</th><th>작성자</th>
	</tr>
<%
	for(BoardVO v:(ArrayList<BoardVO>)datas){
%>
	<tr>
		<th><a href="board.jsp"><%=v.getBid()%></a></th>
		<td><%=v.getTitle()%></td>
		<td><%=v.getWriter()%></td>
	</tr>
<%
	}
%>
</table>
<hr>
<a href="form.jsp">새로운 글 작성하기</a>

</body>
</html>

컨트롤러에서 sellectAll 되어진 datas를 출력하기 위해 jsp:useBean을 이용해 request 스코프에 있는 datas를 AL로 받아옴

그 후 for each 문을 통해 데이터 출력

 

 

 

form ( 데이터 추가 ) .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 action="controller.jsp" method="post">
	<input type="hidden" name="action" value="insert">
	<table border="1">
		<tr>
			<td>제목</td>
			<td><input type="text" name="title" required></td>
		</tr>
		<tr>
			<td>내용</td>
			<td><input type="text" name="content" required></td>
		</tr>
		<tr>
			<td>작성자</td>
			<td><input type="text" name="writer" required></td>
		</tr>
		<tr>
			<td colspan="2" align="right">
				<input type="submit" value="글 작성하기">
			</td>
		</tr>
	</table>
</form>
<hr>
<a href="controller.jsp?action=main">메인으로 돌아가기</a>

</body>
</html>

1. <form action="controller.jsp" method="post">    -> controller.jsp 로 post 방식으로 정보를 보냄


2. <input type="hidden" name="action" value="insert"> -> atction 파라미터값에 insert라는 이름으로 보내는데,

   hidden 속성으로 POST방식으로 전달할 요청 무엇인지 가려줄 수 있음

 

3. 메인으로 돌아 갈 때 역시, controller를 통해 datas를 받은 후 main으로 돌아가야한다는 것을 유의!