Server 만들기
- 먼저 New > Server 를 아파치 톰캣으로 만든다.
- Server폴더 안의 server.xml의 Connector 태그에 URIEncoding="UTF-8" 를 추가한다
- window > preferences 에서 Web > html, jsp 탭에서 Encoding 을 UTF-8 로 변경한다.
- 포트번호 설정(8005)
스프링 MVC Hello World 예제
- Dynamic Web Project 만들기
- 체크박스 체크(web.xml 생성)
- 필요한 jar lib 폴더에 붙여넣기
- web.xml 에서 다음과 같이 넣어놓는다.
- 스프링은 frontController 를 이미 만들어놨다. 하지만 이름이 기므로, jsp 를 미리 만들고 자동완성을 이용하여 작업을 할예정이다.(노란 줄 복사)
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
<display-name>day0801_mvcTest1</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>kosta</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>kosta</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>
- spring 은 WEB-INF 에서 환경설정 파일을 찾는다. web.xml 저 이름 kosta 의 + -servlet.xml 파일을 찾는 것이다.(자동). 즉, spring의 configuration 파일인 kosta-servlet.xml"을 만들어둬야 한다. 이것이 예전의 beans.xml 파일의 역할을 하는 것이다.
- 여기서 잠깐 ! spring MVC 구성요소와 용어
- DispatcherServlet: 클라이언트의 요청을 전달받아 컨트롤러에게 클라이언트의 요청을 전달하고 컨트롤러가 리턴한 결과 값을 View에 전달하여 알맞은 응답을 생성하도록 한다.
- HanglerMapping : 클라이언트의 요청 URL을 어떤 컨트롤러가 처리할지를 결정한다.
- Controller : 클라이언트의 요청을 처리한 뒤, 그 그결과를 DispatcherServlet에게 알려준다. 스트럿츠의 Action과 동일한 역할을 수행한다.
- 이 역할을 하려면 servlet 의 Controller 인터페이스를 구현해야 한다.(implements)
- ( framework 의존적으로 만들 때)
- 해당 인터페이스를 구현할 경우 ModelAndView 를 리턴하는 handleRequest 메소드를 오버라이드 한다.
- 이 메소드는 doGet() 이나 doPost 의 매개변수처럼 매개변수가 2개 있는데 각각 HttpServletRequest, HttpServletResponse 이라고 되어있다.
- 반환하는 ModelAndView에 상태 유지한다.
- 이 역할을 하려면 servlet 의 Controller 인터페이스를 구현해야 한다.(implements)
- model and view : 컨트롤러가 처리한 결과 정보 및 뷰 선택에 필요한 정보 를 담는다.
- model 과 view 를 한 셋트로 만든 것.
- ViewResolver: 컨트롤러의 처리 결과를 생성할 뷰를 결정한다.
- View : 컨트롤러의 처리 결과 화면을 생성한다.
- 해커들의 표적이 될 수 있으므로 숨기도록 한다.
- 즉, Hello Controller.java 를 다음과 같이 만든다.
package com.kosta.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
public class HelloController implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {
ModelAndView mav = new ModelAndView();
mav.addObject("msg", "hello Spring");
mav.setViewName("/WEB-INF/views/hello.jsp");
return mav;
}
}
- 이제 view 화면을 만든다. 위의 경로에 hello.jsp 를 다음과 같이 작성한다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>${msg}</h2>
<hr>
</body>
</html>
- 서버를 가동하고 다음의 도메인을 친다.
- http://localhost:8080/day0801_mvcTest1/hello.do 로 요청한다.
자동으로 스캔해서 객체를 생성하는 방식의 MVC
- 새 프로젝트 생성 : web.xml 생성 + lib 에 파일들 붙여넣기
- web.xml 에 dispatcher servlet 설정
- start.jsp 를 만들고, dispa.. 를 쳐서 자동완성으로 dispatcherServlet import 하면 나오는 url 복사하여 아래 xml 에 적어넣기
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
<display-name>day0801_mvcTest1</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>kosta</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>kosta</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>
- kosta servlet 만들기
<?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">
</beans>
- 이번에는 framework 의존적으로 만드는 것이 아닌, 내 마음대로 클래스를 만들 수 있도록 어노테이션으로 마크를 해주도록 한다.
- POJO(Plane Old Java Object) : 옛날 방식의 스프링에서는 컨트롤러가 되려면 스프링이 제공하는 Controller 인터페이스를 구현해야 하고 그 인터페이스의 추상메소드인 handleRequest를 오버라이딩해야만 컨트롤러를 만들 수 있었다. 이런 방식을 "프레임워크 의존적"이라고 말한다. 현재의 스프링에서는 "프레임워크 의존적"이지 않고 어떤 인터페이스를 구현할 필요도 없이 메소드 이름도 자유롭게 하여 원래 자바 클래스 만들듯이 작성하여 컨트롤러를 만들수 있다. 이런 방식을 포죠(POJO) 방식이라고 한다.
- 이 때 따로 핸들러 매핑을 오버라이드 하지 않아도 된다. 대신 @requestMapping 을 적어준다.
package day0801_mvcTest2;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class HelloController {
@RequestMapping("/hello.do")
public ModelAndView hello() {
ModelAndView mav = new ModelAndView();
mav.addObject("msg", "안녕 스프링");
//mav.setViewName("/WEB-INF/views/hello.jsp"); --> viewResolve 를 설정해주지 않았을 때
mav.setViewName("hello");
return mav;
}
}
- 이 때, view의 위치와 확장자를 설정해줄 수 있다.(설정 파일에 해당 viewResolver를 식별자로 가진 것을 찾는다. 이 때 class 에 대문자 IRVR 를 적어 자동완성을 한다.)
- suffix : 확장자
- prefix : view 의 위치
- 자동으로 앞 뒤에 붙는다.
- 네임스페이스의 context 를 체크해준다. > controller 의 패키지의 위치도 적어준다.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd">
<context:component-scan base-package="day0801_mvcTest2" />
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
- view 작성후 hello.do 로 요청한다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>${msg}</h2>
</body>
</html>
'Kosta DevOps 과정 280기 > Java' 카테고리의 다른 글
게시판 업그레이드 (0) | 2024.08.12 |
---|---|
Wrapper 클래스 (0) | 2024.08.08 |
어노테이션 기반의 DI (0) | 2024.08.01 |
DI와 XML 이용-2 (0) | 2024.08.01 |
어제 복습 (0) | 2024.08.01 |