BoardDAO 정리
지역변수로 쓰이는 Connection, PreparedStatement, ResultSet을 전역 변수로 선언하고 null로 초기화
close를 메소드로(내장객체 기억장소 해제 메소드)
public class BoardDAO {
Connection con = null;
PreparedStatement ps = null;
ResultSet rs = null;
public Connection getConnection() {
Connection con = null;
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);
} catch (Exception e) {
e.printStackTrace();
} finally {
}
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.getName());
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();
}
}
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;
}
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.setName(rs.getString("name"));
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;
}
//요청 주소 : 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.setName(rs.getString("name"));
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;
}
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();
}
}
//리턴할 형 없음. 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();
}
}
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();
}
}
}
위와 같은 방식으로 MemberDAO를 정리
public class MemberDAO {
Connection con = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
public void dbClose() {
if(rs!=null) {
try {
rs.close();
} catch (Exception e1) {
e1.printStackTrace();
}
}
if(pstmt!=null) {
try {
pstmt.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
if(con!=null) {
try {
con.close();
} catch (Exception e3) {
e3.printStackTrace();
}
}
}
// 멤버변수
// 생성자 => 생략하면 자동으로 기본생성자 만듬
// 멤버함수(메서드 method)
// 1~2 단계 디비연결하는 getConnection()메서드 정의
public Connection getConnection() {
try {
// 1단계 : 설치한 JDBC 프로그램 중에 Driver.class 자바실행 파일 불러오기
Class.forName("com.mysql.cj.jdbc.Driver");
// 2단계 : 불러온 파일을 이용해서 데이터베이스 연결 => 연결정보를 저장
String dbUrl = "jdbc:mysql://localhost:3306/jspdb?serverTimezone=Asia/Seoul";
String dbUser = "root";
String dbPw = "1234";
con = DriverManager.getConnection(dbUrl, dbUser, dbPw);
} catch (Exception e) {
e.printStackTrace();
} finally {
dbClose();
}
return con;
}//getConnection()
// insertMember() 메서드 정의
// insertMember(String id,String pw,String name,Timestamp date)
public void insertMember(MemberDTO memberDTO) {
System.out.println("MemberDAO insertMember()");
System.out.println("전달받은 바구니 memberDTO의 주소 : " + memberDTO);
System.out.println("전달받은 아이디 : " + memberDTO.getId());
System.out.println("전달받은 비밀번호 : " + memberDTO.getPw());
System.out.println("전달받은 이름 : " + memberDTO.getName());
System.out.println("전달받은 가입날짜 : " + memberDTO.getDate());
// System.out.println("프로그램 시작");
// int a = 10;
// int b = 0;
// if( b != 0 ) {
// System.out.println("a/b = " + a/b);
// }else {
// System.out.println("a/b b가 0으로 나눔 => 에러발생 ");
// }
// try {
// // 에러가 발생할 가능성이 높은 코드(명령)
// System.out.println("a/b = " + a/b);
//
// } catch (Exception e) {
// // 에러가 나면 잡아서 처리
// System.out.println("a/b b가 0으로 나눔 => 에러발생 ");
// // 에러메시지 출력
// e.printStackTrace();
// }finally {
// // 예외 발생 상관없이 마무리 작업
// System.out.println("예외 발생 상관없이 마무리 작업");
// }
// System.out.println("프로그램 종료");
try {
// 1단계 : 설치한 JDBC 프로그램 중에 Driver.class 자바실행 파일 불러오기
// 2단계 : 불러온 파일을 이용해서 데이터베이스 연결 => 연결정보를 저장
con = getConnection();
// 3단계 : 연결정보를 이용해서 sql구문을 만들고 실행할수 있는 객체생성
String sql = "insert into members(id,pw,name,date) values(?,?,?,?)";
pstmt = con.prepareStatement(sql);
pstmt.setString(1, memberDTO.getId());
pstmt.setString(2, memberDTO.getPw());
pstmt.setString(3, memberDTO.getName());
pstmt.setTimestamp(4, memberDTO.getDate());
// 4단계 : sql구문 실행 (insert,update,delete)
pstmt.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}finally {
dbClose();
}
}//insertMember()
// MemberDAO에 리턴할형 boolean userCheck(String id,String pw) 메서드 정의
public boolean userCheck(String id,String pw) {
System.out.println("MemberDAO userCheck()");
// 아이디 비밀번호 일치하면 => true 리턴
// 아이디 비밀번호 틀리면 => false 리턴
boolean result = false;
try {
//예외(에러) 발생할 가능성이 높은 명령
// 1단계 : 설치한 JDBC 프로그램 중에 Driver.class 자바실행 파일 불러오기
// 2단계 : 불러온 파일을 이용해서 데이터베이스 연결 => 연결정보를 저장
con = getConnection();
// 3단계 : 연결정보를 이용해서 sql구문을 만들고 실행할수 있는 객체생성
// select * from 테이블이름 where 조건열=값 and 조건열=값;
String sql="select * from members where id=? and pw=?";
pstmt = con.prepareStatement(sql);
pstmt.setString(1, id);
pstmt.setString(2, pw);
// 4단계 : sql구문 실행 => 실행 후 결과 저장(select)=> ResultSet 내장객체 저장
rs = pstmt.executeQuery();
// 5단계 : 결과를 이용해서 출력, 다른곳에 저장(select)
// if else 커서를 다음행 이동 => 리턴값 데이터 있으면 true => "아이디 비밀번호 일치" 출력
// 데이터 없으면 false => "아이디 비밀번호 틀림" 출력
if(rs.next()){
System.out.println("아이디 비밀번호 일치");
result = true;
}else{
System.out.println("아이디 비밀번호 틀림");
result = false;
}
} catch (Exception e) {
// 에러가 발생하면 잡아서 처리하는 작업 (에러메시지 출력)
e.printStackTrace();
}finally {
dbClose();
}
return result;
}//userCheck()
// MemberDAO에 리턴할형 MemberDTO getMember(String id) 메서드 정의
public MemberDTO getMember(String id) {
System.out.println("MemberDAO getMember()");
// id,pw,name,date를 담은 => MemberDTO 하나를 리턴
// MemberDTO 변수 선언
MemberDTO memberDTO = null;
try {
// 1단계 : 설치한 JDBC 프로그램 중에 Driver.class 자바실행 파일 불러오기
// 2단계 : 불러온 파일을 이용해서 데이터베이스 연결 => 연결정보를 저장
con = getConnection();
// 3단계 : 연결정보를 이용해서 sql구문을 만들고 실행할수 있는 객체생성
// select * from members where id=?
String sql="select * from members where id=?";
pstmt = con.prepareStatement(sql);
pstmt.setString(1, id);
// 4단계 : sql구문 실행 => 실행 후 결과 저장(select)=> ResultSet 내장객체 저장
rs = pstmt.executeQuery();
// 5단계 : 결과를 이용해서 출력, 다른곳에 저장(select)
// if 커서를 다음행 이동 => 리턴값 데이터 있으면 true
// => id열,pw열,name열,date열 접근해서 출력
if(rs.next()) {
System.out.println("아이디 있음");
// MemberDTO memberDTO 객체생성(기억장소 할당)
memberDTO = new MemberDTO();
System.out.println("아이디 있음 MemberDTO 바구니 주소 : "+memberDTO);
memberDTO.setId(rs.getString("id"));
memberDTO.setPw(rs.getString("pw"));
memberDTO.setName(rs.getString("name"));
memberDTO.setDate(rs.getTimestamp("date"));
}else {
System.out.println("아이디 없음");
// MemberDTO memberDTO = null 설정
memberDTO = null;
System.out.println("아이디 없음 MemberDTO 바구니 주소 : "+memberDTO);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
dbClose();
}
return memberDTO;
}//getMember()
// 리턴값없음 updateMember(MemberDTO memberDTO) 메서드 정의
public void updateMember(MemberDTO memberDTO) {
try {
// 1단계 : 설치한 JDBC 프로그램 중에 Driver.class 자바실행 파일 불러오기
// 2단계 : 불러온 파일을 이용해서 데이터베이스 연결 => 연결정보를 저장
con = getConnection();
// => 3단계 연결정보를 이용해서 sql구문을 만들고 실행할수 있는 객체생성
// => update 테이블이름 set 수정할열이름=수정값 where 조건열이름=값;
String sql = "update members set name=? where id=?";
pstmt = con.prepareStatement(sql);
pstmt.setString(1, memberDTO.getName());
pstmt.setString(2, memberDTO.getId());
// => 4단계 : sql구문 실행 (insert,update,delete)
pstmt.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}finally {
dbClose();
}
}//updateMember()
// 리턴값없음 deleteMember(String id) 메서드 정의
public void deleteMember(String id) {
try {
// 1단계 : 설치한 JDBC 프로그램 중에 Driver.class 자바실행 파일 불러오기
// 2단계 : 불러온 파일을 이용해서 데이터베이스 연결 => 연결정보를 저장
con = getConnection();
// => 3단계 연결정보를 이용해서 sql구문을 만들고 실행할수 있는 객체생성
// => delete from 테이블이름 where 조건열이름=값;
String sql = "delete from members where id=?";
pstmt = con.prepareStatement(sql);
pstmt.setString(1, id);
// => 4단계 : sql구문 실행 (insert,update,delete)
pstmt.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}finally {
dbClose();
}
}//deleteMember()
public ArrayList<MemberDTO> getMemberList() {
ArrayList<MemberDTO> memberList = new ArrayList<MemberDTO>();
try {
con = getConnection();
String sql = "select * from members";
pstmt = con.prepareStatement(sql);
rs = pstmt.executeQuery();
while(rs.next()) {
//한 사람의 정보를 저장할 바구니 MemberDTO 객체 생성
MemberDTO memberDTO = new MemberDTO();
System.out.println("memberDTO 주소 : " + memberDTO);
//MemberDTO 멤버변수에 열에 접근해서 가져온 데이터를 저장
memberDTO.setId(rs.getString("id"));
memberDTO.setPw(rs.getString("pw"));
memberDTO.setName(rs.getString("name"));
memberDTO.setDate(rs.getTimestamp("date"));
//배열 한 칸에 저장(0부터 순서대로 값이 저장)
memberList.add(memberDTO);
}
System.out.println("배열 " + memberList);
} catch (Exception e) {
e.printStackTrace();
} finally {
dbClose();
}
return memberList;
}
}
커넥션 풀(Connection Pool)
서버단에서 연결 정보 저장
데이터베이스와 연결된 Connection 객체를 미리 생성하여 풀(Pool) 기억공간에 저장
필요할 때마다 풀에 접근해서 Connection 객체를 사용하고 끝나면 반환
장점 : 속도 향상, DB연결정보를 한 번만 수정해서 사용
톰캣에서 제공하는 DBCP사용
- META-INF 폴더에 context.xml 파일을 만들고 커넥션 풀 디비 연결정보자원을 정의
- DAO에서 디비연결자원의 이름을 불러서 사용
xml(확장된 html)
new-other-xml-xml file-Source탭에서 작업
context : 하나의 프로젝트 단위
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Resource name="자원의 이름"
auth="관리자"
type="자원타입"
driverClassName="JDBC드라이버"
url="DB주소"
username="DB접속ID"
password="DB접속PW"/>
</Context>
자원이름 : 원하는대로 설정
관리자 : 서버(아파치 톰캣)
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Resource name="jdbc/Mysql"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.cj.jdbc.Driver"
url="jdbc:mysql://localhost:3306/jspdb?serverTimezone=Asia/Seoul"
username="root"
password="1234"/>
</Context>
DAO
// import javax.naming.Context;
// import javax.naming.InitialContext;
Context init = new InitialContext();
init.lookup("자원위치/자원이름");
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/Mysql");
con = ds.getConnection();
} catch (Exception e) {
e.printStackTrace();
}
return con;
}
MVC(모델2) 패턴
Model : DB 작업(ex.MemberDTO, MemberDAO)
View : 화면 (ex.insert.jsp 화면)
Controller : 제어(ex.insertPro.jsp → 자바 파일 메소드() )
※
1) 순차적 DB연결(개인 작업 형태,반복 작업, 소규모)
insert.jsp(화면) -> insertPro.jsp(처리, DB) -> login.jsp(화면) -> loginPro.jsp(처리, DB) -> main.jsp
2) 순차적 DB연결 부분을 자바 파일로 변경(모델2로가기 위한 중간 단계)
insert.jsp(화면) -> insertPro.jsp(처리) ↔ MemberDAO 메소드() (DB작업)
-> login.jsp(화면) -> loginPro.jsp(처리) ↔ MemberDAO 메소드() (DB작업)
-> main.jsp
3) MVC(모델2) 프로그램 방식
Model : DB 작업(ex.MemberDTO, MemberDAO)
View : 화면 (ex.insert.jsp 화면)
Controller : 제어(ex.insertPro.jsp → 자바 파일 메소드() )
insert.jsp(화면)
-> MemberService 메소드 insertPro()메소드(처리) ↔ MemberDAO 메소드() (DB작업)
-> login.jsp(화면)
-> MemberService 메소드 loginPro()메소드(처리) ↔ MemberDAO 메소드() (DB작업)
-> main.jsp
jsp->jsp 하지 못함. 다른 방식으로 연결을 해야함
가상 주소를 만들어서 하이퍼링크 연결 => 실제 페이지 연결. 이를 (가상) 주소 매핑
insert.me(화면) => insert.jsp 실제 페이지로 연결 작업
-> insertPro.me(처리) => java 메소드() ↔ DB작업
-> login.me(화면) => login.jsp 실제 페이지 연결 작업
-> loginPro.me(처리) => java 메소드() ↔ DB작업
-> main.me(처리+화면) => main.jsp 실제 페이지 연결
MVC 장점
반복되는 작업이 사라지며, 수정 최소화, 여러 명이 동시작업이 가능하며, 보안상에 이점(가상 주소가 화면에 보임)
MVC 동작원리
사용자, 유저, 클라이언트가 브라우저에 URL(주소) 입력
http://localhost:8080/MVCProject/insert.me
→ http가 요청정보를 가지고 localhost:8080 서버를 찾아감. localhost:8080 서버에 insert.me 페이지 요청. 요청 정보를 들고 감
→ 1. 웹서버(아파치 전달). 웹서버 안에 insert.me 페이지 찾기 => 처리 필요
→ 2. 웹 애플리케이션서버(WAS,톰캣,웹컨테이너) 전달
→ 1) request, response 객체 생성
→ 2) web.xml 참조. 가상주소.me 주소 => 주소매핑하는 처리담당자 연결
→ 3) servlet(명령 처리담당자) 기억 장소 만들어줌.
-> 주소 매핑 작업 : 가상주소를 뽑아와서 주소값을 비교해서 실제 페이지(자바 메소드) 연결.
-> java, jsp 명령을 처리하고 결과를 html변경 작업(응답정보를 response에 저장)
-> response(응답정보)를 웹서버에 전달, http에 전달
-> 응답정보를 사용자에게 전달
-> request, response, servlet 기억장소 해제
Project name : MVCProject
module version : 3.1
Generate web.xml deployment descriptor 체크
가상주소작성
http://localhost:8080/MVCProject/insert.me
src-main-webapp-WEB-INF-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/insert.me
→ 가상주소 .me로 끝나는 주소 요청이 들어 오면 서블릿 이름 MemberController 연결
→ 서블릿 이름 MemberController 찾아가서
→ com.itwillbs.controller 폴더(패키지) MemberController 주소 매핑(가상주소를 실제 페이지 연결)하는 파일 연결
-->
<servlet-mapping>
<servlet-name>MemberController</servlet-name>
<url-pattern>*.me</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>MemberController</servlet-name>
<!-- <servlet-class>폴더(패키지).파일이름</servlet-class> -->
<servlet-class>com.itwillbs.controller.MemberController</servlet-class>
</servlet>
</web-app>
Java Resources-src/main/java-패키지-MemberController.java
package com.itwillbs.controller;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MemberController extends HttpServlet {
//MemberController 파일을 servlet파일로 지정
//→ MemberController extends HttpServlet(자바내장객체(처리담당자) 상속
//→ 웹 애플리케이션 서버(처리담당서버)가 자동으로 서블릿 메소드 호출
//→ service(), doGet(), doPost(),... 자동으로 호출
//→ doGet(), doPost() 재정의(메소드 오버라이딩)해서 주소매핑 작업 처리
//메소드 오버라이딩(alt + shift + s → v)
@Override
//get방식일 때
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("MemberController doGet()");
}
@Override
//post방식일 때
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("MemberController doPost()");
}
}
실행 -> MVCProject 우클릭 -> Run as(서버 연결 후 Finish)
주소창에 insert.me 추가
package com.itwillbs.controller;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MemberController extends HttpServlet {
//MemberController 파일을 servlet파일로 지정
//→ MemberController extends HttpServlet(자바내장객체(처리담당자) 상속
//→ 웹 애플리케이션 서버(처리담당서버)가 자동으로 서블릿 메소드 호출
//→ service(), doGet(), doPost(),... 자동으로 호출
//→ doGet(), doPost() 재정의(메소드 오버라이딩)해서 주소매핑 작업 처리
//메소드 오버라이딩(alt + shift + s → v)
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("MemberController doGet()"); //get방식일 때
//doProcess() 메소드 호출
doProcess(request, response);
}
@Override
protected void doPost(HttpServletRequest requset, HttpServletResponse response) throws ServletException, IOException {
System.out.println("MemberController doPost()"); //post방식일 때
//doProcess() 메소드 호출
doProcess(requset, response);
}
//주소 매핑을 위한 메소드 정의
protected void doProcess(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("MemberController doProcess()");
}
}
package com.itwillbs.controller;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MemberController extends HttpServlet {
//MemberController 파일을 servlet파일로 지정
//→ MemberController extends HttpServlet(자바내장객체(처리담당자) 상속
//→ 웹 애플리케이션 서버(처리담당서버)가 자동으로 서블릿 메소드 호출
//→ service(), doGet(), doPost(),... 자동으로 호출
//→ doGet(), doPost() 재정의(메소드 오버라이딩)해서 주소매핑 작업 처리
//메소드 오버라이딩(alt + shift + s → v)
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("MemberController doGet()"); //get방식일 때
//doProcess() 메소드 호출
doProcess(request, response);
}
@Override
protected void doPost(HttpServletRequest requset, HttpServletResponse response) throws ServletException, IOException {
System.out.println("MemberController doPost()"); //post방식일 때
//doProcess() 메소드 호출
doProcess(requset, response);
}
//주소 매핑을 위한 메소드 정의
protected void doProcess(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("MemberController doProcess()");
//가상주소 http://localhost:8080/MVCProject/insert.me
//가상주소 뽑아보기 : /insert.me
String sPath = request.getServletPath();
System.out.println("가상주소 뽑아오기 : " + sPath);
}
}
//주소 매핑을 위한 메소드 정의
protected void doProcess(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("MemberController doProcess()");
//가상주소 http://localhost:8080/MVCProject/insert.me
//가상주소 뽑아보기 : /insert.me
String sPath = request.getServletPath();
System.out.println("가상주소 뽑아오기 : " + sPath);
//주소 매핑 → 가상주소 비교 → 실제 페이지 연결
if(sPath.equals("/insert.me")) {
System.out.println("가상주소 비교 /insert.me 일치");
}
}
//주소 매핑을 위한 메소드 정의
protected void doProcess(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("MemberController doProcess()");
//가상주소 http://localhost:8080/MVCProject/insert.me
//가상주소 뽑아보기 : /insert.me
String sPath = request.getServletPath();
System.out.println("가상주소 뽑아오기 : " + sPath);
//주소 매핑 → 가상주소 비교 → 실제 페이지 연결
if(sPath.equals("/insert.me")) {
System.out.println("가상주소 비교 /insert.me 일치");
//실제페이지 member/insert.jsp 이동
response.sendRedirect("member/insert.jsp");
}
}
'KDT > WEB' 카테고리의 다른 글
240109 WEB - JSP20(MVC) (0) | 2024.01.09 |
---|---|
240104 WEB - JSP19(MVC) (0) | 2024.01.04 |
231228 WEB - JSP17(MVC) (0) | 2023.12.28 |
231226 WEB - JSP16(MVC) (0) | 2023.12.26 |
231221 WEB - JSP15(MVC) (0) | 2023.12.21 |