- -WEB-INF
(1)web.xml(DispatcherServlet 컨트롤러 등록) 1순위
(2)board-servlet.xml(요청명령어 등록)- -META-INF (JNDI 방법)
(3)Context.xml(DB정보->태그형태로 설정)->명함철- -src->빈즈
(4)BoardDAO->JNDI명을 이용(DB접속)->list()
(5)ListActionController->list()- -Webapp
(6)화면에 출력할 page(~) -> list.jsp
🎈web.xml
<servlet> <servlet-name>board</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>board</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping>
: DB연결의 정보->Context.xml 저장 -> DB정보이름(default jdbc/orcl,,,) 등록=>DAO=>url,driver,계정,암호X(필요없다), JNDI이름을 검색(연결객체 가져옴)
🎈Context.xml(일반 xml파일로 생성)(JNDI방식)<?xml version="1.0" encoding="UTF-8"?> <Context> Java Naming Directory Interface의 약자 <Resource name="jdbc/orcl(JNDI이름)" --->외부클래스(BoardDAO) ( 외부에서 접속할때 DB의 정보를 알수 있도록 해주는 고유의 이름 ) auth="container" ->리소스(자원(DB)를 누가 관리할 것인가?(스프링) type="javax.sql.DataSource" ->(ex 자동차의 관한)커넥션풀에 대한 DataSource의 fullName username="scott" ->접속할 계정명 password="tiger" ->접속할 암호 driverClassName="oracle.jdbc.driver.OracleDriver" ->접속할 Driver명 factory="org.apache.commons.dbcp.BasicDataSourceFactory" -> 커넥션풀을 생성해주는 클래스 fullName (ex 자동차 공장) url="jdbc:oracle:thin:@localhost:1521:orcl" ->접속 url maxActive="20" -> 최대로 빌려줄 수있는 커넥션풀 갯수 지정하는 속성 maxIdle="10" /> -> 최대로 여분이 있는 커넥션풀 갯수 지정하는 속성 </Context>
🎈oracle DB등록
create table springboard( num number(3) primary key, author varchar2(15), title varchar2(50), content varchar2(4000), writeday date default sysdate, readcnt number(4) default 0); //처음 조회수는 0 /////////////// insert into springboard(num,author,title,content) values(1,'홍길동','스프링 연습1','스프링 테스트 내용중'); //////////// commit; //////////////// select * from springboard;
🎈BoardDTO
public class BoardDTO { private int num; private String author,title,content,date; private int readcnt;//조회수 ,,,
🎈BoardDAO
🎁import
- import java.sql.*;
- //Connection, PrepardStatement,,,
- import java.util.*;
- //ArrayList, List~
- import javax.sql.*;
- //DataSource객체 -> getConnection()을 이용(자식객체)
- import javax.naming.*;
- //Context(인터페이스) or InitialContext객체
//lookup('찾고자하는 JNDI명')
🎁DB객체 얻어오기
DataSource ds;
//DBConnectionMgr pool=null; has a 관계
🎁생성자
생성자 : DataSource 얻기 : InitialContext와 JNDI명try { //InitialContext ctx=new InitialContext(); (O 가능) Context ctx=new InitialContext(); //형식) datasource객체명=(DataSource)ctx객체명.lookup("java:comp/env/찾고자하는 JNDI명"); ds=(DataSource)ctx.lookup("java:comp/env/jdbc/orcl"); System.out.println("ds=> "+ds); }catch(Exception e) { e.printStackTrace(); } }
🎈board-servlet.xml
- DB접속
<bean id="boardDAO" class="kang.BoardDAO" />
- 글목록보기(list()) setDao(BoardDAO 객체)
<bean name="/list.do" class="kang.ListActionController"> <property name="dao"> <ref bean="boardDAO" /> </property> </bean>
🎈ListActionController
- 모델2 -> //public class ListAction
- BoardDAO dao;
//BoardDAO dao=new BoardDAO(); => 컨테이너가 이미 생성된 상태, 수동으로 해줄 필요 없다.- setDao :
//<property name="dao"><ref bean="" /></property>
🎁handleRequest()- ModelAndView : 화면에 출력할 list.jsp에 전달할 페이지와 전달할 값을 설정하기 위해서
- 이동할 페이지(공유), 보내줄 데이터를 담기위해서
🎈board-servlet.xml
<!-- 2. 글쓰기폼으로 이동 --> <bean name="/writeui.do" class="org.springframework.web.servlet.mvc.ParameterizableViewController"> <property name="viewName" value="write"></property> </bean> <!-- 3. 글쓰기(글수정하기와 거의 유사) --> <bean name="/write.do" class="kang.WriteActionController"> <property name="dao"> <ref bean="boardDAO" /> </property> <property name="commandClass" value="kang.BoardCommand" /> </bean>
🎈BoardCommand.java
- BoardDTO -> 하나의 레코드에 관련된 필드와 연관이 있는 클래스(모든필드)
- BoardCommend => 실질적으로 사용자로부터 값을 입력받는 필드로만 구성된 클래스
<property name="commendClass" value="kang.BoardCommand" />
)🎈board-servlet.xml
<!-- 4. 글상세보기 --> <bean name="/retrieve.do" class="kang.RetrieveActionController"> <property name="dao"> <ref bean="boardDAO" /> </property> </bean>
🎈BoardDAO.java
🎈RetrieveActionController.java
🎈retrieve.jsp
- readonly="readonly"을 주면 inputbox에 커서가 들어가지 않는다.(수정X)
<td><%=num></td>
=> request.getParameter("num")(X)<hidden name="num" value="3" />
을 써서 전달해 주어야 한다.
🎈board-servlet.xml
<bean name="/update.do" class="lee.UpdateActionController"> <property name="dao"> <ref bean="boardDAO" /> </property> <property name="commandClass" value="lee.BoardCommand" /> </bean>
🎈UpdateActionController.java
🎈BoardDAO
🎈DeleteActionController
🎈list.jsp
<!-- 검색 기능 시작 -->
<tr><td colspan="5" align="center">
<form action="search.do">
<select name="searchName" size="1">
<option value="author">작성자</option>
<option value="title">제목</option>
</select>
<input type="text" name="searchValue">
<input type="submit" value="검색">
</form>
</td></tr>
</table>
</body></html>
list.jsp에서 검색폼을 추가(기본 페이징처리 바로 아래에 위치)
🎈board-servlet.xml
<bean name="/search.do" class="kang.SearchActionController"> <property name="dao"> <ref bean="boardDAO" /> </property> </bean>
글검색하기 (검색하기위해서 입력)(페이징 처리X)
- 값을 입력받는데 테이블에 저장이 되는가? -> AbstractCommandController 상속
- 값을 입력을 받는데 전달 -> 검색 -> Controller 상속
🎈BoardDAO.java
🎈SearchActionController.java- ListActionController ctrl+c,v