티스토리 뷰
반응형
목표:
1. Model데이터를 구조화하는 이유에 대해서 안다.
2. Model데이터를 구조화하여 구현한다.
개념화된 데이터 = 엔티티 = 개체 = 사용자형 자료형 = 구조적인 데이터
Model데이터를 구조화하는 이유
반복되는 코드를 줄일 수 있고 속성이라는 이름으로 묶어서 표현하면 코드가 직관적이며 가독성이 높아진다
반복되는 코드를 한번에 묶어서 표현한다.
개체를 만들어 속성을 호출하는 것처럼 사용한다. (실제로는 getters와 setters를 통해서 사용)
코드:
/* Notice.java */
package com.newlecture.web.entity;
import java.util.Date;
/* Notice 클래스에 속성을 정의 Notice라는 Entity객체 */
public class Notice {
private int id; //id도 추가
private String title;
private String writerId;
private Date regdate;
private String hit;
private String files;
private String content;
/* 기본생성자 */
public Notice() {
}
/* 오버로드 생성자 추가 */
public Notice(int id, String title, String writerId, Date regdate, String hit, String files, String content) {
this.id = id;
this.title = title;
this.writerId = writerId;
this.regdate = regdate;
this.hit = hit;
this.files = files;
this.content = content;
}
/* Getters and Setters 추가 */
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getWriterId() {
return writerId;
}
public void setWriterId(String writerId) {
this.writerId = writerId;
}
public Date getRegdate() {
return regdate;
}
public void setRegdate(Date regdate) {
this.regdate = regdate;
}
public String getHit() {
return hit;
}
public void setHit(String hit) {
this.hit = hit;
}
public String getFiles() {
return files;
}
public void setFiles(String files) {
this.files = files;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
/* ToString 생성 */
@Override
public String toString() {
return "Notice [id=" + id + ", title=" + title + ", writerId=" + writerId + ", regdate=" + regdate + ", hit="
+ hit + ", files=" + files + ", content=" + content + "]";
}
}
Notice.java 클래스를 생성, 주석에 설명 참고.
/* NoticeDetailController.java */
package com.newlecture.web.controller;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;
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/detail")
public class NoticeDetailController extends HttpServlet{
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int id = Integer.parseInt(request.getParameter("id"));
String url = "jdbc:oracle:thin:@localhost:1521/XE";
String sql = "SELECT * FROM NOTICE WHERE ID=?";
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection(url, "programmers", "111111");
PreparedStatement st = con.prepareStatement(sql);
st.setInt(1, id);
ResultSet rs = st.executeQuery();
rs.next();
String title = rs.getString("TITLE");
String writerId = rs.getString("WRITER_ID");
Date regdate = rs.getDate("REGDATE"); //util import
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
);
/* 하나의 그릇(notice)에 담아서 호출 */
request.setAttribute("n", notice);
/* request저장소에 값들을 저장 부분 주석처리
request.setAttribute("title", title);
request.setAttribute("writerId", writerId);
request.setAttribute("regdate", regdate);
request.setAttribute("hit", hit);
request.setAttribute("files", files);
request.setAttribute("content", content);
*/
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();
}
//forward -> detail.jsp를 요청하면서 현재 사용중인 request 저장소와 출력도구를 공유한다.
request.getRequestDispatcher("/notice/detail.jsp").forward(request, response);
}
}
이전에 사용하던 request.setAttribute()들을 모두 주석처리하고
notice 객체를 생성하고 모든 값을 담은 단 하나의 request.setAttribute()를 호출한다.
<!-- detail.jsp 일부-->
<!-- 코드블럭을 제거하고 EL을 사용 -->
<th>제목</th>
<td class="text-align-left text-indent text-strong text-orange" colspan="3">${n.title}</td>
</tr>
<tr>
<th>작성일</th>
<td class="text-align-left text-indent" colspan="3">${n.regdate}</td>
</tr>
<tr>
<th>작성자</th>
<td>${n.writerId}</td>
<th>조회수</th>
<td>${n.hit}</td>
</tr>
<tr>
<th>첨부파일</th>
<td colspan="3">${n.files}</td>
</tr>
<tr class="content">
<td colspan="4">${n.content}</td>
</tr>
기존의 코드블럭을 EL로 대체해서 코드를 간결하게 만듦
결과:
출력 결과는 이전과 동일.
반응형
'Servlet JSP' 카테고리의 다른 글
View페이지 은닉하기 (1) | 2021.05.14 |
---|---|
목록페이지 MVC model2로 수정 (0) | 2021.05.14 |
JSP MVC model2로 변경하기 (0) | 2021.05.13 |
자세한 페이지 MVC model1으로 변경하기 (0) | 2021.05.11 |
자세한 페이지 구현 (0) | 2021.05.10 |
댓글
공지사항