🏫 Open API_JAVA

[73일차] 게시판 만들기 / 클래스 ➡ 컬렉션으로 사용하기 / 스프링에서 데이터를 받는 방법

Dorothy_YANG 2022. 11. 7. 19:08
728x90

20221107(월)

  • 목차 
    - 게시판 만들기
    - 클래스 ➡ 컬렉션으로 사용하기
    - 스프링에서 데이터를 받는 방법 

 


< 게시판 만들기 >

 

  • SampleController2 코드
package com.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import com.demo.domain.BoardVO;

import lombok.extern.log4j.Log4j;

@Controller
@Log4j
@RequestMapping("/board/*")
public class SampleController2 {

	// 폼을 구성하고, 사용자가 입력한 데이타를 받아오는 방법
	
	// 게시판 폼
	@GetMapping("/write") // 요청주소 :    /board/write    jsp : /board/write.jsp
	public void write() {
	}
	
	
	// 게시판 : 글저장
	@PostMapping("/write") // BoardVO클래스의 Setter메서드가 동작한다.
	public String write(BoardVO vo) {
		log.info(vo);
		return "";
	}
}

 

  • BoardVO 코드
package com.demo.domain;

import java.util.Date;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;

@Setter
@Getter
@ToString
@NoArgsConstructor
@AllArgsConstructor
public class BoardVO {

	private Long bno;
	private String writer;
	private String title;
	private String content;
	private int viewcnt; // 기본값 0
	private Date regdate; // 기본값 null
}

 

  • write.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>
<h3>게시판 : 글쓰기</h3>
<form method = "post" action="write">
	글번호 : <input type = "text" name = "bno"><br>
	글제목 : <input type = "text" name = "title"><br>
	작성자 : <input type = "text" name = "writer"><br>
	글내용 : <textarea name = "content" rows = "5" cols = "30"></textarea><br>
	<input type = "submit" value = "글저장">
</form>
</body>
</html>

 

  • 실행화면

 

 

  • 글저장 후 ➡ 아래 창 정상!

 

  • 영어는 잘 들어가나, 한글은 깨져서 들어간다. (깨짐 방지는 조금 더 내려가면 해결할 예정이다!)

 


 

✨ 클래스를 만들엇는데 컬렉션으로 사용하고 싶은 경우

 

  • com.demo.domain > SampleDTO
package com.demo.domain;

import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

// 스프링에서는 데이터클래스 목적으로 사용할 경우에는 getter, setter메서드가 반드시 존재해야 한다.


@Data // @Getter, @Setter, @ToString, equals(), hashCode(), canEqual()
public class SampleDTO {

	private String name; // <input type = "text" name = "name"
	private int age;     // <input type = "text" name = "age"
}

 

  • com.demo.domain > SampleDTOList.java 파일코드
package com.demo.domain;

import java.util.ArrayList;
import java.util.List;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

@Setter
@Getter
@ToString
public class SampleDTOList {
	
	// 데이타를 컬렉션 형태로 관리하는 데, 실제 데이타타입은 SampleDTO클래스 이다.
	// <input type = "text" name = "list[0].필드명" >
	private List<SampleDTO> list; // list[0].name, list[0].age, list[1].name, list[1].age
	
	public SampleDTOList() {
		list = new ArrayList<SampleDTO>();
	}
}

 

  • com.demo.controller > SampleController2.java 파일코드
package com.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import com.demo.domain.BoardVO;
import com.demo.domain.SampleDTOList;

import lombok.extern.log4j.Log4j;

@Controller
@Log4j
@RequestMapping("/board/*")
public class SampleController2 {

	// 폼을 구성하고, 사용자가 입력한 데이타를 받아오는 방법
	
	// 게시판 폼
	@GetMapping("/write") // 요청주소 :    /board/write    jsp : /board/write.jsp
	public void write() {
	}
	
	// 1) 클래스 파라미터로 받아오기
	// 게시판 : 글저장
	@PostMapping("/write") // BoardVO클래스의 Setter메서드가 동작한다.
	public String write(BoardVO vo) {
		log.info(vo);
		return "";
	}
	
	
    
	// 2) List 컬렉션으로 데이타 받아오기.
	// 1) 폼
	@GetMapping("/ex02BeanTest")
	public void ex02BeanTest() {
	}
	
	// 2) 데이타 확인
	@PostMapping("/ex02Bean")
	public String ex02Bean(SampleDTOList lst) {
		
		log.info(lst);
		return "";
	}
    
    
    
    // 동일한 파라미터명으로 여러개의 값이 전송되는 경우.
	// get방식. http://localhost?:8888/board/ex02List?ids=11&ids=22&ids=33
	// post방식.
	/*
	 <form method = "post" action = "">
	 	<input type = "text" name = "ids">
	 	<input type = "text" name = "ids">
	 	<input type = "text" name = "ids">
	 </form>
	 
	 */
}

 

  • jsp 폼 > ex02BeanTest.jsp
    폼을 만들 때 그 폼 명으로 된 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>
	<h3>List 컬렉션으로 데이타 폼 구성하기</h3>
	<form method = "post" action = "/board/ex02Bean">
		이름1 : <input type = "text" name = "list[0].name"><br>
		나이1 : <input type = "text" name = "list[0].age"><br>
		이름2 : <input type = "text" name = "list[1].name"><br>
		나이2 : <input type = "text" name = "list[1].age"><br>
		이름3 : <input type = "text" name = "list[2].name"><br>
		나이3 : <input type = "text" name = "list[2].age"><br>
		<input type = "submit" value = "전송">
	</form>
</body>
</html>

 

 

  • 실행화면

 

  • 데이타가 <SampleDTO>로 들어간다!

 


< 한글 문자깨짐 방지 >

(1) pom.xml에 추가

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>

 


(2) web.xml 내용 수정 및 추가

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID" version="3.1">

 


(3) web.xml에 추가

<!-- 한글깨짐방지. -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>
org.springframework.web.filter.CharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

 

  • 한글이 더이상 깨지지 않는다!

 


< 클라이언트에서 데이타를 전송했을 때 스프링에서 데이터를 받는 방법 >

     ➡ 필드로 값을 받는다.

  클라이언트(HTML) 스프링 
(1)   - get방식
    http://localhost/?age=100&name=홍길동


  - post방식
    <form method="post">
       <input type="text" name="name">
       <input type="text" name="age">
    </form>
단순 파라미터  
aaa(int age, String name)
(2)   - get방식
    http://localhost/?age=100&name=홍길동


  - post방식
    <form method="post">
       <input type="text" name="name">
       <input type="text" name="age">
    </form>
aaa(SampleDTO dto)
  
  class SampleDTO {
       int age;
       String name;
    }
(3)   - get방식
    http://localhost/?lst[0].age=100&lst[0].name=홍길동&lst[1].age=100&lst[1].name=홍길동


  - post방식
    <form method="post">
       <input type="text" name="lst[0].name">
       <input type="text" name="lst[0].age">
       <input type="text" name="lst[1].name">
       <input type="text" name="lst[1].age">
    </form>
 - 스프링(List컬렉션)
   aaa(SampleDTOList dto)

   class SampleDTOList {
       List lst;
   }
728x90