경로설정 및 데이터 전달
경로 설정
복잔합 경로를 줄여준다
dispatcher-servlet 파일은 환경을 담당한다. 49번째 줄을 수정하여 sample jsp 파일들의 경로를 줄여준다.
경로를 수정하고 테스트 페이지를 열면 열리지 않는다.
webapp이 홈 디렉터리이므로 example 폴더의 하위 폴더들을 webapp 밑으로 옮겨준다.
옮긴 후 테스트 페이지를 열면 정상적으로 열린다.
데이터 전달
JSP 파일 생성
데이터 입력을 위한 화면을 만들어준다.
우선 jsp 파일을 넣어줄 폴더를 생성한다.
// deptWrite.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>
<style>
table {
width: 400px;
border-collapse: collapse; /* 셀 간격을 없앰 */
}
th, td {
border: 1px solid #cccccc;
padding: 5px;
}
</style>
<body>
<form name="frm" method="post" action="">
<table>
<tr>
<th>부서번호</th>
<td><input type="text" name="deptno"></td>
</tr>
<tr>
<th>부서이름</th>
<td><input type="text" name="dname"></td>
</tr>
<tr>
<th>부서위치</th>
<td><input type="text" name="loc"></td>
</tr>
<tr>
<th colspan="2">
<button type="submit">저장</button>
</th>
</table>
</form>
</body>
</html>
위와 같이 jsp 파일을 작성해준다.
controller 생성
클래스에 Controller 어노테이션을 붙여주는 것이 제일 중요하다.
어노테이션
@ : 시스템이 인식하는 주석으로 설정한 주석에 따라 기능 부여를 한다.
@Controller : 웹 주소 기록한 것을 인식하게 함
@RequestMapping : 웹 주소를 기록
@Controller
public class DeptController {
@RequestMapping(value="/deptWrite.do")
public String deptWrite() {
return "dept/deptWrite";
}
}
위와 같이 controller를 작성하고 서버를 가동하여 테스트한다.
위와 같이 입력화면이 나타난다.
이때 데이터 처리에 대한 작업은 아직 하지않았으므로 저장 버튼을 클랙했을 때 아무일도 일어나지 않는다.
데이터 처리
JSP 파일 수정
// deptWrite.jsp
<form name="frm" method="post" action="deptWriteSave.do">
form 태그 action 속성에 deptWriteSave.do 추가
메서드 추가
@Controller
public class DeptController {
@RequestMapping(value="/deptWrite.do")
public String deptWrite() {
return "dept/deptWrite";
}
/* 입력화면에서 저장 버튼 클릭하면 실행되는 메서드 */
@RequestMapping(value = "/deptWriteSave.do")
public String deptWriteSave(String deptno, String dname, String loc) {
System.out.println("부서번호 : " + deptno);
System.out.println("부서이름 : " + dname);
System.out.println("부서위치 : " + loc);
return "";
}
}
controller 파일에 데이터 처리를 위한 메서드를 추가해준다.
입력화면에서 저장버튼을 눌러 해당 메서드가 실행되면 html의 이름값을 자바가 인식하여 매개변수로 데이터가 들어간다.
서버를 가동해서 테스트해본다.
정상적으로 동작하는 것을 확인할 수 있다.
만약에 처리할 데이터가 많아진다면 어떻게 될까?
매개변수로 하나씩 받을 수는 있으나 굉장히 번거로운 작업일 될 것이다.
그래서 전자정부프레임워크에서는 VO 클래스를 사용하여 데이터를 처리한다.
VO 클래스는 서비스 패키지에 생성해준다.
package egovframework.example.sample.service;
public class DeptVO {
// 객쳅지향 : 캡슐화(접근지정자)
private String deptno;
private String dname;
private String loc;
public String getDeptno() {
return deptno;
}
public void setDeptno(String deptno) {
this.deptno = deptno;
}
public String getDname() {
return dname;
}
public void setDname(String dname) {
this.dname = dname;
}
public String getLoc() {
return loc;
}
public void setLoc(String loc) {
this.loc = loc;
}
}
캡슐화된 데이터에 접근하기 위해서 getter, setter를 생성한다.
이클립스에서 제공하는 기능을 사용하여 쉽게 생성할 수 있다.
@RequestMapping(value = "/deptWriteSave.do")
public String deptWriteSave(DeptVO vo) {
System.out.println("부서번호 : " + vo.getDeptno());
System.out.println("부서이름 : " + vo.getDname());
System.out.println("부서위치 : " + vo.getLoc());
return "";
}
DeptController 클래스의 deptWriteSave 메서드를 위와 같이 수정해주고 서버를 가동하면 동일하게 정삭작동 하는 것을 볼 수 있다.
데이터가 처리되는 과정은 다음과 같다.
저장 버튼 클릭 ➡️ 액션에 설정된 주소로 데이터 전송 ➡️ 컨트롤러에서 해당 주소의 매개변수(VO 객체)로 데이터 전달
➡️ 똑같은 이름을 가진 매개변수를 찾아 데이터 들어감