열심히 끝까지
디바이스 융합 자바(Java) day69(2) - ModelAndView, ViewResolver 연결 본문
디바이스 융합 자바(Java) day69(2) - ModelAndView, ViewResolver 연결
노유림 2022. 9. 20. 15:59디바이스 융합 자바 day69(1) 내용 중...
1. 사용자가 *.do 요청을 하면
2. web.xml을 읽어들이는 서블릿 컨테이너에서 서블릿 객체를 생성함
3. web.xml에 등록되어있던 "내가 만든 DS"을 "Spring에서 제공하는 DS"로 교체
4. FileNotFound 뜨게 됨
java.io.FileNotFoundException:
Could not open ServletContext resource [/WEB-INF/DispatcherServlet-servlet.xml]
>> 자동으로 new를 해주고 난 후의 에러
>> 서블릿 컨테이너는 Spring에서 제공하는 DS 객체를 생성해줄 때에 init()을 자동 실행
=> init()이 자동실행되게끔 설계된 이유?
=> 스프링 컨테이너가 [/WEB-INF/DispatcherServlet-servlet.xml]을 참고해서
POJO인 HM, C, VR의 객체 생성을 위해서
>> DispatcherServlet-servlet.xml이름의 파일을 WEB-INF 하위에 만들 것
(Spring Bean File 만들 것)
5. 등록한 서블릿의 이름-servlet.xml로 파일을 생성하면 더 이상 파일 NOTFOUND가 발생하지 않음
+ 필터 : servlet의 일종
== 필터 클래스 만들어보자!!
> 서블릿 종류이기 때문에 , web.xml에 설정해야 함
>> 콘솔창에 아무것도 안 뜨는 이유는?
.do의 요청이 없기 때문!
6. 기존에 작성한 Controller류의 클래스들은 "내가 만든 Controller"를 implements한 것들!
7. "Spring에서 제공하는 Controller로 교체!!
8. output이
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)
throws Exception 로 오버라이딩 강제
변환을 mav 객체로 해줘야함
mav 객체는 멤버변수로 viewName을 가짐
9. Handler Mapping 등록 : Handler에서 꺼내 쓰기 때문에 등록해주어야 함
>> DispatcherServlet-servlet.xml에서 진행
- 기존에는 "내가 만든 DS"의 init() 메서드에서 생성
-> 앞으로는 스프링 컨테이너가 [/WEB-INF/DispatcherServlet-servlet.xml] 참고해서 HM을 생성
=>"내가 만든 HM"을 사용하지 않고,
"Spring에서 제공하는 HM"으로 등록했기 때문에 기존의 클래스 파일을 제거해도 무방!
>> 이제 다음 파일은 필요가 없음...(구조를 위해 작성을 함)
10. HM을 제대로 사용하려면?
>> 멤버변수가 존재하기 때문에, == 의존관계가 존재하기 때문에,
DI(의존성 주입)를 반드시 해줘야 함!!!
[오전내용]
.do 요청을 했을 때, Spring에서 제공하는 DS을 사용해보자!
+ filter도 적용
>> 요청 하게 되면 init 자동 호출!
>> 일반 pojo 객체를 new 해야하는데
+ spring container 작동해야 하고 xml파일 필요!
>> dpservlet
>> mainController에 다른 점 존재 = session
+ LoginController과 비교할 것
- ModelAndView
>> java 객체라서 같은 객체를 쓰고 있다면 정보가 유지되더라!
>> 스프링컨테이너가 유지시켜주더라!!!
11. board.jsp, main.jsp등은 데이터 출력을 필요로 하는 페이지
-> 브라우저에서 절대 접근할 수 없도록 WEB-INF 하위에 관리
>> view를 만들어서 그 하위에 놔두기(그냥 놔둬도 되지만 관리를 위해)
>>>> 가지고 있는 페이지가 5개
: board랑 main은 반드시 데이터가 필요한 것
12. ViewResolver를 등록하여 VR을 통해서 화면을 제공할 예정
-> redirect :
<!-- ViewResolver 등록 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/view/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
>> 오후 수업으로 바뀐 것들
LoginController.java---------------------
package com.ryo.biz.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/*import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;*/
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
//import com.ryo.biz.member.MemberService;
import com.ryo.biz.member.MemberVO;
import com.ryo.biz.member.impl.MemberDAO;
public class LoginController implements Controller{
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
System.out.println("로그 : 로그인컨트롤러 들어옴");
MemberDAO mDAO = new MemberDAO();
MemberVO mVO = new MemberVO();
String mid=request.getParameter("mid");
String mpw=request.getParameter("mpw");
mVO.setMid(mid);
mVO.setMpw(mpw);
mVO = mDAO.selectOneMember(mVO);
ModelAndView mav = new ModelAndView();
if(mVO==null) {
mav.setViewName("login.jsp");
//return "login";
// ViewResolver가 .jsp를 추가하기 때문에 생략해서 반환
}
else {
// 브라우저단위로 유지해야하기 때문에 session 놔두어도 됨
HttpSession session = request.getSession();
session.setAttribute("member", mVO);
mav.setViewName("redirect:main.do");
// redirect를 하면 보내짐
//return "main.do";
}
return mav;
}
}
MainController.java---------------------------------
package com.ryo.biz.controller;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//import javax.servlet.http.HttpSession;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import com.ryo.biz.board.BoardVO;
import com.ryo.biz.board.impl.BoardDAO;
public class MainController implements Controller{
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
System.out.println("로그 : 메인 컨트롤러 들어옴");
BoardVO bVO = new BoardVO();
BoardDAO bDAO = new BoardDAO();
List<BoardVO> datas = bDAO.selectAllBoard(bVO);
ModelAndView mav = new ModelAndView();
// mav.addObject(속성 이름, mav) 속성 대신 사용
/*
HttpSession session = request.getSession();
session.setAttribute("datas", datas);
와 동일 다음 페이지까지 전달
다음 ModelAndView
*/
mav.addObject("datas", datas);
// mav 내부에 view이름을 세팅
mav.setViewName("main");
return mav;
}
}
DispatcherServlet-servlet.xml---------------------
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
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.xsd">
<!-- 싱글톤 패턴!! -->
<!-- HM 등록 + DI를 해야 함 -->
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<!-- SimpleUrlHandlerMapping의 설정 -->
<property name="mappings">
<props>
<!-- <prop key="string">Controller 객체를 넣을 때,</prop> -->
<prop key="/login.do">login</prop>
<prop key="/main.do">main</prop>
<prop key="/board.do">board</prop>
<prop key="/signin.do">signin</prop>
<prop key="/logout.do">logout</prop>
<prop key="/mypage.do">mypage</prop>
<prop key="/mdelete.do">mdelete</prop>
</props>
</property>
</bean>
<!-- Controller 객체 등록 -->
<!-- 위치는 어디에 있던 상관 없음 -->
<bean id="login" class="com.ryo.biz.controller.LoginController"/>
<bean id="main" class="com.ryo.biz.controller.MainController"/>
<bean id="board" class="com.ryo.biz.controller.BoardController"/>
<bean id="signin" class="com.ryo.biz.controller.SigninController"/>
<bean id="logout" class="com.ryo.biz.controller.LogoutController"/>
<bean id="mypage" class="com.ryo.biz.controller.MypageController"/>
<bean id="mdelete" class="com.ryo.biz.controller.MdeleteController"/>
<!-- ViewResolver 등록 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/view/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>순서 총정리<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
1. 사용자가 *.do 요청을 하면
2. web.xml을 읽어들이는 서블릿 컨테이너에서 서블릿 객체를 생성함
3. web.xml에 등록되어있던 "내가 만든 DS"을 "Spring에서 제공하는 DS"로 교체
4. FileNotFound 뜨게 됨
java.io.FileNotFoundException:
Could not open ServletContext resource [/WEB-INF/DispatcherServlet-servlet.xml]
>> 자동으로 new를 해주고 난 후의 에러
>> 서블릿 컨테이너는 Spring에서 제공하는 DS 객체를 생성해줄 때에 init()을 자동 실행
=> init()이 자동실행되게끔 설계된 이유?
=> 스프링 컨테이너가 [/WEB-INF/DispatcherServlet-servlet.xml]을 참고해서
POJO인 HM, C, VR의 객체 생성을 위해서
>> DispatcherServlet-servlet.xml이름의 파일을 WEB-INF 하위에 만들 것
(Spring Bean File 만들 것)
5. 등록한 서블릿의 이름-servlet.xml로 파일을 생성하면 더 이상 파일 NOTFOUND가 발생하지 않음
+ 필터 : servlet의 일종
== 필터 클래스 만들어보자!!
> 서블릿 종류이기 때문에 , web.xml에 설정해야 함
6. 기존에 작성한 Controller류의 클래스들은 "내가 만든 Controller"를 implements한 것들!
7. "Spring에서 제공하는 Controller로 교체!!
8. output이
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)
throws Exception 로 오버라이딩 강제
변환을 mav 객체로 해줘야함
mav 객체는 멤버변수로 viewName을 가짐
mav.setViewName("사용자에게 제공할 경로명");
9. Handler Mapping 등록 : Handler에서 꺼내 쓰기 때문에 등록해주어야 함
>> DispatcherServlet-servlet.xml에서 진행
- 기존에는 "내가 만든 DS"의 init() 메서드에서 생성
-> 앞으로는 스프링 컨테이너가 [/WEB-INF/DispatcherServlet-servlet.xml] 참고해서 HM을 생성
=>"내가 만든 HM"을 사용하지 않고,
"Spring에서 제공하는 HM"으로 등록했기 때문에 기존의 클래스 파일을 제거해도 무방!
>> 이제 다음 파일은 필요가 없음...(구조를 위해 작성을 함)
10. HM을 제대로 사용하려면?
>> 멤버변수가 존재하기 때문에, == 의존관계가 존재하기 때문에,
DI(의존성 주입)를 반드시 해줘야 함!!!
11. board.jsp, main.jsp등은 데이터 출력을 필요로 하는 페이지
-> 브라우저에서 절대 접근할 수 없도록 WEB-INF 하위에 관리
12. ViewResolver를 등록하여 VR을 통해서 화면을 제공할 예정
-> redirect :
'디바이스 융합 자바(Java)기반 풀스택 개발자 양성과정(수업내용)' 카테고리의 다른 글
디바이스 융합 자바(Java) day70 - Spring에 @(어노테이션) 걸기 (0) | 2022.09.21 |
---|---|
디바이스 융합 자바(Java) - Spring 관련 암기할 내용 정리 (0) | 2022.09.20 |
디바이스 융합 자바(Java) day69(1) - Spring을 DS(Dispatcher Servlet),HM(Handler Mapping),Controller에 대입 (1) | 2022.09.20 |
디바이스 융합 자바(Java) day68 - Spring에서의 MVC2 패턴 (1) | 2022.09.19 |
디바이스 융합 자바(Java) day67(2) - 바인드 변수, Jdbc Template (0) | 2022.09.16 |