공부/그룹 스터디

[2회차 02] Controller생성

junani0v0 2024. 4. 16. 16:11

src/main/java에 controller패기지 생성하고 그안에 IndexController.java 생성

 

Tip.

src/main/java 에서 Class생성으로 들어가서 Package를 아래와같이 적어주면 패키지생성과 JavaClass파일 생성을 같이 할 수 있다

 

<?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"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="
        http://www.springframework.org/schema/beans     
        http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
        http://www.springframework.org/schema/mvc 
        http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx-4.1.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-4.1.xsd">

	<!-- The controllers are auto-detected POJOs labeled with the @Controller 
		annotation. -->
	<context:component-scan
		base-package="com.portfolio.www" use-default-filters="false">
		<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" />
	</context:component-scan>

	<bean
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/views/" />
		<property name="suffix" value=".jsp" />
	</bean>

	<mvc:resources mapping="/resources/**" location="/resources/" />

	<mvc:annotation-driven />

</beans>

 

pf-servlet.xml

@Controller
public class IndexController {
	
	public IndexController() {
		System.out.println("------------------------------생성됨----------------------------");
	}
	
}

@Controller 어노테이션 넣고 생성자를 IndexController라 하자

이제 이 클래스가 객체가 될때(스프링이 new인스턴스로 객체를 생성할때) 쉽게 확인하기위해  "----생성됨----" 프린트해본다

서버를 시작하고 Console 로그에 "----생성됨----" 가 잘 찍혔나 확인

있으면 pf-servlet.xml의 컴포넌트스캔이 잘 작동한다는 뜻

베이스패키지(com.portfolio.www)부터 시작해 filter를 찾는다 타입은 어노테이션이고 표현식은 Controller인것

즉,  com.portfolio.www아래 Controller 어노테이션을 찾는다

 

@Controller
public class IndexController {
	
	public IndexController() {
		System.out.println("--------------------------------생성됨--------------------------");
	}
	@RequestMapping("/index.do")
	public String indexPage() {
		return "index";
	}
}

indexPage를 추가해보자 이러면 분명 파일을 찾을 수 없다며  404에러가 발생할 것이다

이유는 우리가 pf-servlet.xml 에 정의한 prefix와 suffix 때문이다

String이지만 Spring mvc가 jsp라 인식해서 이파일을 찾는다

즉, 우리는 Controller에서 /WEB-INF/views/index.jsp를 넘긴건데 이 파일이 없어 에러가 발생한 것이다

그러면 /WEB-INF 아래 views폴더를 만들고 그 안에 index.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>
Hello JSP.
</body>
</html>

 

Tip.

입력-> 처리 -> 출력

input.jsp -> Servlet -> output.jsp

input에서 파라미터를 보내면 output에서 쓸 수 있다 하지만 Servlet 이 가운데에서 받고 다시 넘겨줘야한다

input이 5개를 보내도 sevlet이 받고 5개를 안보내면 output에서 5개가 아니게 된다

jsp,html에서 무조건 servlet으로 파라미터가 넘어온다 파라미터를 출력하려면 servlet에서 보내줘야된다

 

 

실습으로 우리가 http://localhost:8080/01을 입력하면 index.jsp가 열리도록 만들어보자

index.html을 hello를 아래처럼 바꿔보자

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <script>
        window.onload = function(){
            location.href="/01/index.do";
        }
    </script>
</body>
</html>

실행해보면 index.jsp의 Hello JSP. 이 잘 나옵니다

 

그렇다면 이제 input 파라미터에 값을 넣으면 output에 값을 넘겼을때 파라미터를 잘 받았는지 출력해보자

/WEB-INF/views/ 에 이제 input.jsp과 output.jsp를 만들어주자

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>전기요금 계산</title>
<style>
	body { font-size:11px;}
	table { border-width: thin; }
</style>
</head>
<body>
	<form action="/01/output.do" method="post">
		<table width="600" align="center" border="1">
			<tr>
				<th colspan="4">전기요금 계산</th>
			</tr>
			<tr>
				<td colspan="2">사용일(yyyy-mm-dd)</td>
				<td colspan="2"><input type="text" name="measureDate"  /></td>
			</tr>
			<tr>
				<td colspan="2">사용량(KWh)</td>
				<td colspan="2"><input type="text" name="eAmount"  /></td>
			</tr>
			<tr>
				<td colspan="2" align="center"> <b>정액할인</b> </td>
				<td colspan="2">해당 없음<input type="radio" name="discountType1" value="0" checked/></td>
			</tr>
			<tr>
				<td colspan="2">장애의 정도가 심한 장애인 및 상이유공자<br/>독립유공자 또는 독립유공자 권리이전 유족 1인</td>
				<td>
					해당<input type="radio" name="discountType1"  value="1"/>
				</td>
				<td>정액 할인<br/>(월 1만6천원, 여름철 2만원 한도)</td>
			</tr>
			<tr>
				<td rowspan="2">기초생활수급자</td>
				<td> 생계, 의료급여</td>
				<td>
					해당<input type="radio" name="discountType1"  value="2"/>
				</td>
				<td>정액 할인<br/>(월 1만6천원, 여름철 2만원 한도)</td>
			</tr>
			<tr>
				<td> 주거, 교육급여</td>
				<td>
					해당<input type="radio" name=discountType1  value="3"/>
				</td>
				<td>정액 할인<br/>(월 1만원, 여름철 1만2천원 한도)</td>
			</tr>
			<tr>
				<td colspan="2">
					차상위계층
					<ul>
						<li>국민기초생활보장법 제9조 5항</li>
						<li>국민건강보험법 시행령 별표2 제3호 라목</li>
						<li>장애인복지법 제49조 및 제50조</li>
						<li>한부모가족지원법 제5조</li>
						<li>우선돌봅 차상위자</li>
					</ul>
				</td>
				<td>
					해당<input type="radio" name="discountType1"  value="4"/>
				</td>
				<td>정액 할인<br/>(월 8천원, 여름철 1만원 한도)</td>
			</tr>
			<tr>
				<td colspan="2" align="center"> <b>정률할인(30%)</b> </td>
				<td colspan="2">해당 없음 <input type="radio" name="discountType2"  value="0" checked/></td>
			</tr>
			<tr>
				<td colspan="2">
					3자녀 이상 가구<br/>
					<ul>
						<li>주민등록표상 자(子) 또는 손(孫) 3인 이상</li>
					</ul>
				</td>
				<td>
					해당<input type="radio" name="discountType2"  value="1"/>
				</td>
				<td>30%할인<br/>(월 1만6천원 한도)</td>
			</tr>
			<tr>
				<td colspan="2">
					대가족 가구<br/>
					<ul>
						<li>주민등록표상 가구원수가 5인 이상</li>
					</ul>
				</td>
				<td>
					해당<input type="radio" name="discountType2"  value="2"/>
				</td>
				<td>30%할인<br/>(월 1만6천원 한도)</td>
			</tr>
			<tr>
				<td colspan="2">
					출산가구<br/>
					<ul>
						<li>주민등록표상 출생일로부터 3년 미만의 영아 기재</li>
					</ul>
				</td>
				<td>
					해당<input type="radio" name="discountType2"  value="3"/>
				</td>
				<td>30%할인<br/>(월 1만6천원 한도)</td>
			</tr>
			<tr>
				<td colspan="2">
					생명유지장치 사용고객<br/>
					<ul>
						<li>호흡기 장애 또는 희귀난치성질환</li>
					</ul>
				</td>
				<td>
					해당<input type="radio" name="discountType2"  value="4"/>
				</td>
				<td>30%할인</td>
			</tr>
			<tr>
				<td colspan="2">
					사회복지사업법에 의한 사회복지시설<br/>
				</td>
				<td>
					해당<input type="radio" name="discountType2"  value="4"/>
				</td>
				<td>30%할인</td>
			</tr>
			<tr>
				<td colspan="4">
					※ 여름철 구분 : 6월 1일 ~ 8월 31일 <br/>
					※ 기초생활수급자 및 차상위계층 정액할인은 정률할인(30%)과 중복 적용 가능 <br/>
				</td>
			</tr>
			<tr>
				<td colspan="4" align="center">
					<button type="submit"> 계산하기 </button>
				</td>
			</tr>
		</table>
	</form>
</body>
</html>

input.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@page import="java.util.*, java.text.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>전기요금 계산</title>
<style>
	body { font-size:11px;}
	table { border-width: thin; }
</style>
</head>
<body>
	<table width="600" align="center" border="1">
		<tr>
			<th colspan="4">전기요금 계산 결과</th>
		</tr>
		<tr>
			<td colspan="2"><b>사용일</b></td>
			<td colspan="2">9999-12-31</td>
		</tr>
		<tr>
			<td colspan="2"><b>사용량(KWh)</b></td>
			<td colspan="2">0 KWh</td>
		</tr>
		<tr>
			<td colspan="2"> <b>정액할인</b> </td>
			<td colspan="2">0 원</td>
		</tr>
		<tr>
			<td colspan="2"> <b>정액할인 내용</b> </td>
			<td colspan="2">0 원 할인 (월 1만6천원, 여름 2만원 한도)</td>
		</tr>
		<%--
		<tr>
			<td colspan="2" align="center"> <b>정률할인(30%)</b> </td>
			<td colspan="2"></td>
		</tr>
		 --%>
		<tr>
			<td colspan="4" align="center">
				<b> 요금 계산  </b>
			</td>
		</tr>
		<tr>
			<td colspan="4">
				① 기본요금 : 7,300 원 (3단계 단가)<br/>
				② 전력량요금 : 82,285원 (1~3단계 요금의 합계, 원미만절사) <br/>
				<ul>
					<li>1단계 : 200kWh × 120.0원 = 24,000원</li>
					<li>2단계 : 200kWh × 214.6원 = 42,920원</li>
					<li>3단계 : 50kWh × 307.3원 = 15,365원</li>
				</ul>
				<br/>
				③ 기후환경요금 : 450kWh × 9원 = 4,050원 <br/>
				④ 연료비조정요금 : 450kWh × 5원 = 2,250원 <br/>
				⑤ 전기요금계 : 93,635원 = 7,300원(①) + 82,285원(②) + 4,050원(③) <br/>
				⑥ 부가가치세 : 93,635원(④) × 10% = 9,364원 (원미만 반올림)<br/>
				⑦ 전력기반기금 93,635원(④) × 3.7% = 3,460원 (10원미만절사)<br/>
				⑧ 할인금액 : 0원 <br/>
				⑨ 청구금액 : 95,885원(⑤) + 9,589원(⑥) + 3,540원(⑦) - 0원(⑧) = 109,010원 (10원미만절사)
			</td>
		</tr>
	</table>
</body>
</html>

output.jsp

 

그리고 Controller에 잘 출력되는지 코드를 작성해 확인해보자

	@RequestMapping("/input.do")
	public String inputPage() {
		return "input";
	}
    	@RequestMapping("/output.do")
	public String outputPage() {
		return "output";
	}

서버를 시작해 input.do와 output.do가 잘 되는지 확인해보고 이제 outputPage를 param값을 받는코드로 수정해보자

	@RequestMapping("/output.do")
	public ModelAndView outputPage(@RequestParam HashMap<String, String> params) {
		System.out.println(params);
		
		ModelAndView mv = new ModelAndView();
		mv.setViewName("output");
		mv.addObject("measureDate", "2024-01-11");
		return mv;
	}

input에서 파람으로 보낸값이 잘받아지는지 params를 출력해보고

output에 measurDate를 2024-01-11로 입력해서 output에 잘 전달되는지 확인하기위해 output.jsp에 받는 코드로 수정

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@page import="java.util.*, java.text.*" %>
<% 
	String measureDate = request.getParameter("measureDate");
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>전기요금 계산</title>
<style>
	body { font-size:11px;}
	table { border-width: thin; }
</style>
</head>
<body>
	${measureDate}

getParameter로 mesureDate값을 가져와 변수 mesureDate에 넣어주고 아래 body안에서 EL표기법으로 mesureDate를 출력해 값이 제대로 나오는제 확인해보면 완성