-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
18 changed files
with
799 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
package common.controller; | ||
|
||
public abstract class AbstractAction implements Action{ | ||
//execute()추상 메서드 가지고 있음 | ||
private String viewPage;//보여줄 뷰페이지 이름 | ||
private boolean isRedirect; | ||
//redirect방식의 이동이면 true, forward방식 이동이면 false값을 갖는다 | ||
|
||
//setter, getter 구성 | ||
public String getViewPage() { | ||
return viewPage; | ||
} | ||
public void setViewPage(String viewPage) { | ||
this.viewPage = viewPage; | ||
} | ||
public boolean isRedirect() { | ||
return isRedirect; | ||
} | ||
public void setRedirect(boolean isRedirect) { | ||
this.isRedirect = isRedirect; | ||
} | ||
}////////////////////////////////// |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
package common.controller; | ||
|
||
import javax.servlet.http.HttpServletRequest; | ||
import javax.servlet.http.HttpServletResponse; | ||
|
||
public interface Action { | ||
|
||
void execute(HttpServletRequest req, HttpServletResponse res) throws Exception; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
package common.filter; | ||
|
||
import java.io.IOException; | ||
import javax.servlet.Filter; | ||
import javax.servlet.FilterChain; | ||
import javax.servlet.FilterConfig; | ||
import javax.servlet.ServletException; | ||
import javax.servlet.ServletRequest; | ||
import javax.servlet.ServletResponse; | ||
import javax.servlet.annotation.WebFilter; | ||
import javax.servlet.http.HttpFilter; | ||
|
||
/** | ||
* Servlet Filter implementation class EncodingFilter | ||
*/ | ||
@WebFilter("/*") | ||
public class EncodingFilter extends HttpFilter implements Filter { | ||
|
||
|
||
public void destroy() { | ||
|
||
} | ||
//사전처리나 사후처리 할 일이 있으면 doFilter()메서드 안에서 구현한다. | ||
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { | ||
//post방식일 때 한글 처리를 사전에 처리해보자. | ||
request.setCharacterEncoding("utf-8"); | ||
System.out.println("EncodingFilter doFilter()호출됨...."); | ||
|
||
chain.doFilter(request, response); | ||
} | ||
|
||
|
||
public void init(FilterConfig fConfig) throws ServletException { | ||
|
||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,132 @@ | ||
package common.controller; | ||
|
||
import java.io.FileInputStream; | ||
import java.io.IOException; | ||
import java.util.HashMap; | ||
import java.util.Properties; | ||
import java.util.Set; | ||
|
||
import javax.servlet.RequestDispatcher; | ||
import javax.servlet.ServletConfig; | ||
import javax.servlet.ServletException; | ||
import javax.servlet.annotation.WebInitParam; | ||
import javax.servlet.annotation.WebServlet; | ||
import javax.servlet.http.HttpServlet; | ||
import javax.servlet.http.HttpServletRequest; | ||
import javax.servlet.http.HttpServletResponse; | ||
|
||
/*FrontController : *.do 패턴의 모든 요청을 받아들인다. | ||
* - Command.properties 파일에 있는 매핑 정보를 읽어들여 해당 요청uri와 매핑되어 있는 | ||
* SubController(XXXAction)을 찾아 객체화 한 뒤 해당 객체의 메소드(execute)를 호출한다. | ||
* - 서브 컨트롤러는 해당 작업을 수행한 뒤에 다시 FrontController로 돌아와 보여줘야 할 View | ||
* 페이지(JSP) 정보를 넘긴다. | ||
* - FrontController는 해당 뷰페이지로 이동시킨다. (forward방식 이동 or redirect방식 이동) | ||
* */ | ||
//Command.properties파일의 절대경로를 본인의 경로에 맞게 수정해야 함///////////////// | ||
@WebServlet( | ||
urlPatterns = { "*.do" }, | ||
initParams = { | ||
@WebInitParam(name = "config", | ||
value = "C:\\myjava\\Workspace\\MvcWeb\\src\\main\\webapp\\WEB-INF\\Command.properties") | ||
}) | ||
public class FrontController extends HttpServlet { | ||
private static final long serialVersionUID = 1L; | ||
|
||
private HashMap<String, Object> cmdMap=new HashMap<>(); | ||
|
||
@Override | ||
public void init(ServletConfig conf) throws ServletException{ | ||
System.out.println("init()호출됨..."); | ||
String props=conf.getInitParameter("config"); | ||
System.out.println("props=="+props); | ||
|
||
Properties pr=new Properties(); | ||
try { | ||
FileInputStream fis=new FileInputStream(props); | ||
pr.load(fis); | ||
//Command.properties파일 정보를 Properties객체로 옮긴다. | ||
if(fis!=null) fis.close(); | ||
//String val=pr.getProperty("/index.do"); | ||
//System.out.println("val="+val); | ||
Set<Object> set=pr.keySet(); | ||
if(set==null) return; | ||
for(Object key:set) { | ||
String cmd=key.toString();//key값 "/index.do" | ||
String className=pr.getProperty(cmd);//"common.controller.IndexAction" | ||
if(className!=null) { | ||
className=className.trim();//앞뒤 공백 제거 | ||
} | ||
System.out.println(cmd+": "+className); | ||
//className을 실제 객체로 인스턴스화 | ||
Class<?> cls=Class.forName(className); | ||
Object cmdInstance =cls.getDeclaredConstructor().newInstance(); | ||
///////////////////////////// | ||
cmdMap.put(cmd, cmdInstance); | ||
////////////////////////////// | ||
}//for------ | ||
System.out.println("cmdMap.size(): "+cmdMap.size()); | ||
}catch(Exception e) { | ||
e.printStackTrace(); | ||
throw new ServletException(e); | ||
} | ||
|
||
}//-------------------------------------- | ||
|
||
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { | ||
process(request, response); | ||
} | ||
private void process(HttpServletRequest req, HttpServletResponse res) throws ServletException,IOException{ | ||
//1. 클라이언트의 요청 URI를 분석해보자. | ||
/* | ||
String uri=req.getRequestURI(); | ||
System.out.println("uri: "+uri);// "/MvcWeb/index.do" | ||
String myctx=req.getContextPath(); //"/MvcWeb" | ||
int len=myctx.length(); //7 | ||
String cmd=uri.substring(len); | ||
*/ | ||
String cmd=req.getServletPath(); | ||
System.out.println("cmd===>"+cmd); | ||
|
||
Object instance =cmdMap.get(cmd); | ||
if(instance==null) { | ||
System.out.println("Action이 null"); | ||
throw new ServletException("Action이 null입니다"); | ||
} | ||
System.out.println("instance==>"+instance); | ||
/////////////////////////////////////////////////// | ||
AbstractAction action=(AbstractAction)instance; | ||
////////////////////////////////////////////////// | ||
|
||
try { | ||
////////////////////////// | ||
action.execute(req, res); | ||
//execute()는 컨트롤러 로직을 수행 한 뒤 뷰페이지랑 이동방식을 지정한다 | ||
String viewPage=action.getViewPage(); | ||
boolean isRedirect=action.isRedirect(); | ||
System.out.println("viewPage: "+viewPage); | ||
if(viewPage==null) { | ||
viewPage="index.jsp"; | ||
} | ||
|
||
if(isRedirect) { | ||
//redirect방식으로 페이지 이동 | ||
res.sendRedirect(viewPage); | ||
}else { | ||
//forward방식으로 이동 | ||
RequestDispatcher disp=req.getRequestDispatcher(viewPage); | ||
disp.forward(req, res); | ||
} | ||
|
||
}catch(Exception e) { | ||
e.printStackTrace(); | ||
throw new ServletException(e); | ||
} | ||
}//----------------------------------------- | ||
|
||
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { | ||
process(request, response); | ||
} | ||
|
||
} | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
package user.controller; | ||
|
||
import javax.servlet.http.HttpServletRequest; | ||
import javax.servlet.http.HttpServletResponse; | ||
|
||
import common.controller.AbstractAction; | ||
import user.model.UserDAOMyBatis; | ||
|
||
public class IdCheckAction extends AbstractAction { | ||
|
||
@Override | ||
public void execute(HttpServletRequest req, HttpServletResponse res) throws Exception { | ||
String method=req.getMethod(); | ||
if(method.equalsIgnoreCase("get")) { | ||
|
||
this.setViewPage("member/idCheck.jsp"); | ||
this.setRedirect(false); | ||
}else { | ||
String userid=req.getParameter("userid"); | ||
|
||
UserDAOMyBatis dao=new UserDAOMyBatis(); | ||
|
||
boolean isUse=dao.idCheck(userid); | ||
|
||
String result=(isUse)? "ok": "no"; | ||
|
||
req.setAttribute("result", result); | ||
req.setAttribute("userid", userid); | ||
|
||
this.setViewPage("member/idCheckResult.jsp"); | ||
this.setRedirect(false); | ||
} | ||
|
||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
package common.controller; | ||
|
||
import javax.servlet.http.HttpServletRequest; | ||
import javax.servlet.http.HttpServletResponse; | ||
|
||
public class IndexAction extends AbstractAction { | ||
|
||
@Override | ||
public void execute(HttpServletRequest req, HttpServletResponse res) | ||
throws Exception{ | ||
System.out.println("IndexAction의 execute()호출됨..."); | ||
|
||
req.setAttribute("msg", "안녕 Index?"); | ||
|
||
//뷰페이지 지정 | ||
this.setViewPage("/index.jsp"); | ||
//이동방식 지정 | ||
this.setRedirect(false); | ||
}//------------------------- | ||
|
||
}//////////////////////////////////// |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
package user.controller; | ||
|
||
import javax.servlet.http.HttpServletRequest; | ||
import javax.servlet.http.HttpServletResponse; | ||
|
||
import common.controller.AbstractAction; | ||
|
||
public class LoginAction extends AbstractAction { | ||
|
||
@Override | ||
public void execute(HttpServletRequest req, HttpServletResponse res) throws Exception { | ||
|
||
|
||
this.setViewPage("login/login.jsp"); | ||
this.setRedirect(false); | ||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
package common.filter; | ||
|
||
import java.io.IOException; | ||
|
||
import javax.servlet.Filter; | ||
import javax.servlet.FilterChain; | ||
import javax.servlet.FilterConfig; | ||
import javax.servlet.RequestDispatcher; | ||
import javax.servlet.ServletException; | ||
import javax.servlet.ServletRequest; | ||
import javax.servlet.ServletResponse; | ||
import javax.servlet.annotation.WebFilter; | ||
import javax.servlet.http.HttpFilter; | ||
import javax.servlet.http.HttpServletRequest; | ||
import javax.servlet.http.HttpSession; | ||
|
||
import user.model.UserVO; | ||
|
||
/** | ||
* Servlet Filter implementation class LoginCheckFilter | ||
*/ | ||
@WebFilter(urlPatterns = {"/user/*","/admin/*"}) | ||
public class LoginCheckFilter extends HttpFilter implements Filter { | ||
|
||
|
||
public void destroy() { | ||
|
||
} | ||
|
||
|
||
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { | ||
//세션에 저장되어 있는 loginUser가 있는지 체크해서 | ||
//없다면==>"로그인해야 이용할 수 있어요" 보여주고 return; | ||
HttpServletRequest req=(HttpServletRequest)request; | ||
HttpSession session=req.getSession(); | ||
UserVO user=(UserVO) session.getAttribute("loginUser"); | ||
if(user==null) { | ||
String str="로그인해야 이용할 수 있어요"; | ||
String loc=req.getContextPath()+"/login.do";//절대경로 | ||
|
||
req.setAttribute("msg", str); | ||
req.setAttribute("loc", loc); | ||
RequestDispatcher disp=req.getRequestDispatcher("/message.jsp"); | ||
disp.forward(req, response); | ||
return; | ||
} | ||
|
||
|
||
//로그인 했다면 다음 필터로 넘어간다 | ||
chain.doFilter(request, response); | ||
} | ||
|
||
|
||
public void init(FilterConfig fConfig) throws ServletException { | ||
|
||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
package user.controller; | ||
|
||
import javax.servlet.http.Cookie; | ||
import javax.servlet.http.HttpServletRequest; | ||
import javax.servlet.http.HttpServletResponse; | ||
import javax.servlet.http.HttpSession; | ||
|
||
import common.controller.AbstractAction; | ||
import user.model.NotUserException; | ||
import user.model.UserDAOMyBatis; | ||
import user.model.UserVO; | ||
|
||
public class LoginEndAction extends AbstractAction { | ||
|
||
@Override | ||
public void execute(HttpServletRequest req, HttpServletResponse res) throws Exception { | ||
String userid=req.getParameter("userid"); | ||
String pwd=req.getParameter("pwd"); | ||
String saveId=req.getParameter("saveId"); | ||
if(userid==null||pwd==null||userid.trim().isEmpty()||pwd.trim().isEmpty()) { | ||
this.setViewPage("login.do"); | ||
this.setRedirect(true); | ||
return; | ||
} | ||
UserDAOMyBatis dao=new UserDAOMyBatis(); | ||
try { | ||
UserVO loginUser=dao.loginCheck(userid, pwd); | ||
//loginUser가 null이 아니라면 회원인증 받은 것이므로 세션에 loginUser를 저장하자 | ||
HttpSession session=req.getSession(); | ||
if(loginUser!=null) { | ||
session.setAttribute("loginUser", loginUser); | ||
//아이저장 체크박스에 체크했다면 => 쿠키에 해당 아이디를 저장하자 | ||
Cookie ck=new Cookie("uid",loginUser.getUserid()); | ||
if(saveId!=null) { | ||
ck.setMaxAge(7*24*60*60);//7일간 유효 | ||
}else { | ||
ck.setMaxAge(0);//쿠키 삭제 | ||
} | ||
ck.setPath("/"); | ||
res.addCookie(ck); | ||
}//if------ | ||
this.setViewPage("index.do"); | ||
this.setRedirect(true); | ||
|
||
}catch(NotUserException e) { | ||
req.setAttribute("msg", e.getMessage()); | ||
req.setAttribute("loc", "javascript:history.back()"); | ||
this.setViewPage("message.jsp"); | ||
this.setRedirect(false); | ||
} | ||
}//------------------------------------ | ||
|
||
} |
Oops, something went wrong.