KDT/WEB

240112 WEB - JSP22(MVC, JSTL)

001cloudid 2024. 1. 12. 12:51
728x90

MVC, JSTL

<%@page import="com.itwillbs.domain.MemberDTO"%>

<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>member/info.jsp</title>
</head>
<body>
<h1>member/info.jsp</h1>
<h1>회원 정보 조회</h1>
<%
// String id = (String)session.getAttribute("id");
// //()클래스의 형 변환
// //main.jsp에서 info.jsp로 이동할 때 값을 들고오지 않음
// //연결정보를 저장하는 session 내장객체 안에 로그인표시("id","id값") 저장
// //session에서 로그인 표시값 가져오기 → String id 변수에 저장

// request.setCharacterEncoding("utf-8");

// //MemberDAO 객체 생성 -> 기억 장소 할당
// MemberDAO memberDAO = new MemberDAO();
// System.out.println("MemberDAO의 기억장소 주소 : " + memberDAO);
// //MemberDAO에 리턴할 형 MemberDTO getMember(String id) 메소드 정의
// //MemberDTO memberDTO = MemberDAO의 기억장소 주소.getMember(id) 메소드 호출
// MemberDTO memberDTO = memberDAO.getMember(id);
// //id가 일치했을 때 memberDTO에 id, pw, name, date가 저장해서 리턴,
// //그렇지 않을 경우 memberDTO에 비어있는 값 null이 리턴
// System.out.println("리턴 받은 MemberDTO의 바구니 기억장소 주소 : " + memberDTO);

// MemberDTO memberDTO = (MemberDTO)request.getAttribute("memberDTO");

// if(memberDTO != null){
%>
<%-- 아이디 : <%=memberDTO.getId() %> <br> --%>
<%-- 비밀번호 : <%=memberDTO.getpw() %> <br> --%>
<%-- 이름 : <%=memberDTO.getName() %> <br> --%>
<%-- 가입날짜 : <%=memberDTO.getDate() %> <br> --%>
<%
// }else {
%>
<!-- 아이디 없음 -->
<%
//}
%>
<!-- // MemberDTO memberDTO = (MemberDTO)request.getAttribute("memberDTO"); 사용하지 않고 c:set 이용--> 
<c:set var="memberDTO" value="${requestScope.memberDTO }"/>
<c:choose>
<c:when test="${! empty memberDTO }">
아이디 : ${memberDTO.id}<br>
비밀번호 : ${memberDTO.pw}<br>
이름 : ${memberDTO.name}<br>
가입날짜 : ${memberDTO.date}<br>
</c:when>
<c:otherwise>
아이디 없음
</c:otherwise>
</c:choose>
<a href="main.me">main.me 이동</a>
</body>
</html>

 

<%@page import="com.itwillbs.domain.MemberDTO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>member/update.jsp</title>
</head>
<body>
<h1>member/update.jsp</h1>
<h1>회원 정보 수정</h1>
<!-- 비밀번호가 맞는지 안맞는지를 먼저 확인한 후 이름만 수정 -->
<%
// request.setCharacterEncoding("utf-8");
// String id = (String)session.getAttribute("id");
// //자바 파일 MemberDAO 객체 생성
// MemberDAO memberDAO = new MemberDAO();
// System.out.println("MemberDAO의 기억장소 주소 : " + memberDAO);
// //MemberDTO memberDTO = MemberDAO의 기억장소 주소 .getMember(id) 메소드 호출
// MemberDTO memberDTO = memberDAO.getMember(id);
// System.out.println("리턴 받은 MemberDTO의 바구니 기억장소 주소 : " + memberDTO);
// MemberDTO memberDTO = (MemberDTO)request.getAttribute("memberDTO");
// if(memberDTO!=null){
%>
<!-- <form action="updatePro.me" method="post"> -->
<%-- 아이디 : <input type="text" name="id" value="<%=memberDTO.getId() %>" readonly><br> --%>
<!-- 비밀번호 : <input type="password" name="pw"> 비밀번호 입력 시 회원정보 수정<br> -->
<%-- 이름 : <input type="text" name="name" value="<%=memberDTO.getName() %>"><br> --%>
<%
// }
%>
<c:set var="memberDTO" value="${requestScope.memberDTO }" />
<c:if test="${! empty memberDTO }">
<form action="updatePro.me" method="post">
아이디 : <input type="text" name="id" value="${memberDTO.id }" readonly><br>
비밀번호 : <input type="password" name="pw"> 비밀번호 입력 시 회원정보 수정<br>
이름 : <input type="text" name="name" value="${memberDTO.name }"><br>
<input type="submit" value="회원정보수정">
</form>
</c:if>
<c:if test="${empty memberDTO }">
아이디 없음
</c:if>
</body>
</html>

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>member/delete.jsp</title>
</head>
<body>
<h1>member/delete.jsp</h1>
<h1>회원 정보 삭제</h1>
<%
//main.jsp에서 delete.jsp로 이동할 때 아무값도 없이 이동
//연결정보를 저장하는 session 내장객체 안에 로그인표시("id","asdf") 저장
//session에서 로그인 표시값 가져오기 String id 변수저장
// String id = (String)session.getAttribute("id");
%>
<form action="deletePro.me" method="post">
아이디 : <input type="text" name="id" value="${sessionScope.id}" readonly><br>
비밀번호 : <input type="password" name="pw"><br>
<input type="submit" value="회원정보삭제">
</form>
</body>
</html>

 

<%@page import="com.itwill.dao.MemberDAO"%>
<%@page import="java.util.ArrayList"%>
<%@page import="com.itwillbs.domain.MemberDTO"%>
<%@page import="com.itwillbs.controller.MemberController"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>member/list.jsp</title>
</head>
<body>
<h1>member/list.jsp</h1>
<h1>회원 목록</h1>
<%
//로그인 표시 → 세션에서 "id"값을 가져와서 → String id 저장
String id = (String)session.getAttribute("id");

//로그인 표시값이 있으면 login.jsp이동, 있으면 로그인표시값이 "admin"이 아니면 main.jsp이동
if(id==null){
response.sendRedirect("login.me");
}else{
if(!id.equals("admin")){
response.sendRedirect("main.me");
}
}
//MemberDAO 객체생성
// MemberDAO memberDAO = new MemberDAO();
//ArrayList 자바 내장객체
//→ 배열(같은 기억장소를 여러 개 사용)에 단점(초기기억장소가 고정)울 보완한 자바 내장객체 배열
//→ 기억장소 10개 할당 → 데이터가 10개가 넘어가면 추가로 10개가 추가되어짐
//→ java.util.ArrayList
// ArrayList 데이터 개수 : .size()
// ArrayList 배열에 데이터 저장(순서대로 값이 저장) : .add(memberDTO 주소값)
// ArrayList 배열에 데이터 가져오기 : .get(순서)
//ArrayList<MemberDTO> 리턴할 형 getMemberList() 메소드 정의
//ArrayList<MemberDTO> memberList = getMemberList() 메소드 호출
// ArrayList<MemberDTO> memberList = memberDAO.getMemberList();
//request에서 값을 가지고 와서
// ArrayList<MemberDTO> memberList = (ArrayList<MemberDTO>)request.getAttribute("memberList");
%>
<c:set var="memberList" value="${requestScope.memberList }"/>
<table border="1">
<tr><td>아이디</td><td>비밀번호</td><td>이름</td><td>가입날짜</td></tr>
<%
// for(int i = 0; i < memberList.size(); i++){
// MemberDTO memberDTO = memberList.get(i);
%>
<%-- <tr><td><%=memberList.get(i).getId() %></td> --%>
<%-- <td><%=memberList.get(i).getpw() %></td> --%>
<%-- <td><%=memberList.get(i).getName() %></td> --%>
<%-- <td><%=memberList.get(i).getDate() %></td></tr> --%>
<%
// }
%>
<!--                    변수                                  배열 -->
<c:forEach var="memberDTO" items="${memberList }">
<tr><td>${memberDTO.id}</td>
<td>${memberDTO.pw}</td>
<td>${memberDTO.name}</td>
<td>${memberDTO.date}</td></tr>
</c:forEach>
</table>
</body>
</html>

 

<%@page import="com.itwill.dao.MemberDAO"%>
<%@page import="java.util.ArrayList"%>
<%@page import="com.itwillbs.domain.MemberDTO"%>
<%@page import="com.itwillbs.controller.MemberController"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>member/list.jsp</title>
</head>
<body>
<h1>member/list.jsp</h1>
<h1>회원 목록</h1>
<c:if test="${empty sessionScope.id }">
<c:redirect url="login.me"/>
</c:if>
<c:if test="${! empty sessionScope.id }">
<c:if test="${! sessionScope.id == 'admin' }">
<c:redirect url="main.me"/>
</c:if>
</c:if>
<%
//로그인 표시 → 세션에서 "id"값을 가져와서 → String id 저장
// String id = (String)session.getAttribute("id");
%>
<%
//로그인 표시값이 있으면 login.jsp이동, 있으면 로그인표시값이 "admin"이 아니면 main.jsp이동
// if(id==null){
// response.sendRedirect("login.me");
// }else{
// if(!id.equals("admin")){
// response.sendRedirect("main.me");
// }
// }
//MemberDAO 객체생성
// MemberDAO memberDAO = new MemberDAO();
//ArrayList 자바 내장객체
//→ 배열(같은 기억장소를 여러 개 사용)에 단점(초기기억장소가 고정)울 보완한 자바 내장객체 배열
//→ 기억장소 10개 할당 → 데이터가 10개가 넘어가면 추가로 10개가 추가되어짐
//→ java.util.ArrayList
// ArrayList 데이터 개수 : .size()
// ArrayList 배열에 데이터 저장(순서대로 값이 저장) : .add(memberDTO 주소값)
// ArrayList 배열에 데이터 가져오기 : .get(순서)
//ArrayList<MemberDTO> 리턴할 형 getMemberList() 메소드 정의
//ArrayList<MemberDTO> memberList = getMemberList() 메소드 호출
// ArrayList<MemberDTO> memberList = memberDAO.getMemberList();
//request에서 값을 가지고 와서
// ArrayList<MemberDTO> memberList = (ArrayList<MemberDTO>)request.getAttribute("memberList");
%>
<c:set var="memberList" value="${requestScope.memberList }"/>
<table border="1">
<tr><td>아이디</td><td>비밀번호</td><td>이름</td><td>가입날짜</td></tr>
<%
// for(int i = 0; i < memberList.size(); i++){
// MemberDTO memberDTO = memberList.get(i);
%>
<%-- <tr><td><%=memberList.get(i).getId() %></td> --%>
<%-- <td><%=memberList.get(i).getpw() %></td> --%>
<%-- <td><%=memberList.get(i).getName() %></td> --%>
<%-- <td><%=memberList.get(i).getDate() %></td></tr> --%>
<%
// }
%>
<!-- 변수 배열 -->
<c:forEach var="memberDTO" items="${memberList }">
<tr><td>${memberDTO.id}</td>
<td>${memberDTO.pw}</td>
<td>${memberDTO.name}</td>
<td>${memberDTO.date}</td></tr>
</c:forEach>
</table>
</body>
</html>

게시판

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>MVCProject</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.jsp</welcome-file>
<welcome-file>default.htm</welcome-file>
</welcome-file-list>

(...생략...)

<!--
p556 MVC(모델2)
가상주소 http://localhost:8080/MVCProject/write.bo
→ 가상주소 .me로 끝나는 주소 요청이 들어 오면 서블릿 이름 BoardController 연결
→ 서블릿 이름 BoardController 찾아가서
→ com.itwillbs.controller 폴더(패키지) BoardController 주소 매핑(가상주소를 실제 페이지 연결)하는 파일 연결
-->

<servlet-mapping>
<servlet-name>BoardController</servlet-name>
<url-pattern>*.bo</url-pattern>
</servlet-mapping>

<servlet>
<servlet-name>BoardController</servlet-name>
<!-- <servlet-class>폴더(패키지).파일이름</servlet-class> -->
<servlet-class>com.itwillbs.controller.BoardController</servlet-class>
</servlet>
</web-app>

 

package com.itwillbs.controller;

import java.io.IOException;

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

import com.itwillbs.service.BoardService;
//순수 자바 파일
public class BoardController extends HttpServlet{

RequestDispatcher dispatcher = null;
BoardService bs = null;

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("BoardController doGet()");
doProcess(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("BoardController doPost()");
doProcess(request, response);
}

//주소 매핑을 위한 메소드 정의
protected void doProcess(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("BoardController doProcess()");

//가상 주소 http://localhost:8080/MVCProject/write.bo
String sPath = request.getServletPath();
System.out.println("가상 주소 뽑기 : " + sPath);

if(sPath.equals("/write.bo")) {
System.out.println("가상주소 비교 /write.bo 일치");
//1) 실제페이지 board/write.jsp 주소 변경 없이 이동(특이한 이동방식) → 화면만 바뀜.
//액션태그 <jsp:forward> 같은 이동 방식
//2) 이동할 때 request, response 값을 들고 이동
dispatcher = request.getRequestDispatcher("board/write.jsp");
dispatcher.forward(request, response);
}
}//doProcess()
} //닫는 괄호
 

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>board/write.jsp</title>
</head>
<body>
<
//로그인 표시값을 session에서 가져와서 변수에 저장
// String id = (String)session.getAttribute("id");
%>
<h1>board/write.jsp</h1>
<h1>글쓰기</h1>
<form action="writePro.bo" method="post">
<table border="1">
<tr><td>작성자</td><td><input type="text" name="name" value="${sessionScope.id }" readonly></td></tr>
<tr><td>제목</td><td><input type="text" name="subject"></td></tr>
<tr><td>내용</td><td><textarea name="content" rows="10" cols="20"></textarea></td></tr>
<tr><td colspan="2"><input type="submit" value="글쓰기"></td></tr>
</table>
</form>
</body>
</html>

 

package com.itwillbs.domain;

import java.sql.Timestamp;

public class BoardDTO {

private String id;
private String subject;
private String content;
private int num;
private int readcount;
private Timestamp date;

public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public int getReadcount() {
return readcount;
}
public void setReadcount(int readcount) {
this.readcount = readcount;
}
public Timestamp getDate() {
return date;
}
public void setDate(Timestamp date) {
this.date = date;
}
}

 

public class BoardDAO {
Connection con = null;
PreparedStatement ps = null;
ResultSet rs = null;

public Connection getConnection() {

try {
// Class.forName("com.mysql.cj.jdbc.Driver");
// String dbUrl = "jdbc:mysql://localhost:3306/jspdb?serverTimezone=Asia/Seoul";
// String dbUser = "root";
// String dbPw = "1234";
// con = DriverManager.getConnection(dbUrl, dbUser, dbPw);

//커넥션 풀(Connenction Pool(CP) : 서버단에서 연결정보를 저장)
//데이터베이스와 연결된 Connection 객체를 미리 생성하여 풀(Pool) 기억공간에 저장
//→ 필요할 때 마다 풀에 접근해서 Connection객체를 사용하고 끝나면 반환
// 장점 : 속도 향상, DB연결정보를 한 번만 수정해서 사용
// 톰캣에서 제공하는 DBCP(Database Connection Pool) 사용
//1) META-INF 폴더에 context.xml 파일을 만들고 커넥션 풀 디비연결정보 정의
//2) DAO에서 디비연결자원의 이름을 불러서 사용
// import javax.naming.Context;
// import javax.naming.InitialContext;
Context init = new InitialContext();
//init.lookup("자원이름/자원이름");
//자원위치 : java:comp/env
//자원이름 : jdbc/Mysql
// import javax.sql.DataSource;
DataSource ds = (DataSource)init.lookup("java:comp/env/jdbc/MysqlDB");
con = ds.getConnection();

} catch (Exception e) {
e.printStackTrace();
}
return con;
}

// 내장객체 기억장소 해제 메소드
// finally
public void dbClose() {
if(rs!=null) {
try {
rs.close();
} catch (Exception e1) {
e1.printStackTrace();
}
}
if(ps!=null) {
try {
ps.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
if(con!=null) {
try {
con.close();
} catch (Exception e3) {
e3.printStackTrace();
}
}
}

public void insertBoard(BoardDTO boardDTO) {
// System.out.println(boardDTO.getName());
// System.out.println(boardDTO.getSubject());
// System.out.println(boardDTO.getContent());
// System.out.println(boardDTO.getNum());
// System.out.println(boardDTO.getReadcount());
// System.out.println(boardDTO.getDate());
try {
con = getConnection();

String sql = "insert into board(name,subject,content,num,readcount,date) values(?,?,?,?,?,?)";
ps = con.prepareStatement(sql);
ps.setString(1, boardDTO.getId());
ps.setString(2, boardDTO.getSubject());
ps.setString(3, boardDTO.getContent());
ps.setInt(4, boardDTO.getNum());
ps.setInt(5, boardDTO.getReadcount());
ps.setTimestamp(6, boardDTO.getDate());

ps.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
//마무리 작업 사용한 내장객체 기억장소 삭제(해제)
//con ps 마지막에 생성된 것부터 close
dbClose();
}
}

//231226
public int getMaxNum() {
int num = 0;
try {
con = getConnection();

String sql = "select max(num) from board";
ps = con.prepareStatement(sql);
rs = ps.executeQuery();

if(rs.next()) {
num = rs.getInt("max(num)");
}

} catch (Exception e) {
e.printStackTrace();
} finally {
dbClose();
}
return num;
}

//231226
public ArrayList<BoardDTO> getBoardList(){
System.out.println("BoardDAO getBoardList()");
ArrayList<BoardDTO> boardList = new ArrayList<BoardDTO>();

try {
con = getConnection();

String sql = "select * from board order by num desc";
ps = con.prepareStatement(sql);
rs = ps.executeQuery();

while(rs.next()) {
//num, name, subject, readCount, date를 boardList에 대입
BoardDTO boardDTO = new BoardDTO();
boardDTO.setNum(rs.getInt("num"));
boardDTO.setId(rs.getString("id"));
boardDTO.setSubject(rs.getString("subject"));
boardDTO.setReadcount(rs.getInt("readCount"));
boardDTO.setContent(rs.getString("content"));
boardDTO.setDate(rs.getTimestamp("date"));
boardList.add(boardDTO);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
}
return boardList;
}

//231226
//요청 주소 : content.jsp?num=1
//서버에 request에 "num"요청 파라미터값을 저장 → 가져와서 변수 int num에 저장
//BoardDTO 리턴할 형, getBoard()(int num) 메소드 정의
//BoardDTO boardDTO = BoardDTO getBoard(num값) 메소드 호출
public BoardDTO getBoard(int num) {
System.out.println("BoardDAO getBoard()");
BoardDTO boardDTO = new BoardDTO();

try {
con = getConnection();
String sql = "select * from board where num=?";
ps = con.prepareStatement(sql);
ps.setInt(1, num);
rs = ps.executeQuery();

if(rs.next()) {
boardDTO.setNum(rs.getInt("num"));
boardDTO.setId(rs.getString("id"));
boardDTO.setReadcount(rs.getInt("readCount"));
boardDTO.setDate(rs.getTimestamp("date"));
boardDTO.setSubject(rs.getString("subject"));
boardDTO.setContent(rs.getString("content"));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
dbClose();
}
return boardDTO;
}

//231228
public void updateReadcount(int num) {
System.out.println("BoardDAO updateReadcount()");
BoardDTO boardDTO = new BoardDTO();

try {
con = getConnection();

String sql = "update board set readcount = readcount+1 where num = ?";
ps = con.prepareStatement(sql);
ps.setInt(1, num);
ps.executeUpdate();

} catch (Exception e) {
e.printStackTrace();
} finally {
dbClose();
}
}

//231228
//리턴할 형 없음. updateBoard(BoardDTO 변수) 메소드 정의
public void updateBoard(BoardDTO boardDTO) {
System.out.println("BoardDAO updateBoard()");

try {
con = getConnection();
String sql = "update board set subject=?, content=? where num = ?";
ps = con.prepareStatement(sql);
ps.setString(1, boardDTO.getSubject());
ps.setString(2, boardDTO.getContent());
ps.setInt(3, boardDTO.getNum());
ps.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
dbClose();
}
}

//231228
public void deleteBoard(BoardDTO boardDTO) {
System.out.println("deleteBoard()");
try {
con = getConnection();

String sql = "delete from board where num=?";
ps = con.prepareCall(sql);
ps.setInt(1, boardDTO.getNum());
ps.executeUpdate();

} catch (Exception e) {
e.printStackTrace();
} finally {
dbClose();
}
}
}

 

package com.itwillbs.service;

import java.sql.Timestamp;

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

import com.itwill.dao.BoardDAO;
import com.itwillbs.domain.BoardDTO;

public class BoardService {

BoardDAO boardDAO = null;

//리턴할 형 없음 insertBoard(request)
public void insertBoard(HttpServletRequest request) {
System.out.println("BoardService insertBoard()");
try {
request.setCharacterEncoding("utf-8");
String id = request.getParameter("id");
String subject = request.getParameter("subject");
String content = request.getParameter("content");
//Board DAO 객체생성
boardDAO = new BoardDAO();
//int형 리턴할 형 getMaxNum()메소드 정의
//max(num)+1
int num = boardDAO.getMaxNum()+1;
//조회수(readcount) 초기값은 0
int readcount = 0;
//날짜(date) 현 시스템 날짜 설정
Timestamp date = new Timestamp(System.currentTimeMillis());

BoardDTO boardDTO = new BoardDTO();
boardDTO.setId(id);
boardDTO.setSubject(subject);
boardDTO.setContent(content);
boardDTO.setDate(date);
boardDTO.setNum(num);
boardDTO.setReadcount(readcount);
boardDTO.setDate(date);

BoardDAO boardDAO= new BoardDAO();

boardDAO.insertBoard(boardDTO);
} catch (Exception e) {
e.printStackTrace();
}
}
}//닫는 괄호

 

package com.itwillbs.controller;

import java.io.IOException;

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

import com.itwillbs.service.BoardService;
//순수 자바 파일
public class BoardController extends HttpServlet{

RequestDispatcher dispatcher = null;
BoardService boardService = null;

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("BoardController doGet()");
doProcess(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("BoardController doPost()");
doProcess(request, response);
}

//주소 매핑을 위한 메소드 정의
protected void doProcess(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("BoardController doProcess()");

//가상 주소 http://localhost:8080/MVCProject/write.bo
String sPath = request.getServletPath();
System.out.println("가상 주소 뽑기 : " + sPath);

if(sPath.equals("/write.bo")) {
System.out.println("가상주소 비교 /write.bo 일치");
//1) 실제페이지 board/write.jsp 주소 변경 없이 이동(특이한 이동방식) → 화면만 바뀜.
//액션태그 <jsp:forward> 같은 이동 방식
//2) 이동할 때 request, response 값을 들고 이동
dispatcher = request.getRequestDispatcher("board/write.jsp");
dispatcher.forward(request, response);
}

if(sPath.equals("/writePro.bo")) {
System.out.println("가상주소 비교 /writePro.bo 일치");
//BoardService 객체 생성
//리턴할 형 없음 insertBoard(request) 메소드 호출
//list.bo 글목록 이동(주소 변경하면서 이동)
boardService = new BoardService();
boardService.insertBoard(request);

response.sendRedirect("list.bo");
}
}//doProcess()
} //닫는 괄호

 

그림 1.

 

https://javaee.github.io/javaee-spec/javadocs/

728x90

'KDT > WEB' 카테고리의 다른 글

240116 WEB - JSP24(MVC, JSTL, 게시글 자르기(페이징알고리즘))  (0) 2024.01.16
240115 WEB - JSP23(MVC, JSTL)  (0) 2024.01.15
240111 WEB - JSP21(MVC, JSTL)  (0) 2024.01.11
240109 WEB - JSP20(MVC)  (0) 2024.01.09
240104 WEB - JSP19(MVC)  (0) 2024.01.04