본문 바로가기

웹 개발/JSP

[Web_JSP] 08

●​ MVC - model2 방식

 

- a.jsp에서 다음 페이지를 이동하기 전 필요한 비지니스 로직을 완벽하게 분리하여 관리한다.

- 사용자가 정의한 확장자(.me, .bo, ...)를 페이지 이동 주소(URL)에 작성하게 되면 web.xml에 가서 경로를 찾는다.

- web.xml에 파일 경로를 하나씩 모두 만들게 되면 코드가 길어지기 때문에

   *.me와 같이 그룹화시킨 확장자로 요청을 하나의 경로로 보내주도록 설정한다.

- 이 경로를 알맞는 Front-Controller.java 경로로 설정해 놓는다.

- Front-Controller에서는 들어온 요청에서 .me 앞의 요청 명으로 어떤 로직을 수행할 지를 판단하도록 분기 처리를 한다.

- 비지니스 로직을 Front-Controller에서 작업하게 되면 코드가 길어지고 유지보수 및 재사용이 어렵기 때문에

   요청별로 Controller를 만들어서 req와 resp를 받을 메소드를 선언하여 구현한다.

- 메소드 내부에서의 DB연산 작업들은 모두 DAO로 분리하여 사용한다.

- 내부 작업이 모두 완료되면 페이지를 이동할 것인지, 어떤 방식으로 전송할 것인지, 그리고 어디로 이동할 것인지를
   리턴해야 한다.

 

1. redirect(request 객체 초기화)

- redirect 방식으로 전송하면 request객체가 초기화되므로 이전 정보가 사라진다.

(ex) 글 작성, 결제 등

 

2. forward(request 유지)

- 응답 페이지로 값을 전달해야 할 경우 사용한다.

(ex) 목록, 검색 등

 

 

 


 

실습(MVC)

0. dBeaver에서 생성했던 database 사용 설정 및 테이블 생성

create database form;
use form;

create table tbl_member(
	memberNum int unsigned auto_increment primary key,
	member_id varchar(1000),
	member_name varchar(500),
	member_pw varchar(1000),
	member_gender varchar(3),
	member_address varchar(2000),
	member_address_detail varchar(2000)
);

select * from tbl_member;

 

 

 

1. MyBatisConfig.java

package com.mybatis.config;

import java.io.IOException;
import java.io.Reader;

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

public class MyBatisConfig { 
	
	private static SqlSessionFactory sqlSessionFactory;
	
	static {
		try {
			String resource = "./com/mybatis/config/config.xml";
			Reader reader = Resources.getResourceAsReader(resource);
			sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
			reader.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public static SqlSessionFactory getSqlSessionFactory() {
		return sqlSessionFactory;
	}
}

 

 

 

2. config.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>
	<typeAliases>
		<typeAlias type="com.member.domain.vo.MemberVO" alias="memberVO"/>
	</typeAliases>

	<environments default="mysql">
		<environment id="mysql">
			<transactionManager type="JDBC"/>
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
				<property name="url" value="jdbc:mysql://localhost:3306/form"/>
				<property name="username" value="root"/>
				<property name="password" value="1234"/>
			</dataSource> 
		</environment>
	</environments>
	
	<mappers>
		<mapper resource="com/mybatis/mapper/MemberMapper.xml"/>
	</mappers>
</configuration>

 

 

 

3. MemberMapper.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="Member">
	<!-- 회원가입 -->
	<insert id="join" parameterType="memberVO">
		insert into tbl_member
		(member_id, member_name, member_pw, member_gender, member_address, member_address_detail)
		values(#{memberId}, #{memberName}, #{memberPw}, #{memberGender}, #{memberAddress}, #{memberAddressDetail})
	</insert>
</mapper>

 

 

 

4. MemberVO.java

package com.member.domain.vo;

public class MemberVO {
	private int memberNumber;
	private String memberId;
	private String memberName;
	private String memberPw;
	private String memberGender;
	private String memberAddress; 
	private String memberAddressDetail;
	
	public MemberVO() {;}

	public int getMemberNumber() {
		return memberNumber;
	}

	public void setMemberNumber(int memberNumber) {
		this.memberNumber = memberNumber;
	}

	public String getMemberId() {
		return memberId;
	}

	public void setMemberId(String memberId) {
		this.memberId = memberId;
	}

	public String getMemberName() {
		return memberName;
	}

	public void setMemberName(String memberName) {
		this.memberName = memberName;
	}

	public String getMemberPw() {
		return memberPw;
	}

	public void setMemberPw(String memberPw) {
		this.memberPw = memberPw;
	}

	public String getMemberGender() {
		return memberGender;
	}

	public void setMemberGender(String memberGender) {
		this.memberGender = memberGender;
	}

	public String getMemberAddress() {
		return memberAddress;
	}

	public void setMemberAddress(String memberAddress) {
		this.memberAddress = memberAddress;
	}

	public String getMemberAddressDetail() {
		return memberAddressDetail;
	}

	public void setMemberAddressDetail(String memberAddressDetail) {
		this.memberAddressDetail = memberAddressDetail;
	}
}

 

 

 

5. ActionInfo.java

package com.member.action;

public class ActionInfo {
	private boolean isRedirect;
	private String path;
	
	public ActionInfo() {;}

	public boolean isRedirect() { 
		return isRedirect;
	}

	public void setRedirect(boolean isRedirect) {
		this.isRedirect = isRedirect;
	}

	public String getPath() {
		return path;
	}

	public void setPath(String path) {
		this.path = path;
	}
}

 

 

 

6. MemberFrontController.java

package com.member; 

import java.io.IOException;

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

import org.apache.ibatis.session.SqlSession;

import com.member.action.ActionInfo;
import com.member.domain.vo.MemberVO;
import com.mybatis.config.MyBatisConfig;

public class MemberFrontController extends HttpServlet{
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doProcess(req, resp);
	}
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doProcess(req, resp);
	}

	protected void doProcess(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		String requestURL = req.getRequestURI();
		String command = requestURL.substring(requestURL.lastIndexOf("/") + 1);
		ActionInfo actionInfo = null;
		
		if(command.equals("JoinOk.me")) {
			new MemberJoinOk().execute(req, resp);
		} else if(command.equals("Join.me")) {
			actionInfo = new ActionInfo();
			actionInfo.setRedirect(true);
			actionInfo.setPath("/join.jsp");
		} else {
			// 404 일 때 출력할 에러 페이지 경로 작성
		}
	}
}

 

 

 

 

'웹 개발 > JSP' 카테고리의 다른 글

[Web_JSP] 10  (0) 2022.05.29
[Web_JSP] 09  (0) 2022.05.28
[Web_JSP] 07  (0) 2022.05.26
[Web_JSP] 06  (0) 2022.05.24
[Web_JSP] 05  (0) 2022.05.23