POST 입력

Codren·2021년 9월 3일
0

Section 1. POST 입력

1. POST 요청을 처리하는 Controller

  • Rest API 디자인에 맞게 POST 작업을 수행하는 reg 메서드 생성
  • Post Request 메시지에 title, content 가 보내질 예정




2. reg.html 파일

  • 공지사항의 제목, 내용, 파일을 등록하는 페이지




3. POST 결과




4. 콤보박스 입력

  • html 페이지 수정
  • Controller 수정
  • 결과 화면




5. 체크박스 입력

  • html 페이지 수정
  • Controller 수정
  • 같은 이름의 변수로 들어오는 값은 배열로 받을 수 있음
  • 결과 화면



Section 2. POST 한글 입력

1. 한글 입력이 깨지는 이유

  • 클라이언트 측에서는 UTF-8 코드체계로 문자를 사용
  • 기본적으로 Tomcat 은 ISO-8859-1 코드체계를 사용




2. Filter 사용

  • web.xml 에 필터 설정
<filter>
	<filter-name>charaterEncodingFilter</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>charaterEncodingFilter</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>




3. 한글 출력 결과




Section 3. POST 파일 전송

1. MultipartResolver 서버측

  • CommonsFileUploadSupport 클래스를 상속받는 MultipartResolver 객체 생성
  • SetmaxUploadSize Setter를 이용해서 최대 크기를 지정해줌
<bean id="multipartResolver"
	class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
	<!-- setting maximum upload size 300MB(1024-1024*300) -->
	<property name="maxUploadSize" value="314572800"></property>
</bean>




2. MultipartResolver 클라이언트측

  • enctype = "multipart/form-data" 지정




3. commons-fileupload 라이브러리

  • Apache 제공 파일 업로드 관련 라이브러리 dependency




4. 파일 처리 Controller

  • file 의 자료형을 MultipartFile 로 지정
  • file 의 이름과 크기를 출력




5. 파일 저장 물리 경로

  • Controller 는 reqeust 를 받아야 수행되므로 보통 HttpServletRequest 객체를 통해서 ServletContext 를 추출할 수 있음
  • ServletContext 에서 Application 의 물리주소 (RealPath) 추출
  • ServletContext 는 IOC 컨테이너에 기본적으로 자동으로 생성되므로 DI 가능
  • Servlet Context 개념 참고 블로그




6. 파일 저장 결과

  • 실제로 아래의 물리 경로에 저장됨
realPath : /Users/codren/Documents/workspace-spring-tool-suite-4-4.11.0.RELEASE/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/webprj/static/upload1




7. 다중 파일 파일 저장

  • 클라이언트 측에서 files 로 여러 파일을 보냄
  • 서버 측에서 배열로 files 를 받고 for (MultipartFile file: files) 수행



error


1. POST method 를 지원하지 않는 error

  • 혹시 아래와 같은 에러가 발생한다면 아래 코드로 RequestMapping 수행
@RequestMapping(value ="reg", method = {RequestMethod.GET, RequestMethod.POST})



2. POST 입력 Null error

  • form 상에서 POST 입력으로 전송될 데이터를 선택하지 않으면 -> "null" 입력으로 처리 (에러 X)
  • http://localhost:8080/admin/board/notice/reg 직접 url 요청시 nullpointerexception -> try-catch

0개의 댓글