본문 바로가기

Servlet&JSP 프로그래밍

뉴렉처[Servlet/JSP] 강의 복습 51강~57강

51강 - JSP를 이용한 자바 웹 프로그래밍 시작하기

* .html 파일을 복사해서 .jsp 파일로 만들었을때 소스코드에 한글 인코딩 문제가 발생한다.

==> 해결방안: 소스코드 창 클릭 -> alt + enter -> Text file encoding 에 Other 클릭 -> UTF-8로 변경

 

* 클래스에 필요한 패키지를 import로 어떻게 가져오는가?

<%@page import=" ">

ex.

<%@page import="java.sql.ResultSet"%>

<%@page import="java.sql.Connection"%>

 

52강 - JDBC를 이용해 글 목록 구현하기

[list.jsp] - notice 폴더 내에 존재

<% while(rs.next()) {%>

<tr>

<td><%= rs.getInt("ID") %></td>

<td class="title indent text-align-left"><a href="detail.html"><%= rs.getString("TITLE") %></a></td>

<td><%= rs.getString("WRITER_ID") %></td>

<td><%= rs.getDate("REGDATE") %></td>

<td><%= rs.getInt("HIT") %></td>

</tr>

<%} %>

 

※ 웹 개발 시 OracleDriver(ojdbc)를 추가할때 주의사항!!!!

Build path로만 설정하지 않고, Tomcat서버로 넘어갈때 ojdbc라이브러리가 같이 배포될 수 있도록

WEB-INF 안에 lib 폴더에 ojdbc를 포장시켜야 한다.

==> WEB-INF의 lib 폴더에 ojdbc.jar 파일을 복사 붙여넣기 해준다.

 

53강 - 자세한 페이지 구현하기

[detail.jsp]

 

<%

// /...?id=value 로넘어오는값을변수id로받아준다.

int id = Integer.parseInt(request.getParameter("id"));

 

String url = "jdbc:oracle:thin:@localhost:1521/xepdb1"

String sql = "SELECT * FROM NOTICE WHERE ID=?"

 

Class.forName("oracle.jdbc.driver.OracleDriver");

Connection con = DriverManager.getConnection(url, "newlec", "369369");

PreparedStatement st = con.prepareStatement(sql);

st.setInt(1, id);

 

ResultSet rs = st.executeQuery();

 

rs.next(); //ResulSet에있는결과의행의포인터를 옮긴 뒤에 가져온다.

           //(처음에ResultSet의포인터는Before Of File을가리키고있다.)

%>

 

블럭에는 DB를 연결해서 해당 id 값에 데이터 정보를 가져온 뒤 출력해주는 작업을 한다.

 

<div class="margin-top first">

<h3 class="hidden">공지사항내용</h3>

<table class="table">

<tbody>

<tr>

<th>제목</th>

<td class="text-align-left text-indent text-strong text-orange" colspan="3"><%=rs.getString("title")%></td>

</tr>

<tr>

<th>작성일</th>

<td class="text-align-left text-indent" colspan="3"><%=rs.getDate("regdate")%></td>

</tr>

<tr>

<th>작성자</th>

<td><%=rs.getString("writer_id")%></td>

<th>조회수</th>

<td><%=rs.getInt("hit")%></td>

</tr>

<tr>

<th>첨부파일</th>

<td colspan="3"><%=rs.getString("files")%></td>

</tr>

<tr class="content">

<td colspan="4"><%=rs.getString("content")%></td>

</tr>

</tbody>

</table>

</div>

 

54강 - 자세한 페이지 MVC model1으로 변경하기

HTML 코드와 JAVA 코드가 섞여 있는 스파게티 소스를

HTML 코드와 JAVA 코드를 분리하여 정리한다.

HTML 코드에는 최소한으로 이루어진 데이터 변수(model)를 담아서 나타내준다.

 /////////////////////////////////// JAVA 코드 /////////////////////////////////// 

<%

// ?id=value 로넘어오는값을변수id로받아준다.

int id = Integer.parseInt(request.getParameter("id"));

 

String url = "jdbc:oracle:thin:@localhost:1521/xepdb1"

String sql = "SELECT * FROM NOTICE WHERE ID=?"

 

Class.forName("oracle.jdbc.driver.OracleDriver");

Connection con = DriverManager.getConnection(url, "newlec", "369369");

PreparedStatement st = con.prepareStatement(sql);

st.setInt(1, id);

 

ResultSet rs = st.executeQuery();

 

rs.next(); //ResulSet에있는결과의행의포인터를옮긴뒤에가져온다. (처음에ResultSet의포인터는Before Of File을가리키고있다.)

 

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");

 

rs.close();

st.close();

con.close();

%>

 

 /////////////////////////////////// HTML 코드 /////////////////////////////////// 

 

<div class="margin-top first">

<h3 class="hidden">공지사항내용</h3>

<table class="table">

<tbody>

<tr>

<th>제목</th>

<td class="text-align-left text-indent text-strong text-orange" colspan="3"><%=title %></td>

</tr>

<tr>

<th>작성일</th>

<td class="text-align-left text-indent" colspan="3"><%=regdate %></td>

</tr>

<tr>

<th>작성자</th>

<td><%=writerId %></td>

<th>조회수</th>

<td><%=hit %></td>

</tr>

<tr>

<th>첨부파일</th>

<td colspan="3"><%=files %></td>

</tr>

<tr class="content">

<td colspan="4"><%=content %></td>

</tr>

</tbody>

</table>

</div>

 

 

55강 - MVC model2 방식으로 변경하기

 

Model 1 - 하나의 파일에 Controller, Model, View가 같이 들어있다.

Model 2 - 파일을 물리적으로 나누어서 Controller, Model 과 View 로 나누어 준다.

Model 2의 장점: Controller, Model 부분과 View 부분을 나눠서 관리하기 때문에 협업과 유지관리 하기 좋다.

 

여기서 질문!!!!!! Model의 데이터를 Controller 부분과 View 부분을 공유하면서 사용할때, Model을 어떻게 관리하여

데이터를 사용할까?

==> 저장소에 넣어두고 Model을 넣고 빼고 하면 된다.

저장소에는 pageContext / request / session / application 객체가 있는데, 범위가 좁은 request 저장소가 적합!!

NoticeDetailController.java 추가 (Controller Model을 처리하는 서블릿)

 

[실행순서]

1. NoticeDetailController.java 에서 Model에 데이터를 가공한 후에

2. detail.jsp 에 데이터를 보내서 화면에 출력해준다.

 

서블릿에서 서블릿으로 전달하는 방법 2가지

1) redirect: 현재 작업했던 내용이 버려지고 새롭게 요청한다.

ex. 로그인 후 메인 페이지를 요청할때

ex. 로그인 실패시 다시 로그인 페이지를 새롭게 요총할때

2) forward: 현재 작업했던 내용을 dispatcher로 등록한 uri로 이어서 사용할 수 있게 한다.

(request(저장소 객체), response(출력 객체)를 공유, 활용해서 데이터를 가져올 수 있다.)

 

여기서 필요한 것은 forward 이다. (데이터를 가공 후 detail.jsp 로 전달해야함으로)

==> request.getRequestDispatcher("/notice/detail.jsp").forward(request, response);

 

56강 - Model 데이터를 구조화 하기

출력을 위해서 사용했던 데이터(title, writerId, regdate, content, hit, files)들을 묶어서 하나의 객체로 표현하는 것이 좋다.

낱개로 표현하면 반복되는 코드들이 많아지게 되며, 데이터를 구분하기가 어려워지는 등의 문제가 많기 때문이다.

따라서 각각 여래개를 request 저장소에 저장하지 않고, 객체 하나만 request.setAttribute("notice", notice)로 담으면

훨씬 더 간단히 표현 할 수 있게 된다.

Notice를 객체화 해서 데이터를 꺼낼때는 EL표기법( ${notice.id} )을 이용해줌으로써 꺼낸다.

* EL표기법( ${} )은 저장소에 등록되어있는 값을 꺼내서 출력까지 해주는 역할을 한다.

※ EL표기법으로 사용하기 위한 조건

EL표기법으로 사용하려면 반드시 저장소에 있어야 쓸 수 있다.

 

57강 = 목록 페이지도 MVC model2로 수정하기

 

 

 

 

[출처]

뉴렉쳐 
www.youtube.com/watch?v=u6-D8CJbsmo&list=PLq8wAnVUcTFVOtENMsujSgtv2TOsMy8zd&index=14