티스토리 뷰

Servlet JSP

목록페이지 MVC model2로 수정

Programmers 2021. 5. 14. 18:42
반응형

목표: 목록페이지를 MVC model2로 수정한다.

내용:
 NoticeListController.java 추가
list.jsp에서 JAVA코드와 HTML코드로 구분하고, JAVA코드를 이용해 컨트롤러를 만든다.

/* NoticeListController.java */
package com.newlecture.web.controller;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Date;
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 com.newlecture.web.entity.Notice;

@WebServlet("/notice/list")
public class NoticeListController extends HttpServlet{
	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		/* 목록 List 개체를 만든다 */
		List<Notice> list = new ArrayList<>(); // ctr+shift+O로 패키지 추가
		
		String url = "jdbc:oracle:thin:@localhost:1521/XE";
		String sql = "SELECT * FROM NOTICE";
		
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			Connection con = DriverManager.getConnection(url, "programmers", "111111");
			Statement st = con.createStatement();
			ResultSet rs = st.executeQuery(sql);

			/* 아래에 있던 코드블럭을 가져와서 위의 코드를 HTML과 JAVA로 분리 */
			while(rs.next()){
				int id = rs.getInt("ID");
				String title = rs.getString("TITLE");
				String writerId = rs.getString("WRITER_ID");
				Date regdate = rs.getDate("REGDATE");
				String hit = rs.getString("HIT");
				String files = rs.getString("FILES");
				String content = rs.getString("CONTENT");
				
				/* Notice라는 개체를 이용해서 */
				Notice notice = new Notice(
						id,
						title,
						writerId,
						regdate,
						hit,
						files,
						content
					);
				list.add(notice);
				
			}
			rs.close();
			st.close();
			con.close();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		request.setAttribute("list", list);
		
		//forward -> list.jsp를 요청하면서 현재 사용중인 request 저장소와 출력도구를 공유한다.
		request.getRequestDispatcher("/notice/list.jsp").forward(request, response);

	}
}

1. NoticeListController.java 클래스 생성
2. extends HttpServlet추가
3. @Webservlet("/notice/list") 오버라이드
4. doget()함수 추가, 불필요 super() 삭제
5. 기존의 자바코드 삽입 및 수정
6. import 해주기. *.sql 및 Date는 *.util
7. 예외처리 후 다른 코드들도 try catch문에 삽입
8. list<Notice> list 생성
9. Notice라는 개체를 이용해서 생성하고 list.add(notice)로 리스트들 담기
10. request.setAttribute("list", list) 이용해서 리스트를 담는다.
11. request.getRequestDispatcher("/notice/list.jsp").forward(request, response);로 값들을 전달


 

<!-- list.jsp 일부-->
<% 
	/* 반복문 추가 */
	List<Notice> list = (List<Notice>)request.getAttribute("list");
	//list를 request에서 꺼내온다. 꺼내오면서 List로 형변환시킨다.
	for(Notice n : list) { 
		pageContext.setAttribute("n", n); //pageContext에 집어넣는다.
	%>
	<!-- EL을 사용해서 값을 받아온다. -->	
	<tr>
		<td>${n.id}</td>
		<td class="title indent text-align-left"><a href="detail?id=${id}">${n.title}</a></td>
		<td>${n.writerId}</td>
		<td>${n.regdate}</td>
		<td>${n.hit}</td>
	</tr>
	<%} %>	

 EL을 사용해서 값들을 출력한다. 그전에 Notice를 지역변수로 만들어 request.getAttribute로 list값들을 전달 받아온다.
다음 for문을 통해 list값들을 pageContext로 담은 후에 EL을 통해서 출력한다.

결과:
웹페이지가 정상적으로 작동함을 확인

문제점:
for문이  코드블럭이 들어가서 지저분하다. 해결해야함.

 

반응형

'Servlet JSP' 카테고리의 다른 글

View(list.jsp)에서 반복문 제거하기  (0) 2021.05.14
View페이지 은닉하기  (1) 2021.05.14
Model 데이터를 구조화  (0) 2021.05.14
JSP MVC model2로 변경하기  (0) 2021.05.13
자세한 페이지 MVC model1으로 변경하기  (0) 2021.05.11
댓글
공지사항