티스토리 뷰
반응형
목표: 목록페이지를 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 |
댓글
공지사항