Jam's story
[Spring] 다이나믹웹프로젝트생성과 MVC2패턴 본문
다이나믹 웹프로젝트 설정
- 톰캣설정
- web.xml 체크 잊지말기
- 체크한 버튼 누르기
- JSP템플릿 수정
<%@ page contentType="text/html; charset=${encoding}" pageEncoding="${encoding}"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="${encoding}">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>${date} - ${time}</title>
<link rel="shortcut icon" type="image/x-icon" href="../images/SiSt.ico">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
</head>
<body>
${cursor}
</body>
</html>
- 포트번호바꾸기
- jar 파일 추가
- 스프링주요모듈도 추가
수업한내용 mvc2 패턴 정리
1. JSP/Servlet MVC 패턴
1) MV[C] 컨트롤러 선언 DispatcherServlet.java == 서블릿
-> web.xml 서블릿 등록
2) commandHandler.properties
list.do=ListHandler
commandHandlerMap requestURI key
3) CommandHandler 인터페이스 선언
ListHandler 클래스 선언 [M]VC
세션, request.setAttribute("list", list ); X
// 리다이렉트
return "list.jsp" // 포워딩
4) ListService 클래스
BoardDAO 인터페이스
BoardDAOImpl 클래스
Part 02 스프링 웹 개발 I
Chapter 07 스프링 MVC : 기본기
p 258
2. 스프링 MVC
p 268 기본 흐름과 주요 컴포넌트
[그림 7.4 ] 스프링 MVC웹 요청 처리 과정 -- 완벽하게 이해하고 암기
[표 7.1 ] 스프링 MVC의 주요 구성요소 -- 완벽하게 이해하고 암기
12:05 수업 시작
웹브라우저[ list.do ] (1)요청 -> MV[C] [front 컨트롤러] -> (2) 요청URI/컨트롤러 검색
:DispatcherServlet 구성요소 <- :HandlerMapping 구성요소
-> (3) 처리 요청 (4) 요청 처리 -> [M]VC [ 컨트롤러 ]
:HandlerAdapter 구성요소 <- 처리 결과 리턴
<-(6) 처리 결과를 리턴
Model 결과물 저장
ModelAndView
-> (7) 처리 결과물을 보여줄 [View 검색]
:ViewResolver 구성요소
<- (8) 검색된 View를 front Controller에게 알려준다.
-> (9) 응답 생성 -> (10) list.jsp
:View 구성요소
SQL 테이블 생성
CREATE TABLE NOTICES
(
"SEQ" VARCHAR2(10 BYTE),
"TITLE" VARCHAR2(200 BYTE),
"WRITER" VARCHAR2(50 BYTE),
"CONTENT" VARCHAR2(4000 BYTE),
"REGDATE" TIMESTAMP (6),
"HIT" NUMBER,
"FILESRC" VARCHAR2(500 BYTE)
);
CREATE TABLE "MEMBER"
(
"ID" VARCHAR2(50 BYTE),
"PWD" VARCHAR2(50 BYTE),
"NAME" VARCHAR2(50 BYTE),
"GENDER" VARCHAR2(10 BYTE),
"BIRTH" VARCHAR2(10 BYTE),
"IS_LUNAR" VARCHAR2(10 BYTE),
"CPHONE" VARCHAR2(15 BYTE),
"EMAIL" VARCHAR2(200 BYTE),
"HABIT" VARCHAR2(200 BYTE),
"REGDATE" DATE
);
web.xml 에 스프링 front-controller등록
아무 자바파일에 DispatcherServlet 하고 import문복사해서 servlet-class에 적기
<!-- 스프링 front-controller등록 -->
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup> <!-- 톰캣이 시작될때 서블릿객체 실행 -->
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>*.htm</url-pattern>
</servlet-mapping>
dispatcher-servlet.xml 만들기
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
</beans>
VO/DAO 패키지 추가
newlecture.vo
newlecture.dao
추가하고 수정
공지사항 목록을 가져오는 NoticeController
NoticeController.java
package controllers.customer;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import newlecture.dao.NoticeDao;
import newlecture.vo.Notice;
public class NoticeController implements Controller{
private NoticeDao noticeDao;
public NoticeController() {
super();
// TODO Auto-generated constructor stub
}
public NoticeController(NoticeDao noticeDao) {
super();
this.noticeDao = noticeDao;
}
public NoticeDao getNoticeDao() {
return noticeDao;
}
public void setNoticeDao(NoticeDao noticeDao) {
this.noticeDao = noticeDao;
}
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
String ppage = request.getParameter("page");
String pfield = request.getParameter("field");
String pquery = request.getParameter("query");
//필트초기화
int page = 1;
String field = "title", query = "";
//파라미터가 넘어온다면 integer로 파싱
if ( ppage != null && !ppage.equals("") ) {
page = Integer.parseInt(ppage);
}
if ( pfield != null && !pfield.equals("") ) {
field = pfield;
}
if ( pquery != null && !pquery.equals("") ) {
query = pquery;
}
//처리결과를 => ModelAndView 리턴값
//jsp처럼 setRequest X
ModelAndView mv = new ModelAndView();
//request.setAttribute("test", "Hello.Spring MVC World!");
// mv.addObject(파라미터이름, 값)
mv.addObject("test", "Hello.Spring MVC World!");
List<Notice> list = this.noticeDao.getNotices(page, field, query);
mv.addObject("list",list);
mv.setViewName("notice.jsp");
return mv;
}
}
notice.jsp 수정
<!-- 컨트롤러에서 mv.addObject("test", "Hello.Spring MVC World!");-->
<h2>공지사항 ${test }</h2>
customer 파일안에 notice.htm 샘플파일(요청하기위해) 만듬
이상태에서 notice.htm을 요청하면, 404오류가 나타나고
7월 13, 2022 4:20:49 오후 org.springframework.web.servlet.DispatcherServlet noHandlerFound
경고: No mapping found for HTTP request with URI [/springMVC/customer/notice.htm] in DispatcherServlet with name 'dispatcher'
핸들러를 찾을 수 없다는 오류
dispatcher-servlet.xml에 추가
<bean id="noticeDao" class="newlecture.dao.NoticeDao"></bean>
<bean id="noticeController" class="controllers.customer.NoticeController">
<property name="noticeDao" ref="noticeDao"></property>
</bean>
그래도 오류가 발생
7월 13, 2022 4:29:10 오후 org.springframework.web.servlet.DispatcherServlet noHandlerFound
경고: No mapping found for HTTP request with URI [/springMVC/customer/notice.htm] in DispatcherServlet with name 'dispatcher'
요청url을 dispatcher-servlet.xml에서 설정
<bean id="noticeDao" class="newlecture.dao.NoticeDao"></bean>
<!-- <bean name="요청URL" class="controllers.customer.NoticeController">-->
<bean name="/customer/notice.htm" class="controllers.customer.NoticeController">
<property name="noticeDao" ref="noticeDao"></property>
</bean>
notice.jsp 수정
<!--
<tr>
<td class="seq">1</td>
<td class="title"><a href="noticeDetail.jsp">강좌가 오픈될 예정입니다.</a></td>
<td class="writer">관리자</td>
<td class="regdate">2013-02-10</td>
<td class="hit">12</td>
</tr>
-->
<c:if test="${empty list }">
<tr>
<td colspan="5">공지사항이 없습니다.</td>
</tr>
</c:if>
<c:if test="${not empty list }">
<c:forEach items="${list}" var="dto">
<tr>
<td class="seq">${dto.seq}</td>
<td class="title"><a href="noticeDetail.htm?seq=${dto.seq}">${dto.title }</a></td>
<td class="writer">${dto.writer }</td>
<td class="regdate">${dto.regdate}</td>
<td class="hit">${dto.hit}</td>
</tr>
</c:forEach>
</c:if>
처리순서
1.우선 front-controller간다
2. dispatcher-servlet에 가서
(name에) url요청과 매칭되는 컨트롤러를 검색한다.
(setter로 의존성도 주입도 해줌 )
3,컨트롤러 실행
4.컨트롤러에서 뷰페이지 반환
5.뷰페이지 실행
'Spring' 카테고리의 다른 글
[Spring] 스프링 파일 업로드 (0) | 2022.07.14 |
---|---|
[Spring] MVC2 모델을 이용한 게시판 구현 (0) | 2022.07.14 |
[Spring] days03- @Aspect 애노테이션을 이용한 AOP (0) | 2022.07.13 |
[Spring] days02 - AOP (0) | 2022.07.12 |
[Spring] 뉴렉처강의_DI (0) | 2022.07.12 |