본문 바로가기
CLASS/SPRING,JSTL

#2-1 / spring 규칙2, JSTL 사용법 기초

by hingu 2024. 7. 9.

webpage.xml에 추가

<beans:bean class="webspring.mainpage"></beans:bean>

 

🔽

- mainpage2. java
package webspring;

@Controller
public class mainpage2 {
	
	//@GetMapping("/admin/adminok.do") //기존 get - 무조건 get으로 날라와야함
	@RequestMapping(value="/admin/adminok.do",method=RequestMethod.GET)
	public String adminok(HttpServletRequest req, Model m) {
		String pidx = req.getParameter("pidx");
		// GetMapping : /adminok.do?pidx=10 으로 접속시 10 출력
		System.out.println(pidx); 
		
		return null;
	}
	
}


- /admin/adminok.jsp => 얘는 실제로 만들어야함 (webapp에)
(mainpage2.java에서 가상의 경로를 정해줘서 동일한 경로의 jsp를 찾으니까!)

/* 무것도 안적음 ^__^ */



@requestMapping(value="가상경로",method=RequestMethod.GET or POST)
: requestMapping 인데 get으로만 받고 싶을때

 

⚡ name값 전달

- mainpage2. java
package webspring;

@Controller
public class mainpage2 {
	
	@RequestMapping(value="/admin/telok.do",method=RequestMethod.POST)
	//@RequestParam(defaultValue="N",required = false) 
        //혹시 값이 안넘어온다면 기본값은 "N" , 넘어온다면 넘어온 값 => if문 안써두댐
	//required = false : 넘어와도 되고 안넘어와도 됨
	public String telok(@RequestParam(defaultValue="N",required = false) 
    	String agree,String tel,String email[]) {
		System.out.println(tel); 
		//입력한 값 출력됨 , 페이지는 404 뜸(telok.jsp가 없어서)
		  //request 적지 않아도 name='tel'을 가져올 수 있음
		
		System.out.println(email[0]);
		System.out.println(email[1]);
		System.out.println(agree); //원래 체크시 Y,미체크시 null 출력 -> Y,N으로 출력
		
		return null;
	}
	
}

=> requestParameter 사용하지 않아도 됨!!

10.
  Form에서 name값 전송시 Spring은 인자값으로 모든 핸들링이 가능함 @RequestMapping
      => 단점 : 인자값에 넣으면 필수로 값이 넘어와야함 (안넘어오면 error)

11. @RequestParam :
인자값에 적용하는 어노테이션이며 값이 없을 경우 defaultValue를 이용하여 기본 default값을 적용할수 있음
required : default 는 true임 (필수로 받겠다) , false : 받아도 되고 안받아도 됨
if문 안써도 됨!!
* name값을 배열로 받을 경우 필수로 값을 받겠다라는 어노테이션을 사용하지 못함! 

- /admin/tel.jsp 

<body>
<form id="frm" method="post" action="./telok.do">
	연락처 : <input type="text" name="tel"><br>
	이메일 : <input type="text" name="email">@<input type="text" name="email"><br>
	개인정보 동의함 : <input type="checkbox" name="agree" value="Y"><br> 
	<input type="button" value="전송" onclick="telok()">
</form>
</body>
<script>
	function telok(){
		frm.submit();
	}
</script>

 

🔽 

⚡ JSTL 사용법

JSTL -> JSP 변수로 이관 불가능
JSP 변수 -> JSTL로 이관 가능 ?  가능.. 
[ javax.servlet ] 이 라이브러리 사용 (from pom.xml)
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!-- 
JSTL(core) : JSTL 엔진-필수, JSTL(function)-선택
prefix는 내가 짓고싶은대로 작성하면 됨 
-->
<%@ taglib prefix="aaa" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

<!-- jsp형태 -->
<%
String data[] = {"a1","a2","a3","a4"};
request.setAttribute("data_arr", data);
int ea = data.length;
%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSTL 사용법</title>
</head>
<body>

<!-- JSTL : forEach 이용이 정석 (var : 값 , begin~end:시작~종료) -->
<aaa:forEach var="no" begin="1" end="5">
${no}
</aaa:forEach> <!-- 12345 출력 -->

<br><br><br>

<!-- 
set(setAttribute의 약자)를 이용하여 JSTP에 있는 변수를 JSTL 변수값으로 변환
단점 : $ 때문에 jqeury와 충돌 => jquery 못씀! 
-->
<aaa:set var="jstl_ea" value="<%=ea%>"></aaa:set>
data의 총 갯수 : ${jstl_ea}


<br><br><br>

<!-- 
do에서 ArrayList로 배열을 이관했을 경우
1.forEach로 바로 받는 형태로 작업 (얘 추천 )
2.JSP로 ArrayList 받은 후 JSTL로 set을 이용하여 전달하는 방식

배열 출력시 forEach의 기본은 int로 활용해야하며, String으로는 X
String 배열을 사용하고싶은 경우 class배열을 활용하여 출력 또는 setAttribute를 이용해서 출력

배열 출력시 begin,end 사용 금지 - 배열 갯수만큼 알아서 돌아감
items : 배열데이터 전용 속성
 -->

<ol> <!-- 방법1 : JSP에 있는 변수를 JSTL items로 담아서 출력 => 권장 -->
<aaa:forEach var="arr" items="<%=data%>">
<li>${arr}</li>
</aaa:forEach>
</ol>

<ol> <!-- 방법2 : setAttribute를 이용하여 JSTL로 items에 값을 담아서 출력 -->
<aaa:forEach var="arr" items="${data_arr}">
<li>${arr}</li>
</aaa:forEach>
</ol>

 
</body>
</html>

=> 요런식
JSTL은 (Javascript,ECMA, React..) 와 사용 jquery는 사용 X => $ 충돌