2019/07/18 - [웹/JAVA] - Try Catch문으로 오류잡기

 

Try Catch문으로 오류잡기

포워딩(전송)을 하게되면 오류가 발생할 수 있는데 이 오류를 두 가지로 나눌 수 있다. 컴파일오류와 실행오류이다. 컴파일오류는 오타를 쳤을때고 Java에서 알려준다. 실행오류는 예를 들어 무한 for문이다. 내가..

golddigger.tistory.com

 

 

 

실무에서는 syso 사용을 안한다. syso을 개발서버나 다른서버에 올리면 안된다. 굉장히 속도가 느리기 때문이다. 

그래서 개인 개발용으로만 사용하는 것이 좋다


Logger를 써야한다. 얘는 한줄만 있어야 한다. 
1. log.info( ); 
2. log.debug( );  
시간과 무엇으로 그리고 어디에서 찍혔는지 콘솔에 찍힌다. 

package egovframework.example.welcomeWeb.web;

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;

import javax.annotation.Resource;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;

import egovframework.example.welcomeWeb.service.WelcomeWebService;
import egovframework.rte.psl.dataaccess.util.EgovMap;

@Controller
public class WelcomeWebController { 
	
	private final Logger log = LoggerFactory.getLogger(getClass());
	
	@Resource
	private WelcomeWebService welcomeWebService;

	@RequestMapping(value = "/welcomeWeb.do")
	public String welcomeWeb(ModelMap model) {
		
		try {
			String nulls = null;
			
			System.out.println(nulls.toString());
			
			List<EgovMap> welcomeWebList = welcomeWebService.selectWelcomeWebServiceList(); 
			System.out.println(welcomeWebList);
			
			//List를 Map에 담아 출력해보기
			HashMap<String, Object> exceptionMap = new HashMap<String, Object>();
			
			for (int i = 0; i < welcomeWebList.size(); i++) {
				exceptionMap.put((String) welcomeWebList.get(i).get("seqNo"), welcomeWebList.get(i).getValue(1));
			}
			
			System.out.println("exceptionMap : " + exceptionMap);
			
			//담은 Map의 데이터를 배열로 출력해보기
			String[] arrStr = new String[exceptionMap.size()];
			
			for (int i = 0; i < exceptionMap.size()+2; i++) {
				arrStr[i] = (String) exceptionMap.get(String.valueOf(i+1));
			}
			
			System.out.println("arrStr : " + Arrays.toString(arrStr));
			
			List<EgovMap> pieChartList = welcomeWebService.selectPieChartList();
			System.out.println(pieChartList);
			
			model.addAttribute("welcomeWebList", welcomeWebList);
			model.addAttribute("pieChartList", pieChartList);
		
		} catch (ArrayIndexOutOfBoundsException ae) {
			//System.out.println(ae + "배열의 길이를 확인해!");
			
			log.info(ae + "배열의 길이를 확인해!");
		} catch (NullPointerException ne) {
			//System.out.println(ne + "null있다.");
			
			log.info(ne + "null있다.");
		} catch (Exception e) {
			//System.out.println(e + "그 외 모든 오류들");
			
			log.debug(e + "그 외 모든 오류들");
		} finally {
			//System.out.println("welcomeWeb Controller에서 오류");
			//System.out.println("오류가 나던 안 나던 출력");
			log.debug("welcomeWeb Controller에서 오류");
			log.debug("오류가 나던 안 나던 출력");
		}
		
		return "welcomeWeb/welcomeWeb.tiles";
	}
}

 

 

++로그레벨 보는 법 
로그의 레벨을 설정한다고 한다. 왼쪽에서 오른쪽으로 읽는다. 

로그레벨

 

 

로그는 log4j2.xml에서 설정한다. 

egovframework를 사용하고 있기 때문에 여기에 설정한다.

 

 

test.log위치를 찾아서 log4j2.xml에 설정해준다.

 

프로그램을 실행시키면 콘솔창과 test.log에 잘 찍혀있는 것을 볼 수 있다.

 

syso하든 log를 찍든 그 목적은 파일을 떨구기 위해서다. 오류를 찾기보다 파일로 기록을 남기기 위해서다. 

책임을 떠맡기 싫어서 파일로 남겨둔다. 그래서 사용자가 로그인하거나 로그아웃할때 사용한다.

log는 데일리로 보관한다. 폴더명이 날짜별로 떨궈진다.

 

 

 

 

 

 

 

출처  :  한큐에 자바 수강내용 

포워딩(전송)을 하게되면 오류가 발생할 수 있는데 이 오류를 두 가지로 나눌 수 있다. 
컴파일오류와 실행오류이다. 
컴파일오류는 오타를 쳤을때고 Java에서 알려준다. 

실행오류는 예를 들어 무한 for문이다. 내가 생각한 결과물과 다른 결과물이 나올때다. 

서버는 잘뜨나 실행이 되지 않는다.

 

 

다루어볼 것은 실행오류에 대한 처리이다.
오류는 시스템 오류와 예외가 있다. 
시스템 오류는 잡을 수 없다.

예외는 내가 생각한 거와 다른 결과물로 프로그래밍으로 제어(제거)할 수가 있다.

 

모든 오류의 부모는 Throwable이다.
우리가 제어 할 수 있는 예외의 부모는 Exception이고, 
우리가 제어할 수 없는 시스템 오류의 부모는 error이다.


 



실무에서 사용하는 ExceptionHandling이다.

Exception오류는 콘솔에 안 뜬다. 왜냐하면 자바컴파일러는 오류로 생각하지 않기 때문이다. 

구조

실행오류예외처리 (RuntimeException)
try catch문을 사용해서 콘솔에 오류가 뜨게 만든다. 
try catch는 try구문 안에서 RuntimeException같은 종류의 오류가 발생하면 무조건 catch문을 타게된다. 


++실무에서 운영서버나 test서버에 프로젝트를 올리게 되면 Java파일을 올리는 것이 아니라 class파일을 올리게 된다. 
오류가 나게 되면 의지할 수 있는 곳은 콘솔 밖에 없다. 그러면 콘솔과 내 로컬 서버를 비교하면서 오류를 찾게 된다. 
그렇기 때문에 어떠한 오류가 났는지 확인 하도록 값을 같이 찍어준다.

 

@Controller
public class WelcomeWebController { 
	
	@Resource
	private WelcomeWebService welcomeWebService;

	@RequestMapping(value = "/welcomeWeb.do")
	public String welcomeWeb(ModelMap model) {
		
		try {
			//String nulls = null;
			
			//System.out.println(nulls.toString());
			
			List<EgovMap> welcomeWebList = welcomeWebService.selectWelcomeWebServiceList(); 
			System.out.println(welcomeWebList);
			
			//List를 Map에 담아 출력해보기
			HashMap<String, Object> exceptionMap = new HashMap<String, Object>();
			
            //여기서 오류냄
			for (int i = 0; i < welcomeWebList.size()+2; i++) {
				exceptionMap.put((String) welcomeWebList.get(i).get("seqNo"), welcomeWebList.get(i).getValue(1));
			}
			
			System.out.println("exceptionMap : " + exceptionMap);
			
			//담은 Map의 데이터를 배열로 출력해보기
			String[] arrStr = new String[exceptionMap.size()];
			
			for (int i = 0; i < exceptionMap.size(); i++) {
				arrStr[i] = (String) exceptionMap.get(String.valueOf(i+1));
			}
			
			System.out.println("arrStr : " + Arrays.toString(arrStr));
			
			
			List<EgovMap> pieChartList = welcomeWebService.selectPieChartList();
			System.out.println(pieChartList);
			
			model.addAttribute("welcomeWebList", welcomeWebList);
			model.addAttribute("pieChartList", pieChartList);
		
		} catch (Exception e) {
			System.out.println(e + "그 외 모든 오류들");
		} 
		
		return "welcomeWeb/welcomeWeb.tiles";
	}
}

 

 


 



보통 array오류와 nullpoint오류가 많이 난다. 팀프로젝트에서는 test서버에서는 확인하기 힘들어서 꼭 예외 처리해준다.

일단, try문에 String 변수에다가 null을 넣어준다.

@Controller
public class WelcomeWebController { 
	
	@Resource
	private WelcomeWebService welcomeWebService;

	@RequestMapping(value = "/welcomeWeb.do")
	public String welcomeWeb(ModelMap model) {
		
		try {
			String nulls = null;
			
			System.out.println(nulls.toString());
			
			List<EgovMap> welcomeWebList = welcomeWebService.selectWelcomeWebServiceList(); 
			System.out.println(welcomeWebList);
			
			//List를 Map에 담아 출력해보기
			HashMap<String, Object> exceptionMap = new HashMap<String, Object>();
			
			for (int i = 0; i < welcomeWebList.size(); i++) {
				exceptionMap.put((String) welcomeWebList.get(i).get("seqNo"), welcomeWebList.get(i).getValue(1));
			}
			
			System.out.println("exceptionMap : " + exceptionMap);
			
			//담은 Map의 데이터를 배열로 출력해보기
			String[] arrStr = new String[exceptionMap.size()];
			
			for (int i = 0; i < exceptionMap.size()+2; i++) {
				arrStr[i] = (String) exceptionMap.get(String.valueOf(i+1));
			}
			
			System.out.println("arrStr : " + Arrays.toString(arrStr));
			
			List<EgovMap> pieChartList = welcomeWebService.selectPieChartList();
			System.out.println(pieChartList);
			
			model.addAttribute("welcomeWebList", welcomeWebList);
			model.addAttribute("pieChartList", pieChartList);
		
		} catch (ArrayIndexOutOfBoundsException ae) {
			System.out.println(ae + "배열의 길이를 확인해!");
		} catch (NullPointerException ne) {
			System.out.println(ne + "null있다.");		
		
		return "welcomeWeb/welcomeWeb.tiles";
	}
}

변수를 참조해서 실행하는데 우리가 변수에 null을 했기 때문에 참조할 수 없다. 그래서 콘솔에 nullpoint오류가 난다.

 

 


 


여러 오류가 발생한다면, 앞에 오류가 나오면 그 뒤에 오류는 안나온다. 

그래서 무슨 오류가 나오는지 여러 오류처리를 해야한다.
어디 controller에서 나온 오류인지 확인할 수 있도록 controller명도 같이 찍어준다.

@Controller
public class WelcomeWebController { 
	
	@Resource
	private WelcomeWebService welcomeWebService;

	@RequestMapping(value = "/welcomeWeb.do")
	public String welcomeWeb(ModelMap model) throws Exception{
		
		try {
			String nulls = null;
			
			System.out.println(nulls.toString());
			
			List<EgovMap> welcomeWebList = welcomeWebService.selectWelcomeWebServiceList(); 
			System.out.println(welcomeWebList);
			
			//List를 Map에 담아 출력해보기
			HashMap<String, Object> exceptionMap = new HashMap<String, Object>();
			
			for (int i = 0; i < welcomeWebList.size(); i++) {
				exceptionMap.put((String) welcomeWebList.get(i).get("seqNo"), welcomeWebList.get(i).getValue(1));
			}
			
			System.out.println("exceptionMap : " + exceptionMap);
			
			//담은 Map의 데이터를 배열로 출력해보기
			String[] arrStr = new String[exceptionMap.size()];
			
			for (int i = 0; i < exceptionMap.size()+2; i++) {
				arrStr[i] = (String) exceptionMap.get(String.valueOf(i+1));
			}
			
			System.out.println("arrStr : " + Arrays.toString(arrStr));
			
			List<EgovMap> pieChartList = welcomeWebService.selectPieChartList();
			System.out.println(pieChartList);
			
			model.addAttribute("welcomeWebList", welcomeWebList);
			model.addAttribute("pieChartList", pieChartList);
		
		} catch (ArrayIndexOutOfBoundsException ae) {
			System.out.println(ae + "배열의 길이를 확인해!");
			
			System.out.println("welcomeWeb Controller에서 오류");
		} catch (NullPointerException ne) {
			System.out.println(ne + "null있다.");
			
			System.out.println("welcomeWeb Controller에서 오류");
		} 
		
		return "welcomeWeb/welcomeWeb.tiles";
	}
}

 

 


 

 

오류가 나던 안 나던 무조건 타게 만드는 메서드는 finally이다. try catch문에서만 실행이 된다. 

@Controller
public class WelcomeWebController { 
	
	@Resource
	private WelcomeWebService welcomeWebService;

	@RequestMapping(value = "/welcomeWeb.do")
	public String welcomeWeb(ModelMap model) throws Exception{
		
		try {
			String nulls = null;
			
			System.out.println(nulls.toString());
			
			List<EgovMap> welcomeWebList = welcomeWebService.selectWelcomeWebServiceList(); 
			System.out.println(welcomeWebList);
			
			//List를 Map에 담아 출력해보기
			HashMap<String, Object> exceptionMap = new HashMap<String, Object>();
			
			for (int i = 0; i < welcomeWebList.size(); i++) {
				exceptionMap.put((String) welcomeWebList.get(i).get("seqNo"), welcomeWebList.get(i).getValue(1));
			}
			
			System.out.println("exceptionMap : " + exceptionMap);
			
			//담은 Map의 데이터를 배열로 출력해보기
			String[] arrStr = new String[exceptionMap.size()];
			
			for (int i = 0; i < exceptionMap.size()+2; i++) {
				arrStr[i] = (String) exceptionMap.get(String.valueOf(i+1));
			}
			
			System.out.println("arrStr : " + Arrays.toString(arrStr));
			
			List<EgovMap> pieChartList = welcomeWebService.selectPieChartList();
			System.out.println(pieChartList);
			
			model.addAttribute("welcomeWebList", welcomeWebList);
			model.addAttribute("pieChartList", pieChartList);
		
		} catch (ArrayIndexOutOfBoundsException ae) {
			System.out.println(ae + "배열의 길이를 확인해!");
		} catch (NullPointerException ne) {
			System.out.println(ne + "null있다.");
		} finally {
			System.out.println("welcomeWeb Controller에서 오류");
			
			System.out.println("오류가 나던 안 나던 출력");
		}
		
		return "welcomeWeb/welcomeWeb.tiles";
	}
}

 

 


 


모든 실행오류를 적어줄 수 없지만 어떤 오류인지 알수 없기 때문에 최상위 Exception를 적어준다. 
이 최상위를 위에 적어주면 나머지 오류는 실행되지 않기 때문에 최상위 Exception을 맨 아래에 넣는다.

이 오류는 꼭 있어야 하는 처리문이다.

@Controller
public class WelcomeWebController { 
	
	@Resource
	private WelcomeWebService welcomeWebService;

	@RequestMapping(value = "/welcomeWeb.do")
	public String welcomeWeb(ModelMap model) throws Exception{
		
		try {
			String nulls = null;
			
			System.out.println(nulls.toString());
			
			List<EgovMap> welcomeWebList = welcomeWebService.selectWelcomeWebServiceList(); 
			System.out.println(welcomeWebList);
			
			//List를 Map에 담아 출력해보기
			HashMap<String, Object> exceptionMap = new HashMap<String, Object>();
			
			for (int i = 0; i < welcomeWebList.size(); i++) {
				exceptionMap.put((String) welcomeWebList.get(i).get("seqNo"), welcomeWebList.get(i).getValue(1));
			}
			
			System.out.println("exceptionMap : " + exceptionMap);
			
			//담은 Map의 데이터를 배열로 출력해보기
			String[] arrStr = new String[exceptionMap.size()];
			
			for (int i = 0; i < exceptionMap.size()+2; i++) {
				arrStr[i] = (String) exceptionMap.get(String.valueOf(i+1));
			}
			
			System.out.println("arrStr : " + Arrays.toString(arrStr));
			
			List<EgovMap> pieChartList = welcomeWebService.selectPieChartList();
			System.out.println(pieChartList);
			
			model.addAttribute("welcomeWebList", welcomeWebList);
			model.addAttribute("pieChartList", pieChartList);
		
		} catch (ArrayIndexOutOfBoundsException ae) {
			System.out.println(ae + "배열의 길이를 확인해!");
		} catch (NullPointerException ne) {
			System.out.println(ne + "null있다.");
		} catch (Exception e) {
			System.out.println(e + "그 외 모든 오류들");
		} finally {
			System.out.println("welcomeWeb Controller에서 오류");
			
			System.out.println("오류가 나던 안 나던 출력");
		}
		
		return "welcomeWeb/welcomeWeb.tiles";
	}
}

 

 


 


try catch는 내가 책임지겠다는 것이고 throws exception는 나를 호출한 놈한테 책임을 주는 것이다. 책임회피다.
try랑 throw를 같이 적어주면 안된다.  controller에는 throw exception을 적어주지 않는 것을 추천한다. 

throw Exception의 controller에 적어주면 Java 뒷단에 책임을 지게 한다.

 

만약에 try랑 throws 둘다 안 적어주면 service에 오류가 난다.  

throws는 남이 호출한 메서드에 책임을 떠 앉게 해주기 때문이다.

 

 

 

 

 

 

 

출처  :  한큐에 자바 수강내용

Java에서 나머지를 구하는 연산자인 모드에 대해 알아보겠다.

 

welcome_Web DB데이터
welcomeWeb select문
welcomeWeb2.jsp
welcomeWeb Controller
결과값

welcomeWebList라는 빈공간을 만들어줬다. 

welcomeWeb의 조건문을 돌려서 나온 값을 welcomeWebList에 담아 출력하는 로직이다.

welcomeWeb의 size는 db를 확인했을 때 7줄이다.

짝수를 구하는 조건문으로 배열은 0부터 시작하기 때문에 i에 0부터 6까지 차례대로 들어가서 값을 출력한다. 

결과값에서 홀수로 글번호가 나오는데 배열이기 때문에 짝수가 맞다.

 

참고로, List를 얻어올 때는 get( )이고 List를 추가할 때는 add( )이다.

welcomeWeb의 값을 get으로 얻어와서 welcomeWebList에 add로 추가해

결과값을 model.addAttribute( )로 화면에 내린다.

 

 

 

 

 

 

 

 

 

참고  :  한큐에 자바 수강내용

<script>
	var arrayLiteral = ["a", "b", "c"];
	
	$("#arr").val(arrayLiteral);
				
	alert(typeof $("#arr").val());
				
	$("#frm").submit();
</script>

<form id="frm">
	<input type="hidden" id="arr" name="arr"/>
</form>

split( )메서드의 사용법에 대해 알아보겠다.

arr의 타입은 문자열(String)이다.

문자열을 배열로 만들 때 사용하는 메서드는 split( )이다. 

괄호에 콜론( , )을 넣어주면 ,를 기준으로 나눈다.

Java는 배열을 쓸때 [ ]대괄호를 사용한다. 
String[ ]  arr = srt.split(",");
Java처럼 변수 앞에 타입을 적어주는 것을 정적타입언어라고 한다.
JavaScript처럼 타입을 안 적고 var를 쓰는 것을 동적타입언어라고 한다.

 

 


 

 

전체 배열을 출력하는 방법 

for (String a : arr)  {
    System.out.println(a);

을 기준으로 왼쪽(a)은 변수, 오른쪽(arr)은 배열이다. 

for문 돌때마다 배열의 0번째부터 순서대로 변수에 값을 넘겨준다.
배열의 타입과 변수를 담을 타입은 같아야한다. 

그리고 내가 마음대로 for문을 중간에서 멈출 수 없다.

 

 


 

 

배열을 콘솔에 찍으면 주소값이 찍힌다.

int는 기본타입이라고 한다. 기본타입은 stack에 변수와 값이 쌓인다.
반면에, 배열이나 String타입을 참조타입이라고 하는데, 참조하는 것을 가리키는 역할을 한다 얘네는 heap에 쌓인다.
heap이라는 공간에 값이 있고 그 값을 stack이 가리킨다. 
즉, heap 안에 있는 참조타입은 콘솔에 주소값이 찍힌다.
주소값이 아닌 값을 나오게 하려면 Arrays클래스에 toString( )를 사용한다. 

 

 


 

 

주소창에 http://localhost:8080/arrayInit/main.do?arr=a%2Cb%2Cc&pageName=main 라고 되어있는데
?뒤에는 콤마(,)가 인코딩 되서 이상하게 보인다. 보안상 이상한 문자열로 출력한다.

저 부분을 지우면 에러가 뜬다. arr이란 키를 화면에서 보내지 않았기 때문이다.

 

Null Exception이 발생한다.

에러의 발성원인은 값이 null이 아니라 split를 썼기 때문이다. 

null을 split한다는 것은 split할 것이 없기때문에 에러가 난다.
 String[ ] arr = srt.split(",");   <- 이거때문!! 

그래서 split을 쓸때에는 null처리를 해야한다. 해당 결과를 null인지 아닌지 체크를 꼭 해야한다.

화면에 데이터를 내릴 때는 @ModelMap타입을 사용한다. (ModelMap을 파라미터로 적어준다.)
controller에 model.addattribute("A",  B);  라고 적어주는데 A는 키 B는 벨류다.  

A는 Model에 담을 때 키의 명칭으로 외운다.

 

http://localhost:8080/arrayInit/main.do?arr=a%2Cb%2Cc&pageName=main 

?뒤에 주소창을 지워도 에러가 나지 않는다.

 

 


 

 

열거형 인터페이스Enumeration을 이용해서 배열을 출력해본다.

request.getParameterNames( ); 은 열거형 인터페이스 타입이다. 

 

Enumeration은 객체들의 집합에서 각각의 객체들을 한순간에 하나씩 처리할 수 있는 메소드를 제공하는 켈렉션이다.

getParameterNames가 화면에서 올린 키를 여기에 다 넣어준다 (벨류X 키만!!)

열거형 인터페이스엔 커서가 하나씩 다 있다
열거형에서 화면에서 올린 키는 data이다. 자신의 데이터(벨류)인것이다. 
열거형 인터페이스는 암묵적으로 while문을 사용한다. 커서의 오른쪽에 있는 데이터를 준다(for문 돌고 주고 ...)
자기 데이터를 주면서 커서가 이동하는 형식이다.

화면에서 올린 키를 적어주면 값도 뽑아 낼 수도 있다.

 

 


 

 

checkbox는 name들이 같다. 같은 키(name)에 다른 값이 들어간다.

 

첫 번째, 체크박스를 클릭하고 submit하면 주소창에 내가 클릭한 체크박스의 값이 나온다.

이후에 여러 개의 체크박스를 클릭해도 콘솔창에 하나의 값만 출력된다.

request.getParameter( )때문이다. 얘는 하나의 키가 하나의 값을 가져온다.

 

reuqest.getParameterValues( )는 여러 개의 값을 가져올 수 있다. 

리턴타입은 string이다. 

한개든 여러개든 배열에 다 때려 박지 말고 하나일 때는 String으로 여러 개 일때는 배열로 담아 보낸다.

얘는 split 안 써도 되고 한 번에 배열로 받을 수 있다.

 

 

 

 

출처  :  한큐에 자바 수강내용

' > JAVA' 카테고리의 다른 글

Try Catch문으로 오류잡기  (0) 2019.07.18
나머지를 구하는 연산자 %(모드)  (0) 2019.07.12
화면에 데이터를 내리는 ModelMap  (0) 2019.07.04
HttpServletRequest 객체  (0) 2019.07.01
Controller(컨트롤러)의 역할  (0) 2019.07.01

ModelMap  :

화면에 데이터를 내릴 때에는 ModelMap타입을 사용한다. (ModelMap을 파라미터로 적어준다)

model.addAttribute("A",  B); 

A는 키 B는 벨류다.  A를 model에 담을 때에 키의 명칭으로 알아둔다.

 

List  :  

List명(welcomeWebList)은 forEach태그의 items속성명과 같고 model.addAttribute의 키값과 같다.

forEach태그 반복문이다.

JSTL에서 forEach문은 반복문이고 items은 model.addAttribute의 키값이다. 

키를 적어주면 값(벨류)이 빠진다. 그 결과의 개수만큼 반복문이 나온다.

콘솔창에 결과값이 나오는데 

[ { seqNo=1, userName = 문어, age=3, coutnry = 한국, etc=국내산}, {seqNo=2, userName=상어..} ] 

이렇게 콘솔에 출력되는데

[ ]: 대괄호는 List,
{ }: 중괄호는 한 줄이다. 여기안에서 결과값 만큼 반복된다.

화면에 이렇게 한 줄씩 출력된다. 

EgovMap  : 

seqNo=1, userName = 문어, age=3, coutnry = 한국, etc=국내산.. 

콘솔을 보면  키와 벨류 형식을 출력된다. 

EgovMap타입은

대문자를 소문자로 바꿔준다.  그리고 언더바 다음에 나오는 글자는 언더바 없애고 대문자로 나오게 한다.

ex)

SEQ_NO  -> seqNo

USER_NAME  ->  userName

AGE  ->  age

 

 

출처  : 한큐에 자바 수강내용

클라이언트의 요청정보를 확인하기 위해서 HttpServletRequest 객체를 사용한다

보통 URL에 대한 정보를 취득하기 위해 많이 사용하고 이 정보를 서버에 전달한다

initMain에 매개변수(아규먼트)를 적어주는데 HttpServletRequest란 객체타입에 request라는 매개변수를 적어준다

request는 클래스, getParameter는 메서드다

빨간색  :  메서드명

주황색  :  매개변수

노랑색  :  반환타입

HttpServletRequest객체는 화면에 파라미터를 쿼리스트링 형식으로 올려준다

key = value  이런 모양이 쿼리스트링 형식이다

request에는 화면에서 올린 키들이 들어가 있다

 

 

 

 

출처  :  한큐에 자바 수강내용

controller(컨트롤러)는 정보를 데이터로 받고, 원하는 곳으로 주는 역할을 한다

즉, 주고 받는 역할을 한다

그리고 실무에서 업무 폴더당 하나의 컨트롤러 파일만 존재한다

 

 

1번  :  @Controller(컨트롤러 어노테이션)은 클래스명 한 칸위에 위치한다

2번  :  @RequestMapping(리퀘스트매핑 어노테이션)은 주소값(main.do)은 유일해야 한다

3번  :  /(슬래쉬)를 기준으로 왼쪽은 jsp폴더명이고 오른쪽은 jsp폴더 안에 있는 jsp파일명이다 

 

 

 

출처 : 한큐에 자바 수강내용

Tiles(타일즈)란 웹 페이지의 상단, 하단과 메뉴같이 

반복적으로 사용되는 부분들에 대한 정보를 한 곳에 모아둔 프레임워크다.

반복되는 부분을 설정파일에 한 번만 설정한다. 만약 변화가 있더라도 일부만 변경하면 된다.

 

 

Tiles를 설정해본다

먼저, eGovFrame Web Project를 실행하여 새 프로젝트를 만든다

 

 

프로젝트 명과 그룹 아이디를 작성한다

 

 

바로 Finish 하지 말고 next 눌러서 예시로 나온 파일들을 생성한다

Generate Example 체크박스를 체크한다

 

 

pom.xml를 열어서 Tiles버전을 설정해준다

pom.xml에서 버전을 적어주는 곳은 properties이다

 

 

pom.xml에는 dependency가 있는데 dependency하나당 jar파일이 적게는 하나에서 다섯 개 정도이다

dependency역할은 특정 사이트에서 jar파일을 받아온다

dependency를 적는 것을 의존성 주입이라고 한다

 

 


 

Tiles를 설정하면 관련된 Tiles jar파일들이 Maven에 설치된다

Maven이란 pom.xml파일에서 Spring(스프링)이나 프레임워크가 동작할 수 있게 jar파일들을 관리하는 역할을 한다

Maven에 있는 jar파일은 클래스 압축파일이다. 이 압축파일은 JAVA만 알아먹을 수 있는 파일이다

jarPackage explorer에서만 확인이 가능하다

 

 

dispatcher-servlet.xml로 간다

xml파일은 보통 resources폴더에 있는데 dispatcher-servlet.xmlwebapp에 있는 이유는 화면단을 설정하기 때문이다

 

 

여기서 Tiles의 뷰와 레이아웃을 설정해준다

 

 

jsp파일 경로가 dispatcher-servlet에 적혀 있다

그래서 따로 jsp파일은 .jsp가 붙지 않아도 알아서 인식된다 (.jsp는 확장자명)

Tiles확장자를 가지고 있는 프로퍼티를 우선순위 1로 두고 jsp확장자는 2로 두었다

Tiles확장자가 지워지면 자동적으로 jsp확장자가 적용된다

 

여기까지가 Tiles설정 방법이다

 

 

 

 

출처 : 한큐에 자바 수강내용

Controller에서 url이 넘어가는 방법을 알아보겠다.

JAVA에서 또 다른 Controller를 호출할 수 있다. 두 가지 방법이 있는데, forward와 redirect다.

 

먼저, redirect는 브라우저가 동작시킨다. 해당 브라우저한테 이 주소로 가라고 명령한다.  

redirect는 request와 response객체를 공유하지 않는다. 

redirect는 그 화면을 단순히 호출하고 싶을때 사용한다. 해당 Controller에서 왔다갔다 두번 동작한다.


그리고 forward는 브라우저까지 가지 않는다. JAVA 서버단에서만 이동한다. 

request와 response객체를 공유한다. 해당 Controller에서 왔다갔다 한번 동작한다.

 

@RequestMapping(value="/thatMove.do") 
public String saveJoinMbrProc(HttpServletRequest request,
		HttpServletResponse response) { 
	return "redirect:/thisMove.do"; 
}


@RequestMapping(value="/thisMove.do") 
public String thisMove(HttpServletRequest request
		HttpServletResponse response) {
	return "forward:/thatMove.do";   
} 

Session은 서버로 접근하는 클라이언트를 확인하는 방법이다.

클라이언트가 정보를 요청하면 웹 서버에 저장한다. 

Session은 회원가입, 로그인에 무조건 사용한다. 시간도 설정할 수 있다. 


Controller에서 Controller를 호출하면 위험하다. 무조건 Session과 같이 사용해야 한다.
Session없이 forward를 사용하면 유효성검사 등을 다 뛰어넘기 때문에 위험하다.  

 

 


<session도 따로 공부하기>

 

출처 :  한큐의 자바 수강내용

+ Recent posts