https://github.com/jeongwoohyunn/mysite2
이런 형식을하고나서도 마지막은 제일 편한 방식, 간단한 형식으로 습득
다시봐도 쓸수 있을 정도나 이해하기 쉬운정도로 정리해두고, 결국은 편한방법으로 할것 - spring
----------내가궁금한건 dao- 값을 받아오고 돌아가는지
그리고 넘어가는 값 설정해주는?
wrokbench에 ?넣는 방법이 있었나?
sql구문들도 내가 보기 쉽게 한번에 정리해 두자 - 보충
WebUtils.redirect(request, response, request.getContextPath() + "/user?a=joinsuccess");
/user/joinsuccess를 들고 actionfactory를 들고간다.
1 2 3 | <form id="join-form" name="joinForm" method="post" action="${pageContext.servletContext.contextPath }/user"> <input type="hidden" name="a" value="modify" /> | cs |
input value값을 저장해준곳으로 action을 넘기는데 이때 name 'a'로 줬기 때문에 넘어간다.
필요한 라이브러리 정리 , 톰켓 서버, jdbc, jar, jquery - css설정이라던지 하나로 묶어서 보충
순서는
기본적 완성
jstl/el 수정
board-css page추가해줌
ajax -
이런 형식으로 이루어졌다.
폼들로 보내주는 형식의 변천사?
<jsp:include page="/WEB-INF/views/includes/header.jsp" />
jstl로 변경
<c:import url="/WEB-INF/views/includes/header.jsp"/>
1. 액션 프레임 워크
----------- 맨처음 action 설정이 어디인지 보충 , request.getContextPath 어디서 설정하는지?
1 2 3 4 5 6 7 8 | <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <title>mysite</title> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <link href="/assets/css/board.css" rel="stylesheet" type="text/css"> </head> | cs |
위에서 링크를 css로 준것
action 을 줄때
1 2 | public class IndexAction implements Action {} | cs |
이런형식 + 어디서 줬는지? - 보충
ActionFactory를 쓰는데 원래있던 AbstractActionFactory를 상속받아와서 쓰는것
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | public class UserActionFactory extends AbstractActionFactory { @Override public Action getAction(String actionName) { Action action = null; if("joinform".equals(actionName)) { action = new JoinFormAction(); } else if("join".equals(actionName)) { action = new JoinAction(); } else { action = new IndexAction(); } return action; } } | cs |
""안의 것이 actionName이랑 같으면 action이 지정해준 .java로 넘어가준다.
순서 예시를 들어보면
JoinFormAction에서 하는것은 forward로 joinform.jsp로 넘겨주는 일뿐.
1 2 3 4 5 6 7 8 | public class JoinFormAction implements Action { @Override public void execute(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { WebUtils.forward(request, response, "/WEB-INF/views/user/joinform.jsp"); } } | cs |
joinform으로 들어가서 거기에 있는 값들을 가지고 joinaction으로 넘어간거지
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | public class JoinAction implements Action { @Override public void execute(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { String name = request.getParameter("name"); String email = request.getParameter("email"); String password = request.getParameter("password"); String gender = request.getParameter("gender"); UserVo vo = new UserVo(); vo.setName(name); vo.setEmail(email); vo.setPassword(password); vo.setGender(gender); new UserDao().insert(vo); WebUtils.redirect(request, response, request.getContextPath() + "/user?a=joinsuccess"); } } | cs |
implements 인터페이스를 구현
request.getParameter로 받아온 값을 name에 넣어준뒤 각각의 UserVo객체에 set해준다.
vo에 값들이 들어가게되고 그것을 바탕으로 dao의 함수를 불러와 set된 vo들을 활용해 sql문을 실행한다고 보면된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | public int insert(UserVo vo) { int count = 0; Connection conn = null; PreparedStatement pstmt = null; try { conn = getConnection(); String sql = " insert" + " into user" + " values ( null, ?, ?, ?, ?, now() )"; pstmt = conn.prepareStatement(sql); pstmt.setString(1, vo.getName()); pstmt.setString(2, vo.getEmail()); pstmt.setString(3, vo.getPassword()); pstmt.setString(4, vo.getGender()); count = pstmt.executeUpdate(); } catch (SQLException e) { System.out.println("error :" + e); } finally { // 자원 정리 try { if (pstmt != null) { pstmt.close(); } if (conn != null) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } return count; } | cs |
sql구문에 ?에 각자의 vo에서 받아온 값을 set해준다. 이떄 순서대로 넣어줘야된다.
workbench에서 직접 돌려보는게 좋다.
로그인한 정보가 필요할때는 session을 따로보내줘야된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | public class LoginAction implements Action { @Override public void execute(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { String email = request.getParameter("email"); String password = request.getParameter("password"); UserVo authUser = new UserDao().get(email,password); if(authUser ==null) { /*인증실패*/ request.setAttribute("result", "fail"); WebUtils.forward(request, response, "/WEB-INF/views/user/loginform.jsp"); return;//인증이 계속될수있으므로 끝내줘야오류가안뜬다. } /* 인증성공 -> 인증처리 */ HttpSession session = request.getSession(true); session.setAttribute("authuser", authUser); /*main redirect*/ WebUtils.redirect(request, response, request.getContextPath()); } } | cs |
8 get에 email과 password를 넘겨준다.
Dao에서
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | public UserVo get(String email, String password) { UserVo result = null; Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null;// select구문 넣을ㄸ try { conn = getConnection(); // select에 password까지는 필요없다. String sql = " select no, name " + " from user" + " where email=? and password=?"; pstmt = conn.prepareStatement(sql); pstmt.setString(1, email); pstmt.setString(2, password); rs = pstmt.executeQuery(); if (rs.next()) { long no = rs.getLong(1); String name = rs.getString(2); result = new UserVo(); result.setNo(no); result.setName(name); } } catch (SQLException e) { System.out.println("error :" + e); } finally { // 자원 정리 try { if (rs != null) { pstmt.close(); } if (pstmt != null) { pstmt.close(); } if (conn != null) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } return result; } | cs |
세션과 가져온 email,password를 넘겨준다.
또한 가져온 값들을 보여줄때 -select는 result값을 따로 지정해줘서 가져와줘야된다.
로그아웃
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | public class LogoutAction implements Action { @Override public void execute(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { HttpSession session = request.getSession(); if (session != null && session.getAttribute("authuser") != null) { // logout 처리 session.removeAttribute("authuser"); session.invalidate(); } WebUtils.redirect(request, response, request.getContextPath()); } } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | public class ModifyFormAction implements Action { @Override public void execute(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { /* 접근제어 */ UserVo authUser = null; HttpSession session = request.getSession(); if(session != null) { authUser = (UserVo)session.getAttribute("authuser"); } if(authUser == null) { WebUtils.redirect(request, response, request.getContextPath()); return; } UserVo vo = new UserDao().get(authUser.getNo()); request.setAttribute("vo",vo); WebUtils.forward(request, response, "WEB-INF/views/user/modifyform.jsp"); } } | cs |
얘는 userVo에 의해 객체가 생성된 authUser의 no값을 들고 vo로 간다. - 두개의 no값을 비교
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | public class ModifyAction implements Action { @Override public void execute(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { String no_string = request.getParameter("no"); Long no = Long.parseLong(no_string); String name = request.getParameter("name"); String gender = request.getParameter("gender"); UserVo vo = new UserVo(); vo.setNo(no); vo.setName(name); vo.setGender(gender); UserVo authuser = new UserDao().update(vo); HttpSession session = request.getSession(); session.setAttribute("authuser", authuser); WebUtils.redirect(request, response, request.getContextPath()); } } | cs |
얘는 mdifyform.jsp에서 세션도 동시에 넘어가면서 수정이 되고, getContextPath로 보내지는거다. - 수정된상태로 넘어가는거다.
왜 no값을 들고가냐 - 자기가 가입한 고유의값을 가지고 넘어가야된다. Primary 키기 때문에.
이두개는 직접 넘어가는 값을 비교해보고 다시 보충하자. 이둘다 다른방식으로 UserVo의 no값을 넘겨주는것이다.
'풀스택 > servlet-jsp' 카테고리의 다른 글
servlet-jsp -guestbook1, 2(MVC) -mvc설명 보충완료 (0) | 2019.02.23 |
---|
댓글