본문 바로가기
풀스택/servlet-jsp

mysite2 제작 servlet -jsp->jstl -보충 필요

by woohyun22 2019. 2. 23.

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값을 넘겨주는것이다.

728x90

'풀스택 > servlet-jsp' 카테고리의 다른 글

servlet-jsp -guestbook1, 2(MVC) -mvc설명 보충완료  (0) 2019.02.23

댓글