⑴ 즉시실행 사용하지 않음 ⑵ response 를 사용할 경우는 script를 무조건 활용 ⑶ void 메소드일 경우 기본으로 view (jsp) 발동함. 해당 jsp를 사용하기 싫을 경우 printwriter를 사용 ⑷ void 메소드 외 return 이 있는 메소드는 언제사용?? jsp와 무조건 사용 - View페이지가 없을 경우 : 주로 void 메소드 활용 - View페이지가 있을 경우 : 주로 return 메소드 활용 (script 를 사용하지 X) ⑸ 일반 자료형 메소드와 ModelAndView 자료형 메소드는 return null 에서 서로 다른 결과가 발생함 ⑹ ModelAndView는 자료형이 ModelAndView일 때만 사용가능 ⑺ ModelAndView 외에 return 이 있는 메소드 모두 Model 이라는 ui를 이용해서 JSTL형태로 출력함 ⑻ JSP 파일 안에 JSTL 과 JSP 둘다 같이 쓸 수는 있지만, <%%>안에 ${} 를 사용하지 못함
2. Controller 생성
1. 새롭게 class 생성 후 @Controller 작성 2. webpage.xml 로 가서 생성한 클래스 명(ex:mainpage2)을 입력
3. 서버 재실행
3. void 메소드
1-1. 특징 ① 기본적으로 Spring은 controller가 있으면 View(.jsp)를 무조건 찾는다
1-2. PrintWriter 쓰기 위한 response 사용 + response 언어셋 ① response 만 따로 언어셋 설정하는 이유 => controller 에서는 HttpServletResponse 를 printwriter 쓸 때를 제외하고는 쓰지 않으므로 xml 에서 언어셋 설정시 response는 설정하지 않았기 때문에 추가로 해줘야함 ② 코드 예시
1. addObject 와 setView - mv.setView(null) 일 때 null 은 Mapping 이름과 동일한 jsp를 찾게 됨 - 코드예시
@Controller
public class mainpage {
@RequestMapping("/mainpage3.do")
public ModelAndView main3(HttpServletRequest req) {
String mid = req.getParameter("mid");
String mpass = req.getParameter("mpass");
ModelAndView mv = new ModelAndView(); //필드에 올려놔도 정상작동함
mv.addObject("mid",mid);
mv.setView(null); //null 은 Mapping 이름과 동일한 jsp를 찾게 됨
return mv;
}
}
5. 배열 메소드
1. 코드 활용법 (JSTL로 출력해봄) - Model 이라는 ui 인터페이스를 사용해야 출력 됨 - 코드 예시 ① mainpage4.do
@Controller
public class mainpage {
public ArrayList<Integer> main4(HttpServletRequest req, Model m) {
String mid = req.getParameter("mid");
String mpass = req.getParameter("mpass");
ArrayList<Integer> al = new ArrayList<Integer>();
al.add(25);
al.add(35);
al.add(45);
m.addAttribute("mid",mid);
m.addAttribute("al",al);
return null;
}
}
3. @RequestMapping - 일반적으로 post 와 get 둘 다 받을 수 있음 - 인자값 받을 때 HttpServletRequest 안써도 됨. - form 에서 name 값 전송 시 Spring 은 인자값으로 모든 핸들링이 가능함 - @RequestMapping ( value="가상의 url",method = RequestMethod.(GET or POST) => 이런식으로 지정해서 쓸 수도 있음
- 코드 예시 ) ⓐ telok.do (값을 넘겨 받는 파트) - name 값을 인자로 바로 받음
@Controller
public class mainpage2 {
@RequestMapping(value="/admin/telok.do",method =RequestMethod.POST)
public String telok(String tel,String email[]) {
System.out.println(tel);
System.out.println(email[0]);
System.out.println(email[1]);
return null;
}
}
ⓑ tel.jsp (값을 입력하는 파트) - name 'tel'과 'email' 로 설정 -> email name 은 배열로 받았으나 이 경우 값을 필수로 받을 수 없음
- 인자값으로 @RequestParam 와 defaultValue 를 이용해 넘겨받음 - @RequestParam: 인자값에 적용하는 어노테이션 이며 값이 없을 경우 defaultValue를 이용하여 기본 default 값을 적용할 수 있음 - required = true : name 필수로 사용 / required = false : name 값이 필수가 아님 => false 일 때는 앞의 agree 의 name 값이 바뀌어도 값을 가져오나, true 일 경우는 name값이 인자값과 동일해야 제대로 값을 가져오는 것을 확인함
- 코드 예시 )
ⓐ telok.do (값을 넘겨 받는 파트)
@Controller
public class mainpage2 {
@RequestMapping(value="/admin/telok.do",method =RequestMethod.POST)
public String telok(
@RequestParam(defaultValue = "N",required =false ) String agree,
String tel,
String email[]) {
System.out.println(tel);
System.out.println(email[0]);
System.out.println(email[1]);
System.out.println(agree);
return null;
}
}
@Controller
public class shop_main2 {
public static int gidx;
}
⑵ Module 에서 가져와서 console에 출력
public class gallery_select {
//필드에 controller 로드
shop_main2 sm; //방법1
shop_main2 sm = new shop_main2(); //방법2
public String test1(){
System.out.println(sm.gidx);
}
}