Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

wintertreey 님의 블로그

MVC Model2: DB 연동하기 본문

JSP

MVC Model2: DB 연동하기

wintertreey 2024. 7. 2. 09:27
  Views : 사용자  Controller(Servlet) : 중개자 Model : 디비연결 MyBatis
상품보기 go.html ControllerService / 
CommandInter, SangpumImpl
MessageModel / 
SangpumDto, SqlMapConfig,
Configuration,
DataMapper
db.properties

 

 

ControllerService.java

package pack.controller;

import java.io.IOException;
import java.util.StringTokenizer;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("*.do")
public class ControllerService extends HttpServlet {
	private static final long serialVersionUID = 1L;

	
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//방법1: parameter 사용
		//String command = request.getParameter("command");
		
		//방법2: 파일명 요청으로 사용
		String ss= request.getRequestURI();
		//System.out.println("ss: "+ss);//ss: /wmvc4sangpum/sang.do
		int idx = ss.lastIndexOf('/');
		StringTokenizer st = new StringTokenizer(ss.substring(idx+1),".");
		ss = st.nextToken();
		//System.out.println("ss: "+ss); //ss: sang //ss: jikwon
        
        CommandInter inter = null;
		String viewName = "/WEB-INF/views/";
		String command = ss;

 

앞에선 parameter로 값을 받아와서 처리했었는데

이번엔 아예 파일명자체로 처리해본다. 

(이게 더 Spring에 가까운 방법)

 

 

CommandInter.java

package pack.controller;

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

public interface CommandInter {
	String showData(HttpServletRequest request, HttpServletResponse response) throws Exception;
	
}

 

SangpumImpl.java

package pack.controller;

import java.util.ArrayList;

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

import pack.model.SangpumDto;
import pack.model.SangpumModel;

public class SangpumImpl implements CommandInter{
//Model과 통신하기 위한 Controller 영역 내 클래스
@Override
public String showData(HttpServletRequest request, HttpServletResponse response) throws Exception {
SangpumModel sangpumModel = new SangpumModel(); // 싱글톤을 써야함

ArrayList<SangpumDto> list = (ArrayList<SangpumDto>)sangpumModel.selectDataAll();
request.setAttribute("datas", list);
return "show.jsp";
}

}

 

모델로 넘어가서 DB와 연동된 값을 가지고 오자.

 

 

DTO주머니

SangpumDto.java

package pack.model;

public class SangpumDto {
	private String code, sang, su, dan;

	public String getCode() {
		return code;
	}

	public void setCode(String code) {
		this.code = code;
	}

	public String getSang() {
		return sang;
	}

	public void setSang(String sang) {
		this.sang = sang;
	}

	public String getSu() {
		return su;
	}

	public void setSu(String su) {
		this.su = su;
	}

	public String getDan() {
		return dan;
	}

	public void setDan(String dan) {
		this.dan = dan;
	}
	
	
}

 

세션 연

SqlMapConfig.java

package pack.model;

import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;


public class SqlMapConfig {
	public static SqlSessionFactory sqlSession;  //DB의 SQL명령을 실행시킬 때 필요한 메소드를 갖고 있다.
	 
	  static{
	     String resource = "pack/mybatis/Configuration.xml";
	     try {
	         Reader reader = Resources.getResourceAsReader(resource);
	         sqlSession = new SqlSessionFactoryBuilder().build(reader);
	         reader.close();
	     } catch (Exception e) {
	     System.out.println("SqlMapConfig 오류 : " + e);
	  }
	}
	 
	public static SqlSessionFactory getSqlSession(){
	     return sqlSession;
	  }
	
}

 

SangpumModel.java

package pack.model;

import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

public class SangpumModel {
	private SqlSessionFactory factory = SqlMapConfig.getSqlSession();
	
	public List<SangpumDto> selectDataAll(){
		List<SangpumDto> list = null;
		
		SqlSession session = factory.openSession();
		list = session.selectList("selectDataAll");
		session.close();
		
		return list;
	}
}

 

 

Mybatis 

 

db.properties

driver=org.mariadb.jdbc.Driver
url=jdbc:mariadb://localhost:3306/test
username=root
password=123

 

Configuration.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
 <properties resource="pack/mybatis/db.properties" />
 
 <environments default="dev">
  <environment id="dev">
   <transactionManager type="JDBC" />
   <dataSource type="POOLED">
    <property name="driver" value="${driver}" />
    <property name="url" value="${url}" />
    <property name="username" value="${username}" />
    <property name="password" value="${password}" />
   </dataSource>
  </environment>
 </environments>
 <mappers>
  <mapper resource="pack/mybatis/DataMapper.xml" />
 </mappers>
</configuration>

 

DataMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="dev">

 <select id="selectDataAll" resultType="pack.model.SangpumDto">
  select * from sangdata order by code asc
 </select>
</mapper>

 

 

 

다시 Controller에게 돌아가자

try {
			if(command.equals("sang")) {
				inter = new SangpumImpl();
				viewName += inter.showData(request, response);
				request.getRequestDispatcher(viewName).forward(request, response);
			}else if(command.equals("jikwon")){
				//....
			}else {
				viewName = "error.html";
				response.sendRedirect(viewName);
			}
		} catch (Exception e) {
			System.out.println("service err: "+e);
		}
		
	}

 

포워드로 값을 받아온다. 

 

출력결과

'JSP' 카테고리의 다른 글

JSTL  (0) 2024.07.03
Redirect 리다이렉트 vs Forward 포워드 방식  (0) 2024.07.02
MVC Model2: 인터페이스를 사용한 Controller  (0) 2024.07.01
빌드 관리 도구 maven gradle  (0) 2024.07.01
MVC패턴  (2) 2024.07.01