FireDrago
[Servlet] MVC2 연습하기 - CR 구현 본문
- mvc 2
모든 요청을 컨트롤러가 받아서 모델, 뷰와 연결하는 패턴을 말한다.
1. web.xml 설정 (컨트롤러 설정)
<servlet>
<servlet-name>controller</servlet-name>
<servlet-class>controller.memcontroller</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>controller</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
controller 패키지의 memcontroller 가 controller 라는 이름의 컨트롤러가 되고,
모든 .do 요청에대해서 우선적으로 처리하게된다.
2. 컨트롤러 클래스 작성
public class memcontroller extends HttpServlet{
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
@Override
public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//텍스트 편집
String RequestURI = req.getRequestURI();
String contextPath = req.getContextPath();
String command = RequestURI.substring(contextPath.length());
System.out.println(command);
if (command.equals("/read.do")) {
System.out.println("/read.do실행");
read(req); // 모델 호출 (여기서는 메서드로 간단히 처리)
RequestDispatcher fw = req.getRequestDispatcher("./read.jsp"); //뷰에 리퀘스트 재활용해서 보냄
fw.forward(req, resp);
}
else if(command.equals("/create.do")) {
System.out.println("/create.do실행");
create(req);
RequestDispatcher fw = req.getRequestDispatcher("./create.jsp");
fw.forward(req, resp);
}
else if(command.equals("/create_action.do")) {
System.out.println("/create_action.do실행");
create_action(req);
RequestDispatcher fw = req.getRequestDispatcher("/read.do");
fw.forward(req, resp);
}
}
public void read(HttpServletRequest request) {
dao daoconn = dao.getinstance();
ArrayList<member> allmember = daoconn.getallmember();
request.setAttribute("all", allmember);
}
public void create(HttpServletRequest request) {
System.out.println("생성실행");
}
public void create_action (HttpServletRequest request) {
dao daoconn = dao.getinstance();
String id = request.getParameter("id");
String pw = request.getParameter("pw");
member mb = new member();
mb.setId(id);
mb.setPassword(pw);
daoconn.insert(mb);
}
}
편의를 위해 컨트롤러 클래스에 모델 역할을 하는 함수 read( ) ,create( ), create_action( )을 함께 작성했다.
다양한 요청 (/read.do , /create.do, /create_action.do )에 따라 적절한 메서드를 호출한뒤 (모델 ) , 클라이언트에게 보여질
jsp 페이지 (뷰)를 연결한다. 뷰에 필요한 파라미터도 request 에 담아서 함께 보낸다.
3. dto 객체 생성
dto 객체는 도메인 객체라고도 한다. 데이터를 담는 최소의 단위 객체이다.
package DTO;
public class member {
private String id;
private String password;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
4. dao 객체 생성
- dao 객체는 dto 객체에 담긴 각각의 정보들을 ArrayList에 담아 관리하고, 데이터베이스와 연결하여 각종 작업을 수행하는 클래스이다.
package DAO;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import DTO.member;
public class dao {
private static dao instance = new dao();
private dao() {}
public static dao getinstance() {
return instance;
}
public ArrayList<member> getallmember() {
Connection conn = null;
PreparedStatement pstmt=null;
ResultSet result = null;
try {
//데이터베이스 연결
String url = "jdbc:mysql://localhost:3306/crud";
String user = "root";
String password ="****";
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(url,user,password);
//sql 실행하여 결과값 받기
String sql = "select * from member";
pstmt = conn.prepareStatement(sql);
result = pstmt.executeQuery();
//결과값을 ArrayList에 담고 반환
ArrayList<member> allmember = new ArrayList<member>();
while(result.next()) {
String id = result.getString("id");
String pw = result.getString("password");
//member 객체하나는 데이터베이스 레코드 하나다.
member mb = new member();
mb.setId(id);
mb.setPassword(pw);
allmember.add(mb);
}
return allmember;
} catch(Exception ex) {
ex.printStackTrace();
}
//데이터베이스 연결했으면 반드시 닫아줘야한다.
finally {
if(result !=null) {try{result.close();}catch(Exception e){}}
if(pstmt != null) {try{pstmt.close();}catch(Exception e){}}
if(conn != null) {try{conn.close();}catch(Exception e){}}
}
return null;
}
public void insert(member mb) {
Connection conn = null;
PreparedStatement pstmt=null;
try
{
String url = "jdbc:mysql://localhost:3306/crud";
String user = "root";
String password ="1234";
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(url,user,password);
String sql = "insert into member values(?,?)";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, mb.getId());
pstmt.setString(2, mb.getPassword());
pstmt.executeUpdate();
} catch (Exception ex) {
System.out.println("insertBoard() 에러 : " + ex);
} finally {
try {
if (pstmt != null)
pstmt.close();
if (conn != null)
conn.close();
} catch (Exception ex) {
throw new RuntimeException(ex.getMessage());
}
}
}
}
5. 뷰 페이지 작성
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.*" %>
<%@ page import="DTO.member" %>
<%
System.out.println("출력페이지 도착");
ArrayList<member> all = (ArrayList<member>) request.getAttribute("all");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
for(int i=0; i<all.size(); i++){
member mb = (member) all.get(i);
%>
<div style="border:1px solid red; width:30%;">
<h1>아이디 :</h1><h2><%= mb.getId() %></h2>
<h1>패스워드 :</h1><h2><%= mb.getPassword() %></h2>
</div>
<%
}
%>
<div>
<h1></h1>
</div>
</body>
</html>
read .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>
<h1>회원가입</h1>
<form action="/CRUD/create_action.do" method="post">
<p> 아이디 : <input type="text" name="id"></p>
<p> 패스워드 :<input type="text" name="pw"></p>
<input type="submit" value="전송">
</form>
</body>
</html>
create.jsp는 수정할 데이터를 입력받는 페이지
'프로젝트' 카테고리의 다른 글
| [bobzip] 사용자정의 Validation으로 중복검사 하기 (0) | 2024.06.11 |
|---|---|
| [bobzip] 테스트하기 편한 엔티티 생성 (Builder) (0) | 2024.06.10 |
| [BoBzip] 프로젝트 기능정리 (0) | 2024.05.23 |
| [JpaShop] 회원 가입 api 구현 (0) | 2024.04.11 |
| [웹 쇼핑몰] 시작페이지 (0) | 2023.06.21 |
