다양한 방법으로 파라미터를 받아 사용할 수 있는 방법을 알아보자
build.gradle
- spring-boot-starter-web : 스프링 MVC를 사용할 수 있도록함, RESTful API 구축
- spring-boot-starter-tomcat: 톰캣 서버를 자동으로 실행시킴
JSP 사용하기
Java 기반 웹 애플리케이션을 개발할 때 서버 측에서 동적으로 HTML을 생성하는 데 사용되는 템플릿 엔진 중하나
- HTML괴 Java 코드를 혼합하여 작성 가능
- JSP파일이 컴파일되어 서블릿으로 변환되고 클라이언트 요청을 처리하여 동적 웹 페이지를 생성하는 방식으로 동작
JSP를 사용하려면 설정이 필요함
1. dependency 추가
implementation 'jakarta.servlet:jakarta.servlet-api' //서블릿
implementation 'jakarta.servlet.jsp.jstl:jakarta.servlet.jsp.jstl-api'//JSP에서 JST 사용
implementation 'org.glassfish.web:jakarta.servlet.jsp.jstl'
implementation 'org.apache.tomcat.embed:tomcat-embed-jasper' //JSP사용
2. application.properties 설정
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
3. 폴더구성
webapp >> webinf >> views >> 제시하는이름.jsp

4. danmic web module 버전 고정하기
build.gradle의 다음 코드 추가
eclipse.wtp.facet {
// Change the version of the Dynamic Web Module facet
facet name: 'jst.web', version: '5.0'
}
5. Mycontroller 작성
- @ResponseBody는 순수하게 텍스트만 리턴
- 나머지들은 jsp를 사용하기 위한 view-resolver가 [return값].jsp를 찾아 브라우저에 response로 보냄
package com.study.springboot;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class MyContoller
{
@RequestMapping("/")
public @ResponseBody String root() throws Exception{
return "JSP in Gradle";
}
@RequestMapping("/test1") // localhost:8081/test1
public String test1() {
return "test1"; // 실제 호출 될 /WEB-INF/views/test1.jsp
}
@RequestMapping("/test2") // localhost:8081/test2
public String test2() {
return "sub/test2"; // 실제 호출 될 /WEB-INF/views/sub/test2.jsp
}
}
Model 사용하기
URL 요청이 들어오면 변수의 정보를 담아서 JSP에서 그 변수의 내용을 사용하는 작업
MyController
- ModelAndView는 모델에 값도 넣어주고 뷰도 지정을 해야함
package com.study.springboot;
import java.util.ArrayList;
import java.util.List;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class MyContoller
{
@RequestMapping("/")
public @ResponseBody String root() throws Exception{
return "Model & View";
}
@RequestMapping("/test1")
public String test1(Model model) {
// Model 객체를 이용해서, view로 Data 전달
// 데이터만 설정이 가능
model.addAttribute("name", "홍길동"); //(key,name)
return "test1";
}
@RequestMapping("/mv")
public ModelAndView test2() {
// 데이터와 뷰를 동시에 설정이 가능
ModelAndView mv = new ModelAndView();
List<String> list = new ArrayList<>();
list.add("test1");
list.add("test2");
list.add("test3");
mv.addObject("lists", list); // jstl로 호출,(key,name)
mv.addObject("ObjectTest", "테스트입니다."); // jstl로 호출
mv.addObject("name", "홍길동"); // jstl로 호출
mv.setViewName("view/myView");
return mv;
}
}
myView.jsp
- EL표기법에 의한 key가 들어있음
- ${listls}에는 객체가 들어있어 JSTL의 for-each문을 통해 하나씩 꺼냄
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="jakarta.tags.core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
out.println("Model(Sub) : Hello World");
%>
<br>
${ObjectTest}
<br>
${lists}
<br>
<br>
<c:forEach var="mylist" items="${lists}">
${mylist} <br>
</c:forEach>
<br>
<br>
당신의 이름은 ${name} 입니다.
</body>
</html>
실행결과

- 앞에 {test1, test2, test3}는 list객체의 내용을 출력한 것
- JSTL의 for-each문을 출력한것
Form 사용하기
홈데이터 등 파라미터를 전달받아 사용하는 코드를 작성해보자
Mycontroller.java
package com.study.springboot;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import jakarta.servlet.http.HttpServletRequest;
@Controller
public class MyContoller
{
@RequestMapping("/")
public @ResponseBody String root() throws Exception{
return "Form 데이터 전달받아 사용하기";
}
@RequestMapping("/test1")
public String test1(HttpServletRequest httpServletRequest, Model model) {
String id = httpServletRequest.getParameter("id");
String name = httpServletRequest.getParameter("name");
model.addAttribute("id", id);
model.addAttribute("name", name);
return "test1";
}
}
- httpServletRequset로부터 getParemeter 방식으로 id,name파라미터의 내용을 변수에 할당함
- 파라미터에서 값을 받아 모델에 넣어주고 model의 값을 jsp로 출력함
실행을해보자
localhost:8080/test1/?id=test1&name=홍길동
이렇게 JSP에서 사용하는 파라미터 방식 외에도 스프링부트에서는 다양한 방식을 사용할 수 있음
@RequestMapping("/test2")
public String test2(@RequestParam("id") String id,
@RequestParam("name") String name,
Model model)
{
// 파라미터가 많아지면 불편해진다.
model.addAttribute("id", id);
model.addAttribute("name", name);
return "test2";
}
@RequsetParam 이용해서 id란 파라미터가 있으면 해당 변수에 넣어줌
=> 불필요한 코드 중복을 줄일 수 있음
test2.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="jakarta.tags.core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
out.println("#02 : Hello World");
%>
<br>
당신의 아이디는 ${id} 입니다.<br>
당신의 이름은 ${name} 입니다.
</body>
</html>
결과

JSP의 Command객체 방법을 사용해보자
파라미터와 같은 이름을 멤버 변수로 가지는 클래스를 만들어 객체 타입으로 파라미터를 한번에 처리할 수 있음
Member.java
package com.study.springboot;
public class Member
{
String id;
String name;
public String getId()
{
return id;
}
public void setId(String id)
{
this.id = id;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
}
- 자동으로 값이 들어가야 하기 떄문에 setter, getter필요
@RequestMapping("/test3")
public String test3(Member member, Model model)
{
// 파라미터와 일치하는 빈을 만들어서 사용할 수 있다.
// View 페이지에서 model 을 사용하지 않고 member를 사용한다.
return "test3";
}
- test2에서 파라미터가 많아지면 불편한데 test3에서는 클래스 하나로 처리할 수 있어 편리
- 모델을 사용하지 않고 JSP에서 command객체 안에 들어있는 값들을 바로 사용할 수 있음
test3.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="jakarta.tags.core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
out.println("#03 : Hello World");
%>
<br>
당신의 아이디는 ${member.id} 입니다.<br>
당신의 이름은 ${member.name} 입니다.
</body>
</html>
@PathVariable 사용하는 방법도 있음
@RequestMapping("/test4/{studentId}/{name}")
public String getStudent(@PathVariable String studentId,
@PathVariable String name,
Model model)
{
model.addAttribute("id", studentId);
model.addAttribute("name", name);
return "test4";
}
- 이름이 변수 값으로 위치값을 이용해서 파라미터의 값을 받아올 수 있음
- model에 값을 넣어줘서 사용
test4.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="jakarta.tags.core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
out.println("#04 : Hello World");
%>
<br>
당신의 아이디는 ${id} 입니다.<br>
당신의 이름은 ${name} 입니다.
</body>
</html>
localhost:8080/test4/1/해리포터 실행

Lombok 사용하기
lombok은 java클래스를 만들 떄 흔히 사용하는 코드들을 어노테이션을 이용해서 자동으로 만들어주는 라이브러리
- vo, dto, command 객체 같은 모델에서 getter,setter메서드, 기본생성자, 파라미터를 가지는 생성자 등
MyController.java
package com.study.springboot;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import jakarta.servlet.http.HttpServletRequest;
@Controller
public class MyContoller
{
@RequestMapping("/")
public @ResponseBody String root() throws Exception{
return "Lombok 사용하기";
}
@RequestMapping("/test1")
public String test1(Member member, Model model)
{
System.out.println(member);
return "test1";
}
}
test1.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="jakarta.tags.core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
out.println("#01 : Hello World");
%>
<br>
당신의 아이디는 ${member.id} 입니다.<br>
당신의 이름은 ${member.name} 입니다.
</body>
</html>
Member.java
package com.study.springboot;
import lombok.Data;
@Data
public class Member
{
String id;
String name;
}
위에 command객체 예시에서 직접 만들었던 getter,setter,equals, canEqual(), hashCode, toString, 생성자가 lombok에 관련된 @Data 어노테이션으로 대체됨
=> 규칙성을 가진 메서드이기 때문에 변수이름만 알면 자동으로 만들어줄 수 있음
'개발 > Backend' 카테고리의 다른 글
| [SpringBoot] 예제로 배우는 스프링부트 입문 | JPA 기초 (0) | 2024.07.21 |
|---|---|
| [Spring Boot] 예제로 배우는 스프링부트 입문 | JdbcTemplate (0) | 2024.07.15 |
| [Spring Boot] 예제로 배우는 스프링부트 입문 | Form값 검증 (0) | 2024.07.07 |
| [Spring Boot] 예제로 배우는 스프링부트 입문 | Dependency Injection (0) | 2024.07.03 |
| [JS 기초] CODEIT POWER BOOST 1주차 (0) | 2024.05.22 |