새소식

JAVA 교육/Spring

2019/10/15 Spring 요청 명령어 를 받는 다양한 방식 & Filter(필터)

  • -

BbsCont.java 전체 코드

package kr.co.basicspring.test02;

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.filter.CharacterEncodingFilter;

//@Controller 어노테이션이 붙는 class 는 자동으로 객체생성을 해준다
@Controller
public class BbsCont {

	public BbsCont() {
		//객체 생성이 되었는지 늘 출력으로 확인을 하자	
		System.out.println("------------BbsCont()객체 생성됨");
	}//Bbscont end
		
		//결과확인
		//http://localhost:8090/basicspring/bbs/create.do
	//1)
	/*
	@RequestMapping(value="bbs/create.do",method=RequestMethod.GET)
	public ModelAndView bbsForm() {
		ModelAndView mav= new ModelAndView();
		mav.setViewName("bbs/bbsForm");
		return mav;
	}//bbsForm end
	*/
	
	//2)
	@RequestMapping(value="bbs/create.do",method=RequestMethod.GET)
	public String bbsForm() {
		return "bbs/bbsForm";
	}//bbsForm() end
//----------------------------------------------------------------------
	//가) 동일한 요청 명령어를 GET|POST 방식으로 분리해서 호출가능
	/*
	@RequestMapping(value="bbs/create.do",method=RequestMethod.POST)
	public ModelAndView bbsIns(HttpServletRequest req) {
		String wname=req.getParameter("wname").trim();
		String subject=req.getParameter("subject").trim();
		String content=req.getParameter("content").trim();
		String passwd=req.getParameter("passwd").trim();

		ModelAndView mav= new ModelAndView();
		mav.setViewName("bbs/bbsResult");
		
		mav.addObject("wname",wname);
		mav.addObject("subject",subject);
		mav.addObject("content",content);
		mav.addObject("passwd",passwd);
		
		return mav;
		
	}
	*/
	//나) 매개변수(parameter)가 DTO객체인 경우
	//	=>해당 클래스에 반드시
	//	->폼 컨트롤 요소이름으로 되어 있는 멤버변수와
	//	->각 getter 와 getter 함수가 있어야 한다.
	@RequestMapping(value="bbs/create.do", method=RequestMethod.POST)
	public ModelAndView bbsInt(BbsDTO dto) {
		System.out.println("wname : " +dto.getWname());
		System.out.println("subject : " +dto.getSubject());
		System.out.println("content : " +dto.getContent());
		System.out.println("passwd : " +dto.getPasswd());
		
		ModelAndView mav= new ModelAndView();
		mav.setViewName("bbs/bbsResult2");
		//request영역에 dto 객체 올리기
		mav.addObject("dto",dto);
		
		return mav;
	}//bbsInt() end
}//

 

※ 주의사항

소스코드를 복사할때는 앞,뒤에 있는 <code></code> 코드는 빼고 복사하자


 

 

1) 동일한 요청 명령어를 GET POST 방식으로 호출한 방식

1. BbsCont.java

//동일한 요청 명령어를 GET|POST 방식으로 분리해서 호출가능
	@RequestMapping(value="bbs/create.do",method=RequestMethod.POST)
	public ModelAndView bbsIns(HttpServletRequest req) {
		String wname=req.getParameter("wname").trim();
		String subject=req.getParameter("subject").trim();
		String content=req.getParameter("content").trim();
		String passwd=req.getParameter("passwd").trim();

		ModelAndView mav= new ModelAndView();
		mav.setViewName("bbs/bbsResult");
		
		mav.addObject("wname",wname);
		mav.addObject("subject",subject);
		mav.addObject("content",content);
		mav.addObject("passwd",passwd);
		
		return mav;
		
	}
 9 line 에서 ModelAndView 객체에 넣어준 bbsResult 를 생성 시켜주자

2. 페이지 생성

bbsResult.jsp생성

3. bbsResult.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>bbs/bbsResult.jsp</title>
</head>
<body>

<h3>* 글쓰기 결과*</h3>
 	작성자	: ${wname}<br>
 	제목	: ${subject}<br>
 	내용	: ${content}<br>
 	비밀번호: ${passwd}<br>
</body>
</html>

4. 결과1

bbsForm에 접속하여 값을 입력하면 bbsResult에 출력이 되었다.

 

단, 아직 인코딩을 하지 않았기 때문에 한글을 적으면 한글이 깨져 화면에 출력된다.

 

5. 인코딩 서블릿 등록

MVC 버전에서 encodefilter 작성하고 서블릿 등록을 해주었지만, spring에서는 서블릿 등록만 해주면 한글필터를 통과

bbsCont.java

import org.springframework.web.filter.CharacterEncodingFilter;

▲ 필터 인코딩을 서블릿에 등록하기 위해 bbsCont.java(현재 운영중이 controller) 에 위의 코드를 import 시켜주자

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>
	</filter>
	<filter-mapping>
		<filter-name>encodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

 

5. 결과2

짠! 한글이 깨짐없이 잘 출력되었으니 인코딩은 성공함

 

2) 요청 명령어 매개변수(parameter)가 DTO객체인 경우

1. BbsDTO 생성

package kr.co.basicspring.test02;

위의 칼럼으로 BbsDTO 를 생성한 후 getter setter를 생성

 

2. BbsCont.java

 매개변수(parameter)가 DTO객체인 경우 
  ->해당 클래스에 반드시 
  ->폼 컨트롤 요소이름으로 되어 있는 멤버변수와 
  ->각 setter 와 getter 함수가 있어야 한다.
	
@RequestMapping(value="bbs/create.do",method=RequestMethod.GET)
	public String bbsForm() {
		return "bbs/bbsForm";
	}//bbsForm() end

@RequestMapping(value="bbs/create.do", method=RequestMethod.post)
	public ModelAndView bbsInt(BbsDTO dto) {
		System.out.println("wname : " +dto.getWname());
		System.out.println("subject : " +dto.getSubject());
		System.out.println("content : " +dto.getContent());
		System.out.println("passwd : " +dto.getPasswd());
		
		ModelAndView mav= new ModelAndView();
		mav.setViewName("bbs/bbsResult2");
		//request영역에 dto 객체 올리기
		mav.addObject("dto",dto);
		
		return mav;
	}//bbsInt() end
 10 line  객체에 담은 bbsResult2 파일을 생성후 테스트 해보자

 

3. bbsResult2.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>bbs/bbsResult2.jsp</title>
</head>
<body>

<h3>* 글쓰기 결과*</h3>
 	작성자	: ${dto.wname}<br>
 	제목	: ${dto.subject}<br>
 	내용	: ${dto.content}<br>
 	비밀번호: ${dto.passwd}<br>
</body>
</html>

 

결과

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.