자바 버전 변경.
pom.xml파일 변경 후 Maven - Update Project 클릭 해야 함.
<properties>
//자바 버전 변경 첫번째(11버전으로)
<java-version>11</java-version>
<org.springframework-version>3.1.1.RELEASE</org.springframework-version>
<org.aspectj-version>1.6.10</org.aspectj-version>
<org.slf4j-version>1.6.6</org.slf4j-version>
</properties>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.5.1</version>
<configuration>
//자바 버전 변경 두번째(EL로 변경)
//첫번째 것만 바꾸면 EL은 자동 변경됨.
<source>${java-version}</source>
<target>${java-version}</target>
<compilerArgument>-Xlint:all</compilerArgument>
<showWarnings>true</showWarnings>
<showDeprecation>true</showDeprecation>
</configuration>
</plugin>
메서드 정보를 얻어서 출력하는 예제
매개변수 이름은 (Reflection API, Class file)로 얻을 수 있음.
Class 객체를 만들어서 메서드 정보를 배열에 저장.
매개변수 목록을 배열에 저장해서
이름과 타입을 스트링조이너로 출력.
package com.fastcampus.ch2;
import java.lang.reflect.Method;
import java.lang.reflect.Parameter;
import java.util.StringJoiner;
//매개변수 이름을 얻어오기
//1. Reflection API : (간단함)jdk1.8부터 -parameters옵션으로 가능
//2. Class file : (복잡함)Reflection API로 매개변수 이름을 얻어오지 못하면 Class file로 시도
public class MethodInfo {
public static void main(String[] args) throws Exception{
//1. YoilTeller클래스의 객체를 생성
//(메서드 정보를 보고싶은 클래스명을 입력)
Class clazz = Class.forName("com.fastcampus.ch2.YoilTellerMVC");
Object obj = clazz.newInstance();
//2. 모든 메서드 정보를 가져와서 배열에 저장
Method[] methodArr = clazz.getDeclaredMethods();
for(Method m : methodArr) {
String name = m.getName(); //메서드 이름
Parameter[] paramArr = m.getParameters(); //매개변수 목록
// Class[] paramTypeArr = m.getParameterTypes();
Class returnType = m.getReturnType(); //반환타입
StringJoiner paramList = new StringJoiner(", ", "(", ")");
for(Parameter param : paramArr) {
String paramName = param.getName();
Class paramType = param.getType();
paramList.add(paramType.getName() + " " + paramName);
}
System.out.printf("%s %s%s%n", returnType.getName(), name, paramList);
}
} // main
}
컨트롤러 동작을 작성한 예제
해쉬맵을 만듬.
해쉬맵을 컨트롤러에 전달.
컨트롤러에서 해쉬맵을 작업 후 뷰 이름을 반환.
render메서드는 해쉬맵과 뷰이름을 매개변수로 받아서
뷰이름.txt 파일을 한줄씩 읽고 내려가는 것을 반복하면서
String result에 하나의 문자열로 저장.
map에 담긴 key를 하나씩 읽어서 ${key}를 value로 변경.
package com.fastcampus.ch2;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Scanner;
import java.util.Set;
class ModelController {
public String main(HashMap map) {
//작업 결과를 map에 저장
map.put("id", "asdf");
map.put("pwd", "1111");
return "txtView1"; //뷰 이름을 반환
}
}
public class MethodCall {
public static void main(String[] args) throws Exception{
HashMap map = new HashMap();
System.out.println("before:"+map);
ModelController mc = new ModelController();
String viewName = mc.main(map);
System.out.println("after :"+map);
render(map, viewName);
}
static void render(HashMap map, String viewName) throws IOException {
String result = "";
// 1. 뷰의 내용을 한줄씩 읽어서 하나의 문자열로 만든다.
Scanner sc = new Scanner(new File(viewName+".txt"));
while(sc.hasNextLine())
result += sc.nextLine()+ System.lineSeparator();
// 2. map에 담긴 key를 하나씩 읽어서 template의 ${key}를 value바꾼다.
Iterator it = map.keySet().iterator();
while(it.hasNext()) {
String key = (String)it.next();
// 3. replace()로 key를 value 치환한다.
result = result.replace("${"+key+"}", (String)map.get(key));
}
// 4.렌더링 결과를 출력한다.
System.out.println(result);
}
}