Spring MVC 모델

조성현·2023년 5월 31일
0


Spring MVC 모델의 여러가지 출력 방법

servlet-context.xml

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"	
	xsi:schemaLocation="
	http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
	http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
	 
	 <context:component-scan base-package="config"/>
	 
	 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
	 	<!-- 접두어 -->
	 	<property name="prefix" value="/WEB-INF/views/"/>
	 	<!-- 접미어 -->
	 	<property name="suffix" value=".jsp"/>
	 </bean>
	 
</beans>

form.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>
form.jsp<br><br>
<form action="form_ok.do" method="get">
데이터 <input type="text" name="data1">
<input type="submit" value="전송">
</form>

<form action="form_ok.do" method="post">
데이터1 <input type="text" name="data1">
데이터2 <input type="text" name="data2">
<input type="submit" value="전송">
</form>
</body>
</html>

form_ok.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>
form_ok.jsp<br><br>
<%=(String)request.getParameter("data1") %>
<%=(String)request.getParameter("data2") %>
</body>
</html>

ConfigController

get / post 각각 출력하는 법

package config;

@Controller
public class ConfigController4 {

	@RequestMapping("/form.do")
	public ModelAndView handleReques1() {
		
		ModelAndView modelAndView = new ModelAndView();
		modelAndView.setViewName("form");
		return modelAndView;
	}
	// 이 부분은 수정하면서 실행
	@GetMapping("/form_ok.do")
	//@RequestMapping(value="/form_ok.do", method=RequestMethod.GET)
	public ModelAndView form_ok_get() {
		System.out.println("form_ok_get() 호출");
		
		ModelAndView modelAndView = new ModelAndView();
		modelAndView.setViewName("form_ok");
		return modelAndView;
	}
	@PostMapping("/form_ok.do")
	//@RequestMapping(value="/form_ok.do", method=RequestMethod.POST)
	public ModelAndView form_ok_post() {
		System.out.println("form_ok_get() 호출");
		
		ModelAndView modelAndView = new ModelAndView();
		modelAndView.setViewName("form_ok");
		return modelAndView;
	}
    //
 }

HttpServletRequest과 HttpServletResponse을 매개변수로 사용

@RequestMapping(value="/form_ok.do")
	public ModelAndView form_ok(HttpServletRequest request, HttpServletResponse response) {
		System.out.println("form_ok() 호출 : " + request.getParameter("data"));
		
		ModelAndView modelAndView = new ModelAndView();
		modelAndView.setViewName("form_ok");
		return modelAndView;
	}

String을 매개변수로 사용

@RequestMapping(value="/form_ok.do")
	public ModelAndView form_ok(String data1, String data2) {
		System.out.println("form_ok() 호출 : " + data1);
		System.out.println("form_ok() 호출 : " + data2);
		
		ModelAndView modelAndView = new ModelAndView();
		modelAndView.setViewName("form_ok");
		return modelAndView;
	}

RequestParam 방식

@RequestMapping(value="/form_ok.do")
	public ModelAndView form_ok(@RequestParam("data1") String pdata1) {
		// => 외부에선 data1로 내부에선 pdata1로 처리한다
		//System.out.println("form_ok() 호출 : " + data1);
		System.out.println("form_ok() 호출 : " + pdata1);
		
		ModelAndView modelAndView = new ModelAndView();
		modelAndView.setViewName("form_ok");
		return modelAndView;
	}

HttpServletRequest 객체 사용

@RequestMapping(value="/form_ok.do")
	public String form_ok(HttpServletRequest request) {
		
		request.setAttribute("data1", request.getParameter("data1"));
		return "form_ok";
	}
    
@RequestMapping(value="/form_ok.do")
	public ModelAndView form_ok(HttpServletRequest request) {
		
		ModelAndView modelAndView = new ModelAndView();
		modelAndView.setViewName("form_ok");
		modelAndView.addObject("data1", request.getParameter("data1"));
		return modelAndView;
	}

HttpServletRequest, model 객체 사용

@RequestMapping(value="/form_ok.do")
	public String form_ok(HttpServletRequest request, Model model) {
		
		model.addAttribute("data1", request.getParameter("data1"));
		model.addAttribute("data2", request.getParameter("data2"));
		return "form_ok";
	}

Spring MVC모델을 통한 우편번호 출력

servlet-context.xml

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"	
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd">

	 <bean name="/zipcode.do" class="model2.Zipcode"/>
	 <bean name="/zipcode_ok.do" class="model2.ZipcodeOk"/>
	 
	 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
	 	<!-- 접두어 -->
	 	<property name="prefix" value="/WEB-INF/views/"/>
	 	<!-- 접미어 -->
	 	<property name="suffix" value=".jsp"/>
	 </bean>
</beans>

ZipcodeTO

package model1;

import lombok.Getter;
import lombok.Setter;

@Setter
@Getter
public class ZipcodeTO {
	private String zipcode;
	private String sido;
	private String gugun;
	private String dong;
	private String ri;
	private String bunji;
}

ZipcodeDAO

package model1;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

public class ZipcodeDAO {
	
	private DataSource dataSource = null;
	
	public ZipcodeDAO() {
		// TODO Auto-generated constructor stub
	
		try {
			Context initCtx = new InitialContext();
			Context envCtx = (Context)initCtx.lookup( "java:comp/env" );
			this.dataSource = (DataSource)envCtx.lookup( "jdbc/mariadb2" );
		} catch( NamingException e ) {
			System.out.println( "[에러] " + e.getMessage() );
		} 
	
	}
	
	public ArrayList<ZipcodeTO> zipcodeList(String strDong) {
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		
		ArrayList<ZipcodeTO> lists = new ArrayList<>();

		try {	
			conn = this.dataSource.getConnection();
			String sql = "select zipcode, sido, gugun, dong, ri, bunji from zipcode where dong like ?";
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, strDong + '%');
		
			rs = pstmt.executeQuery();
		
			while(rs.next()) {
				ZipcodeTO to = new ZipcodeTO();
				to.setZipcode(rs.getString("zipcode"));
				to.setSido(rs.getString("sido"));
				to.setGugun(rs.getString("gugun"));
				to.setDong(rs.getString("dong"));
				to.setRi(rs.getString("ri"));
				to.setBunji(rs.getString("bunji"));
			
				lists.add(to);
			}
		
		}  catch( SQLException e ) {
			System.out.println( "[에러] " + e.getMessage() );
		} finally {
			if( pstmt!= null ) try {pstmt.close();} catch(SQLException e) {}
			if( rs != null ) try {rs.close();} catch(SQLException e) {}
			if( conn != null ) try {conn.close();} catch(SQLException e) {}
		}
		return lists;	
	}
}

Zipcode - controller 역할

즉, Zipcode 클래스는 "/zipcode" URL로 요청이 들어왔을 때 "zipcode"라는 뷰 페이지를 반환하는 역할을 수행합니다.

package model2;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

public class Zipcode implements Controller {

	@Override
	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
		// TODO Auto-generated method stub
		System.out.println("Zipcode 호출");
		return new ModelAndView("zipcode");
	}

}

ZipcodeOk

package model2;

import java.util.ArrayList;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

import model1.ZipcodeDAO;
import model1.ZipcodeTO;

public class ZipcodeOk implements Controller {
	
	@Override
	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
		// TODO Auto-generated method stub
		System.out.println("ZipcodeOk 호출");
		
		String strDong = request.getParameter("dong");
		//System.out.println(strDong);	
		
		ZipcodeDAO dao = new ZipcodeDAO();
		ArrayList<ZipcodeTO> lists = dao.zipcodeList(strDong);
		
		//System.out.println(lists.size()); // 데이터 갯수 확인
		
		ModelAndView modelAndView = new ModelAndView();
		modelAndView.setViewName("zipcode_ok");
		modelAndView.addObject("lists", lists);
	
		return  modelAndView;
	}

}

zipcode.jsp - controller 역할

즉, ZipcodeOk 클래스는 "/zipcode_ok" URL로 요청이 들어왔을 때 "zipcode_ok"라는 뷰 페이지를 반환하며, 해당 뷰 페이지에서는 우편번호 데이터를 이용하여 원하는 방식으로 화면에 표시될 수 있습니다.

<%@ 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>
zipcode.jsp<br><br>
<form action="zipcode_ok.do" method="post">
동이름 <input type="text" name="dong"/>
<input type="submit" value="검색"/>
</form>
</body>
</html>

zipcode_ok.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="model1.ZipcodeTO" %>
<%@ page import="model1.ZipcodeDAO" %>
<%@ page import="java.util.ArrayList" %>

<%
	ArrayList<ZipcodeTO> lists = (ArrayList)request.getAttribute("lists");

	StringBuilder sbHtml = new StringBuilder();
	sbHtml.append("<table>");
	for(ZipcodeTO to : lists) {
		sbHtml.append("<tr>");
		sbHtml.append("<td>" + to.getZipcode() + "</td>");
		sbHtml.append("<td>" + to.getSido() + "</td>");
		sbHtml.append("<td>" + to.getGugun() + "</td>");
		sbHtml.append("<td>" + to.getDong() + "</td>");
		sbHtml.append("<td>" + to.getRi() + "</td>");
		sbHtml.append("<td>" + to.getBunji() + "</td>");
		sbHtml.append("</tr>");
	}
	sbHtml.append("</table>");
%>

<%=sbHtml %>

0개의 댓글