잡동사니에도 사랑을

[21.11.17] (chapter06_1) 본문

SPRING

[21.11.17] (chapter06_1)

luvforjunk 2021. 11. 17. 14:51
728x90
반응형

 

* web.xml

1. web.xml에 DispatcherServlet 설정을 통해 스프링 설정 파일을 지정합니다.

2. *.do로 들어오는 클라이언트의 요청을 DispatcherServlet이 처리하도록 했다

3. DispatcherServlet은 /WEB-INF/서블릿이름-servlet.xml 파일로부터 스프링 설정 정보를 읽어온다.

 

* HelloController.java

1. 컨트롤러를 구현하려면 @Controller 어노테이션을 클래스에 적용한다.

2. @RequestMapping 어노테이션을 이용해서 클라이언트의 요청을 처리할 메소드를 지정한다.

3. ModelAndView.setViewName()메소드를 이용해서 컨트롤러의 처리 결과를 보여줄 뷰 이름을 지정한다.

 

* dispatcher-servlet.xml

1. DispatcherServlet은 스프링 컨테이너에서 컨트롤러 객체를 검색하기 때문에 스프링 설정파일에 컨트롤러를 빈으로 등록해주어야 한다

2. DispatcherServlet은 뷰이름과 매칭되는 뷰 구현체를 찾기 위해 ViewResolver를 사용한다.

3. 스프링 MVC는 JSP, Velocity, FreeMarker등의 뷰 구현 기술과의 연동을 지원하는데, JSP를 뷰 기술로 사용할 경우 InternalResourceViewResolver 구현체를 빈으로 등록해주면 된다.

4. ViewResolver가 /view/뷰이름.jsp를 뷰JSP로 사용한다는 의미이다

 

 

[예제]

Project : chapter06_1

Package : com.controller

Class : SumController.java

 

Package : com.bean

Class : SumDTO.java

 

Foler : sum

File : input.jsp

         result.jsp

 

스프링 설정 파일

/WEB-INF/dispatcher-servlet.xml → /WEB-INF/spring/appServlet/mvc-context.xml

 

 

 

////////web.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>chapter06_1</display-name>

	<!-- WAC 
	1. 웹 
	dispatcher-servlet.xml 
	-> 변경 /WEB-INF/spring/appServlet/mvc-context.xml로 변경한다. -->
	<servlet>
		<servlet-name>mvc</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<!-- 파일명이나 위치를 변경할 때 -->
		<init-param>
			<param-name>contextConfigLocation</param-name> <!-- 위치나 파일명을 바꿔줄 때 -->
			<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
			<!-- 이렇게 쓰게 되면 이제는 dispatcher를 따라가지 않는다 -->
		</init-param>

	</servlet>
	<servlet-mapping>
		<servlet-name>mvc</servlet-name>
		<url-pattern>*.do</url-pattern>
	</servlet-mapping>

	<!-- 스프링 파라메터로 한글을 넘길 때 -->
	<filter>
		<filter-name>encodingFilter</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>encodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>


	<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>
</web-app>

 

 

 

////////SumController.java

package com.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller // 내가 컨트롤러라는걸 알려주자~
public class SumController {

	@RequestMapping(value = "/input.do", method = RequestMethod.GET)
	// value = "/input.do" : 요청한 URL값
	public String input() {
		return "/sum/input";
	}

	@RequestMapping(value = "/input.do", method = RequestMethod.GET)
	public String result() { // 콜백함수
		return "/sum/result";
	}
}

 

 

 

///////input.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>
	<form name="calcForm" method="get" action="result.do">
		<table border="1" cellspacing="0" cellpadding="5">
			<tr>
				<td width="50" align="center">X</td>
				<td><input type="text" name="x"></td>
			</tr>

			<tr>
				<td width="100" align="center">Y</td>
				<td><input type="text" name="y"></td>
			</tr>

			<tr>
				<td colspan="2" align="center"><input type="submit" value="계산">
					<input type="reset" value="취소"></td>
			</tr>
		</table>
	</form>
</body>
</html>

 

 

 

여기서 잠깐!

 

 

다음과 같이 결과값을 result.jsp에 뿌려주려고 하는데, ${x }라고 쓰면 값이 나오지 않는다.

문장을 어떻게 써야 할까?

 

 

 

 

 

 

sumDTO를 사용하여 값을 도출하는 방법도 있다.

 

 

 

 

////////SumDTO.java

package com.bean;

import lombok.Data;

@Data
public class SumDTO {
	private int x;
	private int y;
}

먼저 SumDTO.java 파일을 만들어 데이터 값을 입력한다.

 

 

 

 

 

 

////////result.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>
<%-- <h1>${param.x } + ${param.y } = ${param.x + param.y }</h1>--%>
<%-- <h1>${x } + ${y } = ${x+y }</h1> --%>

<h1>${sumDTO.x } + ${sumDTO.y } = ${sumDTO.x+y }</h1>
</body>
</html>

 

 

 

[결과]

 

 

 

 

 


 

 

[예제]

Project : chapter06_1

Package : com.controller

Class : SungJukController.java

 

Package : com.bean

Class : SungJukDTO.java

Field : name, kor, eng, math, tot, avg

 

Foler : sungJuk

File : input.jsp

         result.jsp

 

스프링 설정 파일

/WEB-INF/spring/appServlet/mvc-context.xml

 

 

 

////////web.xml

<servlet>
		<servlet-name>mvc</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<!-- 파일명이나 위치를 변경할 때 -->
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>
				/WEB-INF/spring/appServlet/servlet-context.xml
				/WEB-INF/spring/appServlet/mvc-context.xml
			</param-value>
			
			<!-- 이렇게 쓰게 되면 이제는 dispatcher를 따라가지 않는다 -->
		</init-param>
	</servlet>
	<servlet-mapping>
		<servlet-name>mvc</servlet-name>
		<url-pattern>*.do</url-pattern>
	</servlet-mapping>

 

 

 

////////mvc-context.xml

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="suffix" value=".jsp"></property>
	</bean>

	<!-- <bean id="sungJukController" class="com.controller.SungJukController"></bean> -->
	<!-- 위 문장 대신 아래와 같이 작성해줘도 괜찮다 -->
	<context:component-scan base-package="com.controller" />

 

 

 

 

////////input.jsp

//--------------------------중략---------------------------

<body>
<form name="sungJukForm" method="post" action="/chapter06_1/sungJuk/result.do">
		<table border="1" cellspacing="0" cellpadding="5">
			<tr>
				<td width="50" align="center">이름</td>
				<td><input type="text" name="name"></td>
			</tr>

			<tr>
				<td width="100" align="center">국어</td>
				<td><input type="text" name="kor"></td>
			</tr>
			
			<tr>
				<td width="100" align="center">영어</td>
				<td><input type="text" name="eng"></td>
			</tr>
			
			<tr>
				<td width="100" align="center">수학</td>
				<td><input type="text" name="math"></td>
			</tr>

			<tr>
				<td colspan="2" align="center">
					<input type="submit" value="계산">
					<input type="reset" value="취소">
				</td>
			</tr>
		</table>
	</form>
</body>

 

 

 

////////SungJukController.java

package com.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.bean.SungJukDTO;

@Controller 
public class SungJukController {
	
	@RequestMapping(value = "/sungJuk/input.do", method = RequestMethod.GET)
	public String input() {
		return "/sungJuk/input";
	}
	
	@PostMapping(value = "/sungJuk/result.do")
	public String result(@ModelAttribute SungJukDTO sungJukDTO, Model model) {
		int tot = sungJukDTO.getKor() + sungJukDTO.getEng() + sungJukDTO.getMath();
		double avg = tot / 3.0;
		
		sungJukDTO.setTot(tot);
		sungJukDTO.setAvg(avg);
		
		model.addAttribute("sungJukDTO", sungJukDTO);
		return "/sungJuk/result";	 
	}
}

 

 

 

 

////////result.jsp

<body>
	<table>
		<tr>
			<th colspan="2">${sungJukDTO.name }성적</th>
		<tr>
			<td>총점 :</td>
			<td><h1>${sungJukDTO.tot}</h1></td>
		</tr>

		<tr>
			<td>평균 :</td>
			<td><h1>${sungJukDTO.avg }</h1></td>
		</tr>
	</table>
</body>

 

 

 

[결과]

 

 

728x90
반응형