Jam's story

[Spring] 다이나믹웹프로젝트생성과 MVC2패턴 본문

Spring

[Spring] 다이나믹웹프로젝트생성과 MVC2패턴

애플쩀 2022. 7. 13. 17:05

다이나믹 웹프로젝트 설정

 

  • 톰캣설정 

  • 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.뷰페이지 실행 

Comments