※ JAVA 버전 BuildPath에서 확인 후 수정하기
자신이 현재 가진 자바의 버전과 일치하지 않는다면 unbound나 빨간엑스가 생길 수 있다. 그때 꼭 이 설정을 잘 확인하자.
※조금 더 상세한 console 창 확인을 위해 log4.xml 설정 변경
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<!-- Appenders -->
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p: %c - %m%n" />
</layout>
</appender>
<!-- Application Loggers -->
<logger name="com.mycom.app">
<level value="info" />
</logger>
<!-- 3rdparty Loggers -->
<logger name="org.springframework.core">
<level value="info" />
</logger>
<logger name="org.springframework.beans">
<level value="info" />
</logger>
<logger name="org.springframework.context">
<level value="info" />
</logger>
<logger name="org.springframework.web">
<level value="info" />
</logger>
<!-- Root Logger -->
<root>
<priority value="debug" />
<appender-ref ref="console" />
</root>
</log4j:configuration>
이곳은 각 로그들에 대하여 콘솔창에 출력 되는 정보의 레벨 기준을 정하는 파일이다.
여기에서 root logger의 레벨이 원래는 warn 이었지만 더 상세한 정보들을 보기위해 debug단계로 내려 주었다.
parameter 수신하기 - 추가내용
@RequestParam(value = "pageNo", required = false, defaultValue = "1") int pageNo
parameter를 받을때 이 것에 대한 정보의 필수성, 그리고 만약 값이 없을때의 기본값을 설정한다.
이것에 대해 실행시 잘 작동하는데
혹시 작동이 안 될 경우에
pom.xml에
이 부분을 수정해주자. 버전이 낮아 작동하지 않는 경우도 있다.
Spring에서 다양한방식으로 model을 지정하기
@RequestMapping("/modelTest1")
public String modelTest1(HttpServletRequest request,
HttpSession session,
Model model,
@ModelAttribute("PARMOD1") TestDTO t
) {
t.setSearchKey("파라미터에 있는 서치타입");
logger.info("modelTest1() 호출!");
String testMsg = "-객체를 이용하고 있어욧!";
request.setAttribute("REQMOD1", "request"+testMsg);
session.setAttribute("SESMOD1", "session"+testMsg);
model.addAttribute("MODMOD1", "model"+testMsg);
List<String> hobbies = new LinkedList<String>();
hobbies.add("춤추기");
hobbies.add("신나게놀기");
hobbies.add("클라이밍");
TestDTO testDTO = new TestDTO("이름", hobbies, 2, "내용", "태풍") ;
model.addAttribute("MODMOD2", testDTO);
//속성명은 model값의 타입으로 사용되는 bean과 동일할 때에는 생략할 수 있다.
model.addAttribute(testDTO);
return "Test/model01";
}
다양한 방식을 종합적으로 모아놓았다. 하나씩 살펴보자.
1. request객체 이용 / session 객체 이용
request.setAttribute("REQMOD1", "request"+testMsg);
session.setAttribute("SESMOD1", "session"+testMsg);
이 부분이다. 우리가 jsp에서 배운것과 이번에도 차이가 크게 존재하지는 않는다.
다만 여기서 알아야할 차이점은 이제 우리가 session을 꼭 method내에서 선언할 필요 없이
method의 paramete의 method에서 선언 되어도 된다.
@RequestMapping("/modelTest1")
public String modelTest1(HttpServletRequest request, HttpSession session )
이렇게 작성되어도 사용에 문제가 없다는 뜻이다.
2. Model 객체 이용
@RequestMapping("/modelTest1")
public String modelTest1(Model model){
String testMsg = "-객체를 이용하고 있어욧!";
model.addAttribute("MODMOD1", "model"+testMsg);
}
Spring에서 새로 등장한 객체이다. addAttribute 메서드를 이용하면 위의 방식과 큰 차이 없이 출력도 할 수 있다.
3. parameter에서 먼저 Attribute를 선언하고 그 Attribute의 속성 지정
@RequestMapping("/modelTest1")
public String modelTest1(@ModelAttribute("PARMOD1") TestDTO t){
t.setSearchKey("파라미터에 있는 서치타입 필드");
}
파라미터에서 아예 이름과 타입명 그리고 객체명을 지정 한 후 거꾸로 출력했을때도 문제 없이 잘 작동한다.
종합)
이 주제 처음 의 메서드가 실행되도록 주소를 입력하면
이와 같이 잘 작동된다.
ModelAndView를 이용하여 model과 view를 동시에 지정하기
1.Spring에서는 ModelAndView라는 객체를 이용해 view와 model 을 한번에 지정할 수 있다.
@RequestMapping("/modelViewTest1")
public ModelAndView modelViewTest1(ModelAndView mv) {
// model과 view 작업 한번에
// model 지정
mv.addObject("MV1", "mv에 직접 넣은 String");
// view 지정
mv.setViewName("Test/modelView01");
return mv;
}
1. return 타입을 ModelAndView로 지정 후 객체를 파라미터로 생성
2. 만들어진 객체를 이용해 model과 view 지정
3. return 하면 주소로 이동되며 model도 생성
이때
mv.setViewName("redirect:/paramTest1");
이러한 방식으로 포워드나 리다이렉트를 이용해 view를 지정할 수도 있다.
포워드와 리다이렉트의 차이를 내용이 더 복잡해지기 전에 다시 숙지해두자.
일단은 직접적인 주소가 forward이고 위와같이 언급한 방식이 redirect로 생각하자.
'Web > Spring국비지원 수업 정리' 카테고리의 다른 글
<Spring 국비지원 수업> lombok (0) | 2023.08.17 |
---|---|
<Spring 국비지원 수업> mybatis를 사용한 mvc 패턴 (0) | 2023.08.11 |
<Spring 국비지원 수업> mybatis (1) | 2023.08.10 |
<Spring 국비지원 수업> 도입 - 환경설정 및 다운로드 / parameter를 수신하는 다양한 방식 (0) | 2023.08.07 |