일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- include액션태그
- isinterrupted()
- char[] String 형변환
- ObjectInputStream
- MemoryStream
- interrupted()
- 리눅스세팅
- 리눅스셋팅
- 표현 언어
- Linux세팅
- 상관서브쿼리
- 상관 서브 쿼리
- Linux셋팅
- String char[] 형변환
- first-child
- include 지시자
- include지시자
- ThreadGroup()
- 아이디중복
- interrupt()
- InputDialog
- Daemon()
- 스레드그룸
- first-of-child
- StringWriter
- sleep()메소드
- 메모리스트림
- 동기화
- ID중복
- StringReader
- Today
- Total
다연이네
[days10] 프로젝트 초기 환경설정과 MVC 다시 정리 본문
방명록을 MVC 패턴으로 구현하는 과정 적기
"방명록 목록"을 클릭했을때 웹페이지(list. jsp)가 보여지기까지
환경구축
0. JDK + Eclipse + WAS + Oracle + Developer 설치
1. Dynamic Web Project : jspPro
2. WEB-INF > lib > 라이브러리 추가
ㄱ. ojdbc6. jar
ㄴ. jstl-1. 2. jar (JSTL)
ㄷ. tomcat dbcp. jap (DBCP)
3. DBCP 설정
ㄱ. MATA-INF > context. xml
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Resource
name="jdbc/myoracle"
auth="Container"
type="javax.sql.DataSource"
driverClassName="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@127.0.0.1:1521:xe"
username="scott"
password="tiger"
maxTotal="20"
maxIdle="10"
maxWaitMillis="-1"/>
</Context>
ㄴ. web. xml
<resource-ref>
<description>Oracle Datasource example</description>
<res-ref-name>jdbc/myoracle</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
ㄷ. com. util 패키지 만들어 ConnectionProvider
package com.util;
import java.sql.Connection;
import java.sql.SQLException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
public class ConnectionProvider {
public static Connection getConnection()
throws NamingException, SQLException {
Context initContext = new InitialContext();
Context envContext = (Context)initContext.lookup("java:/comp/env");
DataSource ds = (DataSource)envContext.lookup("jdbc/myoracle");
Connection conn = ds.getConnection();
return conn;
}
}
4. Filter 설정
ㄱ. com. filter 패키지 생성해
package com.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class CharacterEncodingFilter implements Filter {
@Override
public void destroy() {
}
@Override
public void doFilter(
ServletRequest request, ServletResponse response
, FilterChain chain)
throws IOException, ServletException {
request.setCharacterEncoding(this.encoding);
chain.doFilter(request, response); //다음 필터 이동
}
private String encoding;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
this.encoding= filterConfig.getInitParameter("encoding");
if(this.encoding==null) this.encoding = "UTF-8";
}
}
ㄴ. web. xml 필터 설정
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>com.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
------------환경구축-------------
5. WebContent > days09 > guestbook
ㄴimages
ㄴjs
ㄴcss 등
ㄴ ex03.jsp <a>방명록 목록 요청</a>
6. MVC 패턴(모델2 구조)
7. 컨트롤러(서블릿) - 모든 클라이언트의 요청을 받아 처리의 중앙에서 흐름을 제어
list. do라는 요청이 들어오면 이를 처리하는 1모델 객체를 찾아 2일을 시켜 3결과값을 받아 4뷰가 응답하도록 함
ㄱ. 서블릿 ControllerUsingURI.java
1) guestbook > commandHandler.properties 설정파일
list. do -> 어떤 Model (Handler. java)
2) ControllerUsingURI.init(){
commandHandlerMap. put("url", 생성된 실제 모델 객체);
}
3) doGet() or doPost() (doPost()도 doGet()을 호출하도록 설정)
1. URI 분석 : ~~list. do 요청이 들어왔다면
2. commandHandlerMap.get(url) url을 key값으로해서 실체 저리할 핸들러(모델)객체를 얻어온다.
3. GetMessageListHandler
request.setAttribute("list",list);
request.setAttribute("pageBlock",pageBlock);
위처럼 2개 넘기지 말고
MessageListView viewData;
request.setAttribute("viewData", viewData);
이렇게 하나만 넘기자 (하나의 클래스에 담아서 넘기면 편리할테니)
return "list. jsp" : View페이지 경로 (return 값이 String인 이유?)
4) CommandHandler 인터페이스
1. return값이 String인 process()
왜 return 값이 String인지 이해하고 나중에 객체로 바꿀 수 있어야 함
5)NullHandler 클래스
ㄴ. 서블릿 등록(web.xml) - url패턴 *. do => 모든 확장자가 do면 컨트롤러가 모든걸 제어한다
요청이 없어도 서버 start시 자동으로 올려놓기 위해 <load-on startup>1</load-on startup>
8. 핸들러(모델 객체)는 자기가 일을 처리하는 것이 아니라 핸들러 안에서 (엄밀히 따지면 프로세스 메소드 안에서)
Service클래스를 만들었다. (일 처리 위해)
GetMessageListHandler.process()->GetMessageListService싱글톤(트랜잭션 처리, 로그 처리 등을 이 안에서 하려고)
GetMessageListService
ㄴ getMessageList() return값이 ArrayList<Message>가 아니라
MessageListView
>dao.selectCount()
>dao.selectList()
9. Message(DTO)
10. MessageListView 클래스 : ArrayList<Message> + 페이징 처리 필드
11. MessageDao 클래스 : 싱글톤
12. ServiceException 사용자 예외 클래스 db에서 예외가 발생시 위로 계속 떠넘기기
dao 예외 -> 서비스(부모)로 떠넘기기 -> 서비스에서 try~catch로 잡아서 사용자 정의 예외 객체로 보내기
13. com.util.JDBCUtil : rs, stmt, con close할 때 try~catch 묶어야 하는 것 쉽게 하도록 만듦 + rollback
'JSP' 카테고리의 다른 글
[days10] 코드 - 답글을 달 수 있는 게시판(==계층형 게시판==답변형 게시판) (0) | 2021.01.08 |
---|---|
[days10] 이론 - 답글을 달 수 있는 게시판(==계층형 게시판==답변형 게시판) (1) | 2021.01.07 |
[days09] MVC패턴으로 방명록 만들기 (0) | 2021.01.06 |
[days09] ServletContextListener (0) | 2021.01.06 |
[days09] 필터 - 모든 파일에 setCharacterEncoding("UTF-8"); (0) | 2021.01.06 |