가수면

JSP 본문

Java

JSP

니비앙 2023. 12. 2. 15:43

StringBuffer

문자열을 그대로 return하면 효율이 안 좋기 때문에 StringBuffer 사용

	@RequestMapping("say-hello-html")
	@ResponseBody
	public String sayHelloHtml() {
		StringBuffer sb = new StringBuffer();
		sb.append("<html>");
		sb.append("<head>");
		sb.append("<title> StringBuffer 테스트 </title>");
		sb.append("</head>");
		sb.append("<body>");
		sb.append("StringBuffer 테스트");
		sb.append("</body>");
		sb.append("</html>");
		
		return sb.toString();
	}

JSP

StringBuffer를 이용해 HTML을 그리는 것 보다 더 효율적으로 코드를 작성할 수 있음

 

방식

jsp파일에 html을 그린 뒤 거기로 리디렉션 시킴

 

jsp 파일은 스프링 부트 프로젝트 내 다음 경로에 위치시켜야 함

/src/main/resources/META-INF/resources/WEB-INF/jsp/sayHello.jsp

 

1. say-hello-jsp로 요청 보냄

2. 요청 처리 메소드가 jsp 이름을 return 함

3. spring MVC의 뷰 리졸버를 설정 (접두어, 접미어 설정)

4. return 값에 접두어, 접미어가 붙은 jsp로 리디렉션 됨

 

구현

package com.in28minutes.springboot.mtfirstwebapp.hello;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class SayHelloController {

	@RequestMapping("say-hello-jsp")
	public String sayHelloJsp() {
		return "sayHello";
	}	
}
// application.properties

spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
// ECLIPSE
<dependency>
	<groupId>org.apache.tomcat.embed</groupId>
	<artifactId>tomcat-embed-jasper</artifactId>
	<scope>provided</scope>
</dependency>

// INTELLIJ
<dependency>
	<groupId>org.apache.tomcat.embed</groupId>
	<artifactId>tomcat-embed-jasper</artifactId>
</dependency>

Params 적용하기

RequestParam를 이용해 메소드에 요청 파라미터를 전달해줄 수 있고, ModelMap을 이용해 뷰에 전달할 수 있음

package com.in28minutes.springboot.mtfirstwebapp.login;

import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
public class LoginController {
	
	@RequestMapping("login")
	public String gotoLoginPage(@RequestParam String name, ModelMap model) {
		model.put("name", name);
		return "login";
	}	
}
<html>
	<head>
		<title>Login Page</title>
	</head>
	<body>
		<h1>Heading 1</h1>
		<h2>Heading 2</h2>
		
		${name} Login Page
	</body>
</html>

JSP Fragment

헤더 등 겹치는 태그들을 컴포넌트처럼 사용 가능

예시)

// header.jspf

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>


<html>
	<head>
		<link href="webjars/bootstrap/5.1.3/css/bootstrap.min.css" rel="stylesheet" >
		<link href="webjars/bootstrap-datepicker/1.9.0/css/bootstrap-datepicker.standalone.min.css" rel="stylesheet" >
		
		<title>Manage Your Todos</title>		
	</head>
	<body>
// listTodos.jsp

		<%@ include file="common/header.jspf" %>
		<%@ include file="common/navigation.jspf" %>
		<div class="container">
			<h1>Your Todos</h1>
            .
            .
            .

HTTP 요청에 따른 분기

요청에 따라 showNewTodoPage와 addNewTodo로 분기

	@RequestMapping("list-todos")
	public String listAllTodos(ModelMap model) {
		List<Todo> todos = todoService.findByUsername("in28minutes");
		model.addAttribute("todos", todos);
		return "listTodos";
	}
	
	@RequestMapping(value="add-todo", method = RequestMethod.GET)
	public String showNewTodoPage() {
		return "todo";
	}
	
	@RequestMapping(value="add-todo", method = RequestMethod.POST)
	public String addNewTodo() {
		return "redirect:list-todos";
	}

만약 리다이렉트 시키고자 listTodos.jsp로 바로 리다이렉트 시키게 되면 model의 값이 지정되어 있지 않아 todo가 텅텅 비어서 나오게 된다.

이 경우 "redirect:"를 사용해 RequestMapping로 지정한 url를 지정해 원하는 메소드를 다시 return하게 할 수 있음

'Java' 카테고리의 다른 글

[Java] 심화  (0) 2023.12.12
JSTL  (0) 2023.12.12
어노테이션 정리  (0) 2023.12.02
H2, JDBC, JPA, Hibernate  (2) 2023.12.02
[Spring Boot] 기본  (0) 2023.12.01
Comments