[ @가 어디서 어떻게..쓰이는가.. ]
@ : Class 밖, Class 안, 인자값 가능
[@Controller ]
@Autowired => Controller
@ModelAttribute => Controller 에서 DAO(setter 역할) dao와 함께 사용하는 형태의 class
@RequestParam => required : Controller (전달값 필수 , 필수 아님 )
@PostMapping , @GetMapping => Controller에서
@Setter, @Getter => DAO, VO(@Getter만)
[Spring I/O]
@Multiconfig => server 업로드 => CDN서버(이미지용 서버)로는 전송 불가능
commons-filedupload library 사용 => CDN,localServer 둘다 가능
[자료형]
@ResponseBody
- http 프로토콜 주소를 html에서 로드시 자동 맵핑 역할을 하여 결과값을 return해주는 annotation
ex ) 이미지, xml, json 등... 에 사용 , ajax랑은 관계없음 (webpage에 걍 그대로 출력하는거)
@RequestBody
- ajax로 요청시 해당 내용을 맵핑하여 출력시키는 역할
ex) javascript ajax console로 출력 => this.response
=> 이 둘중 하나를 쓴다는건 api 서버를 만들겠다는 것!
https://dev-eunse.tistory.com/193 여기서 넘어온걸로 do..test.. 혼돈...
⚡ test1
data.jsp
<form action="./mainpage.do" id="frm" method="get"> 검색 : <input type="text" name="search"><br> <input type="button" value="전송" onclick="abc()"> </form> </body> <script> function abc(){ frm.submit(); } </script>
test.jsp<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> Spring view JSP test <br> 검색어 : ${search} <br> </body> </html>
mainpage.javapackage webspring; import javax.servlet.http.HttpServletRequest; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; @Controller public class mainpage { //@RequestMapping("/mainpage.do") //get,post //@PostMapping("/mainpage.do") //post @GetMapping("/mainpage.do") //get //response 사용시 JSTL을 사용하지못함 - 일반 JSP를 사용해야함(Model 사용하지못함) //printWriter 사용시 rewponse 사용하며 해당 script를 활성화시킴 //(단, view페이지에서는 제작하지 않음) public String main(HttpServletRequest req, Model m) { //Model : Interface String search = req.getParameter("search"); System.out.println(search); m.addAttribute("search",search); return "test"; //파일명만 작성 } //가상의 웹페이지2 @RequestMapping("/mainpage2.do") public void main2() { } }
❗ Model (interface) 은 response사용시 사용하지 못함!!
spring은 굉장히 규격화 되어있음..
이거 쓸땐 이것만 써야하구 저거 쓸땐 저것만 써야함
⚡ spring은 규칙이 매우 중요함!
기본적으로 spring은 controller가 있으면 view(.jsp)를 찾음
- login.jsp
<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="./mainpage2.do"; //mainpage3,mainpage4 로 바꿔가며 연습 frm.submit(); } </script>
- mainpage.java - @RequestMapping("/mainpage2.do")
package webspring; @Controller public class mainpage { //즉시실행 메소드는 spring Controller에서 사용하지 않음 - 자체가 작동안함 // HttpServletResponse res; // public mainpage() { // this.res.setContentType("text/html;charset=utf-8"); // } //가상의 웹페이지2 @RequestMapping("/mainpage2.do") public void main2(HttpServletRequest req,HttpServletResponse res) throws Exception{ //얘 빼고는 다 return 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(); } }
👀 spring 규칙
1. 즉시실행 메소드는 spring Controller에서 사용하지 않음 - 자체가 작동안함 ⭐
2. HttpServletResponse를 사용할 경우는 script를 무조건 활용 (printWriter 사용)
3. void메소드일 경우 기본으로 view(jsp) 발동함 / 해당 jsp를 사용하기 싫다면 printWriter를 사용
=> 다음 페이지 (view페이지) 로 넘어가지 않아도 되는 경우 사용 (단순 alert 후 페이지 이동만 있을 경우)
ex) 로그인..
4. void 메소드 외에 return이 있는 메소드는 언제사용 ? jsp와 무조건 사용
=> 다음 페이지(view페이지)가 있을 경우 (Script 발동 x , 넘어간 다음 페이지에서 작성)
ex) 검색 페이지..
- mainpage.java - @RequestMapping("/mainpage3.do")
@Controller public class mainpage { //가상의 웹페이지3 ModelAndView mv = new ModelAndView(); //필드에 넣어서 사용 가능 @RequestMapping("/mainpage3.do") public ModelAndView main3(HttpServletRequest req) { String mid = req.getParameter("mid"); String mpass = req.getParameter("mpass"); this.mv.addObject("mid",mid); this.mv.addObject("mpass",mpass); this.mv.setView(null); //ModelAndview는 이게 필수 return this.mv; } }
5 . 일반 자료형 메소드와 ModelAndView 자료형 메소드가 return null에서 서로 다른 결과가 발생함
일반 자료형-null일 경우 Mapping 주소와 같은 jsp파일을 찾음
ModelAndView-null일 경우 jsp파일 찾지 않음
- mainpage.java - @RequestMapping("/mainpage4.do")@Controller public class mainpage { //가상의 웹페이지4 ModelAndView mv = new ModelAndView(); @RequestMapping("/mainpage4.do") 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); //mv를 쓰고싶으면 자료형이 ModelAndView여야함 // this.mv.addObject("mid",mid); // this.mv.addObject("al",al); // this.mv.setView(null); m.addAttribute("mid",mid); m.addAttribute("al",al); return null; } }
6.
Integer,int(return 0),float,long... 등으로 로 사용시 view 안됨 - 규칙임
작동 가능 : void,String,StringBuffer, Stringbuilder, ModelAndView,ArrayList<String>,ArrayList<Integer>..
(배열도 작동 가능..!)
7. ModelandView는 자료형이 ModelAndView인 메소드 안에서만 사용할 수 있음
🔽 mainpage4.jsp<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!-- JSP안에 JSTL코드를 쓰는건 절대 불가능! <% String mid = ${mid}; %> --> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>view</title> </head> <body> ${al} <br> ${mid} </body> </html>
8. ModelandView 외에 return이 있는 메소드 모두 Model이라는 ui를 이용하여 JSTL 형태로 출력
9. JSP형태의 <%%> 문법안에 JSTL ${} 사용하지 못함!
'CLASS > SPRING,JSTL' 카테고리의 다른 글
#3-2 / coupon delete,update (spring + database) (0) | 2024.07.10 |
---|---|
#3-1 / coupon insert,select (spring + database) (0) | 2024.07.10 |
#2-2 / spring + database 연결,회원가입 JSTL+spring+Datasource (0) | 2024.07.09 |
#2-1 / spring 규칙2, JSTL 사용법 기초 (0) | 2024.07.09 |
#1-1 / [Spring maven project] start, setting - 70% 세팅완... (0) | 2024.07.08 |