[SPRING] 첨부파일 & 컨트롤러

728x90

스프링에서 첨부파일을 보낼때는 servlet-context를 이용한다.

servlet-context.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

//!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->

//!-- Enables the Spring MVC @Controller programming model -->
<annotation-driven />

//<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
<resources mapping="/**" location="/resources/" /> //mapping의 주소가 첨부파일의 경로이다.

//<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>

context:component-scan base-package="org.zerock.controller" />
</beans:beans>

 

SimpleController.java

package org.zerock.controller;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/member") //부모 주소
public class SimpleController {
	
	private static final Logger logger = LoggerFactory.getLogger(SimpleController.class);

	@RequestMapping("doA")//기본은 get방식 -> 주소는 /member/doA가 된다.
	public void doAget() {//보이드 타입은 매핑된 주소.jsp를 찾아간다.
		
	}
	@RequestMapping("doB")
	public String doBget(@ModelAttribute("msg") String msg,Model model) { // 리턴타입은 리턴된 주소값.jsp을 찾아간다. 단 주소값은 매핑된 값을 가진다.
										
		logger.info("msg : "+msg);
		model.addAttribute("mmm",msg); // 많은 값을 넘길 때 객체이용
		model.addAttribute("id","1111");
		return "index";
		
	}
	@RequestMapping("doD")
	public String doDget(Model model) {
		logger.info("===doD get===");
		
		Member m = new Member();
		
		m.setId("1111");
		m.setPass("2222");
		
		ProductVO p = new ProductVO();
		p.setPrice(2000);
		p.setName("고구마");
		
		model.addAttribute(p);
		model.addAttribute("p",p);
		
		model.addAttribute(m); // 변수명을 지정하지않았을 경우 첫대문자가 소문자로 변형된 클래스 이름(member)이 변수명으로 된다.
		model.addAttribute("m",m);
	
		
		System.out.println(m.toString());
		return "index"; //부모 주소값이 주어졌다면 절대경로로 작성해줘야한다.
						//상대경로로 작성한다면 제일 처음 주소값으로 돌아간다. ex)index -> 제일 처음 인덱스
	}
}

 

index.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>
msg : ${msg }<br>
mmm: ${mmm }<br>
id : ${id }<br>
<hr>
member_id = ${member.id }<br>
member_pass = ${member.pass }<br>

m.id = ${m.id }<br>
m.pass = ${m.pass }<br>

productVO.price = ${productVO.price }<br>
productVO.name = ${productVO.name }<br>

<hr>
p.price = ${p.price }<br>
p.name = ${p.name }


<img src="/resources/img/1.jpg">
<img src="/img/1.jpg">
</body>
</html>