고급자바 수업노트 -

 controller 


package kr.or.ddit.controller;


import java.io.IOException;

import java.util.List;


import javax.servlet.RequestDispatcher;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;


import kr.or.ddit.member.service.IMemberService;

import kr.or.ddit.member.service.MemberServiceImpl;

import kr.or.ddit.member.vo.MemberVO;


public class TestController extends HttpServlet {



private static final long serialVersionUID = 1L;

@Override

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

response.setCharacterEncoding("utf-8");

response.setContentType("text/html; charset=utf-8");

request.setCharacterEncoding("utf-8");

/*

* URL ==> http://localhost/servletTest02/member/memberList.do

* URI ==> /servletTest02/member/memberList.do

* ContextPath ==> /servletTest02

* 원하는 요청 URI ==> /member/memberList.do

*/

//사용자의 요청 정보 가져오기 

//URI ==> /servletTest02/member/memberList.do

String uri = request.getRequestURI(); 

//

uri = uri.substring(request.getContextPath().length());

System.out.println("uri => " + uri);

String viewPage = null; //view 페이지가 저장될 변수 선언 

if(uri == null) {

}else if ("/member/memberList.do".equals(uri)) {

//URI 에 맞는 작업을 진행한다. ( 예 : 전체 회원정보 가져오기 ) 

IMemberService memService = MemberServiceImpl.getInstance();

List<MemberVO> memList = memService.getALLMemberList();

//가져온 정보를 Request 객체의 setAttribute() 메서드를 이용해서 

// ==> view 페이지로 전달할 데이터를 셋팅한다. 

request.setAttribute("memList", memList);

viewPage = "/member/memberList.jsp"; //viewPage 설정 

}else if ("/member/memberView.do".equals(uri)) {

//상세정보보기 

}else if( "/member/memberDelete.do".equals(uri)){

//삭제하기

IMemberService memService = MemberServiceImpl.getInstance();

int res = memService.deleteMember(memId);

request.setAttribute("deleteres", res);

viewPage ="/member/memberDelete.jsp";

}

//해당 view 페이지를 포워딩 또는 리다이렉트한다.

//원래는 : /WEB-INF/view/member/memberList.jsp

RequestDispatcher rd = request.getRequestDispatcher(

"/WEB-INF/view" + viewPage);

rd.forward(request, response);

}

@Override

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {


}


------


package kr.or.ddit.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 kr.or.ddit.member.action.MemberListAction;

import kr.or.ddit.web.IAction;


public class TestController2 extends HttpServlet {


private static final long serialVersionUID = 1L;

@Override

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

response.setCharacterEncoding("utf-8");

response.setContentType("text/html; charset=utf-8");

request.setCharacterEncoding("utf-8");

/*

* URL ==> http://localhost/servletTest02/member/memberList.do

* URI ==> /servletTest02/member/memberList.do

* ContextPath ==> /servletTest02

* 원하는 요청 URI ==> /member/memberList.do

*/

//사용자의 요청 정보 가져오기 

//URI ==> /servletTest02/member/memberList.do

String uri = request.getRequestURI(); 

//

uri = uri.substring(request.getContextPath().length());

System.out.println("uri => " + uri);

String viewPage = null; //view 페이지가 저장될 변수 선언 

IAction action = null; 

if(uri == null) {

}else if ("/member/memberList.do".equals(uri)) {

action = new MemberListAction(); 

viewPage = action.process(request, response); //viewPage 설정 

}else if ("/member/memberView.do".equals(uri)) {

//상세정보

}else {

}

//해당 view 페이지를 포워딩 또는 리다이렉트한다.

//원래는 : /WEB-INF/view/member/memberList.jsp

RequestDispatcher rd = request.getRequestDispatcher(

"/WEB-INF/view" + viewPage);

rd.forward(request, response);

}

@Override

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {


}


----------action

package kr.or.ddit.member.action;

import java.io.IOException;

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

import kr.or.ddit.member.service.IMemberService;
import kr.or.ddit.member.service.MemberServiceImpl;
import kr.or.ddit.web.IAction;

public class MemberDeleteAction implements IAction {

//삭제하는 것. 
@Override
public boolean isRedirct() {
return false;
}

@Override
public String process(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//SERVICE 객체를 만든다. 
IMemberService service = MemberServiceImpl.getInstance(); 
// 결과값 가지고 오기 삭제 했으면 -1 안됬으면 0 //id 를 설정해야한다. ( id) 
int res = service.deleteMember(request.getParameter("id")); 
request.setAttribute("res", res);
//view 폴더에 있음 
return "/member/memberDelete.jsp";
}

}

----

package kr.or.ddit.member.action;

import java.io.IOException;
import java.util.List;

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

import kr.or.ddit.member.service.IMemberService;
import kr.or.ddit.member.service.MemberServiceImpl;
import kr.or.ddit.member.vo.MemberVO;
import kr.or.ddit.web.IAction;

public class MemberListAction implements IAction {

@Override
public boolean isRedirct() {
//redirect 일경우에는 true , forward일 경우에는 false를 반환한다. 
return false;
}

@Override
public String process(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//실제로 처리할 내용을 기술하고, 처리가 끝난 후 보여줄 View페이지를 반환하면 된다. 
//URI 에 맞는 작업을 진행한다. ( 예 : 전체 회원정보 가져오기 ) 
IMemberService memService = MemberServiceImpl.getInstance();
List<MemberVO> memList = memService.getALLMemberList();
//가져온 정보를 Request 객체의 setAttribute() 메서드를 이용해서 
// ==> view 페이지로 전달할 데이터를 셋팅한다. 
request.setAttribute("memList", memList);
return  "/member/memberList.jsp"; //viewPage 설정 
}

}

----참고 필요한 소비스


package kr.or.ddit.member.service;

import java.util.List;
import java.util.Map;

import kr.or.ddit.member.dao.IMemberDao;
import kr.or.ddit.member.dao.MemberDaoImpl;

import kr.or.ddit.member.vo.MemberVO;

public class MemberServiceImpl implements IMemberService {

private IMemberDao dao; // DAO 객체가 저장될 변수 선언
//싱글톤으로 바꾸기 
//1. 참조값이 저장될 변수 만들기 
private static MemberServiceImpl mem; 
//생성자
//2 private 으로 생성자 만들기
private MemberServiceImpl() {
super();
this.dao =  MemberDaoImpl.getInstance();
}
//3. 
public static MemberServiceImpl getInstance() {
if (mem == null) mem = new MemberServiceImpl(); 
return mem;
}
@Override
public int insertMember(MemberVO memVo) {
return dao.insertMember(memVo);
}

@Override
public int deleteMember(String memId) {
return dao.deleteMember(memId);
}

@Override
public int updateMember(MemberVO memVo) {
return dao.updateMember(memVo);
}

@Override
public List<MemberVO> getALLMemberList() {
return dao.getALLMemberList();
}

@Override
public int getMemberCount(String memId) {
return dao.getMemberCount(memId);
}

@Override
public int updateMember2(Map<String, String> paramMap) {
return dao.updateMember2(paramMap);
}

}


web package 



package kr.or.ddit.web;

import java.io.IOException;

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

public interface IAction {
//이 IAction 인터페이스를 implements한 클래스에서 View(jsp문서)를
//결정하고 해당 View페이지로 redirect할 것인지 forward 할 것인지를
// 결정하는 메서드 
public boolean isRedirct(); 
//IAction 인터페이스를 implements한 클래스의 process메서드를 호출해서 
//URI를 기준으로 한 하나의 요청처리를 위임하고 View페이지를 반환하는 메서드 
public String process(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException;
}


------

package kr.or.ddit.web;

import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.ResourceBundle;

// uri_mapping.properties 파일에 설정된 
// URI에 맞는 Action객체를 구해와서 인스턴스를 생성해서 반환하는
//

public class URIActionMapper {
// uri_mapping.properties 파일의 내용을 읽어와
// URI요청은 키값으로 Action객체명은 value 값으로 저장될  Map 객체 생성
private static Map<String , String> actionMap = 
new HashMap<String, String>(); 
//static 초기화 블럭 
static {
//properties파일을 읽어와 Bundle 객체를 생성한다. 
ResourceBundle rb = ResourceBundle.getBundle("kr.or.ddit.web.uri_mapping"); 
//Bundle 객체의 key 값 가져오기
Enumeration<String> en = rb.getKeys(); 
while(en.hasMoreElements()) {
//키값 개수만큼 반복 처리 
String key = en.nextElement(); //키값 구하기 (URI 요청값) 
String value = rb.getString(key); // value값(실행할 Action 클래스명 ) 
actionMap.put(key, value); // key 값과 value 값을 Map에 저장 
}
}//static 초기화 블럭 끝  
//매개값으로 주어진 uri 에 맞는 Action 객체를 인스턴스화해서 반환하는 메서드 
public static IAction getAction(String uri) {
IAction action  = null; 
//해당 uri 가 등록되어 있는지 검사 
if(actionMap.containsKey(uri)) {
try {
//문자열로 된 Action클래스의 이름을 이용하여 해당 클래스를 메모리에 로딩한다.
//uri_mappong.properties 에서 있는 것  
Class cls = Class.forName(actionMap.get(uri)); 
//메모리에 로딩된정보  Action클래스를 '인스턴스화'한다. ==> 즉, 객체를 생성한다. 
//보통 new 로 객체생성했는데, 자동으로 객체생성을 밑에있는애가 해줌 
action = (IAction)cls.newInstance(); 
} catch (Exception e) {
e.printStackTrace();
}
}
return action; 
}

}

------

package kr.or.ddit.web;

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 kr.or.ddit.member.action.MemberListAction;
import kr.or.ddit.web.IAction;

public class WebController extends HttpServlet {

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

/*
* URL ==> http://localhost/servletTest02/member/memberList.do
* URI ==> /servletTest02/member/memberList.do
* ContextPath ==> /servletTest02
* 원하는 요청 URI ==> /member/memberList.do
*/
String uri = request.getRequestURI();
uri = uri.substring(request.getContextPath().length());
String viewPage = null; 
IAction action = null; 

//요청 URI를 이용하여 설명할 Action 객체를 구한다. 
action = URIActionMapper.getAction(uri); 
if(action == null ) {
//실행할 Action 이 없으면 404 에러 처리 
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
}else {
// 실행 작업 완료 후 View페이를 받느나. 
viewPage = action.process(request, response);
if(viewPage!=null) {
if(action.isRedirct()) {
//리다이렉트가 true 일 경우
response.sendRedirect(request.getContextPath() + viewPage);
}else { //포워딩
RequestDispatcher rd = request.getRequestDispatcher("/WEB-INF/view" + viewPage); 
rd.forward(request, response);
}
}
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

}






----------

# 이 문서는 사용할 URI 와 Mapping 되는 Action 객체를 연결 해 준다. 

# 문서 작성법
# 요청 URI = IAction을 구현한 실제 실행할 클래스의 전체이름 


#회원목록출력
/member/memberList.do=kr.or.ddit.member.action.MemberListAction
/member/memberView.do=kr.or.ddit.member.action.MemberViewAction



#회원추가
/member/memberInsert.do=kr.or.ddit.member.action.MemberInsertAction
#회원상세정보 출력
/member/memberViewOne.do=kr.or.ddit.member.action.MemberViewOneAction
#회원1명의 정보 수정 update 
/member/memberUpdate.do=kr.or.ddit.member.action.MemberUpdateAction
#회원정보 삭제 delete 
/member/memberDelete.do=kr.or.ddit.member.action.MemberDeleteAction



------

<%@page import="kr.or.ddit.member.vo.MemberVO"%>
<%@page import="java.util.List"%>
<%@ 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>
<script>

$(function(){
$('#addmember').on('click' , function(){
code = "<table>"
code += "<tr><td>회원</td><td><input type='text' id='id1'></td></tr>"
code += "<tr><td>회원이름</td><td><input type='text' id='name1'></td></tr>"
code += "<tr><td>전화번호</td><td><input type='text' id='tel1'></td></tr>"
code += "<tr><td>회원주소</td><td><input type='text' id='addr'></td></tr>"
code += "<input type='button' value='저장' id='signin'>"
code += "<input type='reset' value='취소' id='delete'>"
code += "</table>"
$('#signinbox').html(code); 
})
//위에 테이블후에 처리되어야 해서 후처리 하기.....
$('#signin').on('click' , function(){
$.ajax({
id1 = $('#id1').val().trim(); 
name1 = $('#name1').val().trim(); 
tel1 = $('#tel1').val().trim();
addr1 = $('#addr1').val().trim(); 
url : '',
type : 'post',
data : {
"id1" : id1
"name1" : name1
"tel1" : tel1
"addr1" : addr1
},
success : function(res){
},
error : function(err){
alert("상태 : " + err.status); 
},
dataType : 'json'
})
})
 
})


</script>



<body>
<h2>
<input type="button" value="회원추가" id="addmember">
</h2>
<h1>결과페이지</h1>
<table border="1">
<tr>
<td>ID
<td>
<td>이름
<td>
<td>전화
<td>
<td>주소
<td>
<tr>


<%
//Controller 에서 보내온 데이터를 받는다. ==> request객체.getAttribute() 메서드 사용 
List<MemberVO> memList = (List<MemberVO>) request.getAttribute("memList");

for (MemberVO memVO : memList) {
%>
<tr>
<td><%=memVO.getMem_id()%></td>
<td><%=memVO.getMem_name()%></td>
<td><%=memVO.getMem_tel()%></td>
<td><%=memVO.getMem_addr()%></td>
</tr>






<%
}
%>

</table>

<div id="signinbox"></div>



</body>
</html>

댓글