1. Controller 에서 메소드 사용 시 규칙
⑴ 즉시실행 사용하지 않음
⑵ 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는 설정하지 않았기 때문에 추가로 해줘야함
② 코드 예시
@Controller public class mainpage { @RequestMapping("/mainpage2.do") public void main2(HttpServletRequest req, HttpServletResponse res) throws IOException{ String mid = req.getParameter("mid"); String mpass = req.getParameter("mpass"); res.setContentType("text/html;charset=utf-8"); PrintWriter pw = res.getWriter(); if(mid.equals("")) { System.out.println("test"); }else { pw.write("<script>" + "alert('로그인 되셨습니다.');" + "location.href='./test.jsp';" + "</script>"); } pw.close(); } }
4. (자료형이) ModelAndView 인 메소드
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; } }
② login.jsp (입력 파트)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Spring-로그인(모든 메소드를 활용하는 페이지)</title> </head> <body> <form id="frm"> 아이디 : <input type="text" name="mid"><br> 패스워드 : <input type="text" name="mpass"><br> <input type="button" value="전송" onclick="abc()"> </form> </body> <script> function abc() { frm.method = "post"; frm.action="./mainpage4.do"; frm.submit(); } </script> </html>
③ mainpage4.jsp (출력 파트)<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>View</title> </head> <body> ${al} <br><br> ${mid } </body> </html>
6. Mapping
1. @GetMapping("가상의 do")
- GET 만 받음
2. @PostMapping("가상의 do")
- POST 만 받음
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 은 배열로 받았으나 이 경우 값을 필수로 받을 수 없음<title>전화번호 인증 페이지(Spring-RequestMapping)</title> </head> <body> <form id="frm" method="post" action="./telok.do"> 연락처 : <input type="text" name="tel"><br><br> 이메일 : <input type="text" name="email">@<input type="text" name="email"> <input type="button" value="전송" onclick="telok()"> </form> </body> <script> function telok() { frm.submit(); } </script> </html>
7. Checkbox 핸들링
- 인자값으로 @RequestParam 와 defaultValue 를 이용해 넘겨받음
- @RequestParam: 인자값에 적용하는 어노테이션 이며 값이 없을 경우 defaultValue를 이용하여
기본 default 값을 적용할 수 있음
- required = true : name 필수로 사용 / required = false : name 값이 필수가 아님
=> false 일 때는 앞의 agree 의 name 값이 바뀌어도 값을 가져오나,
true 일 경우는 name값이 인자값과 동일해야 제대로 값을 가져오는 것을 확인함
- 코드 예시 )
ⓐ telok.do (값을 넘겨 받는 파트)
ⓑ tel.jsp (값을 입력하는 파트)@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; } }
<title>전화번호 인증 페이지(Spring-RequestMapping)</title> </head> <body> <form id="frm" method="post" action="./telok.do"> 연락처 : <input type="text" name="tel"><br><br> 이메일 : <input type="text" name="email">@<input type="text" name="email"><br> 개인정보 동의함 : <input type="checkbox" value="Y" name="agree"> <input type="button" value="전송" onclick="telok()"> </form> </body> <script> function telok() { frm.submit(); } </script>
8. Controller 에 있는 변수 모듈에서 출력하는 방법
# Controller에 있는 static 변수를 가져옴
⑴ Controller 에서 필드에 static으로 변수 선언
@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); } }
'Spring' 카테고리의 다른 글
Database 연결 (Spring) (0) | 2024.07.09 |
---|---|
JSTL 사용법 (0) | 2024.07.09 |
웹 경로에서 프로젝트 명 빼기 (0) | 2024.07.08 |
Spring 기초 (0) | 2024.07.08 |
Spring 설치 / 세팅 (Dynamic web project) (0) | 2024.07.08 |