● MVC - model2 방식
![](https://blog.kakaocdn.net/dn/bLlwUP/btrC1S50E0W/zcMwS3t7KGXgqpBRCIlC9k/img.png)
- 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 |