자바 개발 24일차 - 강의평가 웹 사이트 만들기(마무리)

김경빈·2023년 1월 6일
0

이외에도 jdbc 파일을 최신으로 바꾸어도 보고... 다시금 코드를 새롭게 짜보고 음.... 많은 시도를 해봤는데 아직도

심각: 경로 [/Lecture_Evaluation]의 컨텍스트 내의 서블릿 [jsp]을(를) 위한 Servlet.service() 호출이, 근본 원인(root cause)과 함께, 예외 [java.lang.NullPointerException]을(를) 발생시켰습니다.

위의 경고문구가 출력이 된다...ㅠ

일단 하나하나 다시 확인을 해봐야겠다..
C:\Users\김경빈>mysql -u root -p
이로써 dbURL과 나의 dbID dbPassword는 틀리지 않았음을 알수있다.
.
.
.
.
.
.
.
.
오류가 나는 이유를 찾았다!!!

2020년 5월 기준으로 google 에서 구글 계정은 '계정' 설정에서 '보안 수준이 낮은 앱'에 대한 접근 권한이 설정되어야 합니다. 라는 기능이 사라져서 그렇다...







마지막으로 간단히 기초 시큐어 코딩 방법에 대해서 소개해드리려고 합니다. XSS를 방지하는 겁니다. XSS는 기본적으로 특정 사용자가 다른 사용자와 통신하는 과정에서 발생할 수 있는 해킹 방법입니다. 대표적으로는, 강의 평가 글 자체가 될 수 있습니다. 따라서 강의 평가 글을 출력할 때는 자바스크립트를 실행할 수 있는 문장을 모두 치환하면 됩니다.

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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
  ▶ EvaluationDAO.java 내부의 write() 함수 수정하기
 
 
 
    public int write(EvaluationDTO evaluationDTO) {
 
        PreparedStatement pstmt = null;
 
        try {
 
            String SQL = "INSERT INTO EVALUATION VALUES (NULL, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 0);";
 
            pstmt = conn.prepareStatement(SQL);
 
            pstmt.setString(1, evaluationDTO.getUserID().replaceAll("<", "&lt;").replaceAll(">", " &gt;").replaceAll("\r\n", "<br>"));
 
            pstmt.setString(2, evaluationDTO.getLectureName().replaceAll("<", "&lt;").replaceAll(">", " &gt;").replaceAll("\r\n", "<br>"));
 
            pstmt.setString(3, evaluationDTO.getProfessorName().replaceAll("<", "&lt;").replaceAll(">", " &gt;").replaceAll("\r\n", "<br>"));
 
            pstmt.setInt(4, evaluationDTO.getLectureYear());
 
            pstmt.setString(5, evaluationDTO.getSemesterDivide().replaceAll("<", "&lt;").replaceAll(">", " &gt;").replaceAll("\r\n", "<br>"));
 
            pstmt.setString(6, evaluationDTO.getLectureDivide().replaceAll("<", "&lt;").replaceAll(">", " &gt;").replaceAll("\r\n", "<br>"));
 
            pstmt.setString(7, evaluationDTO.getEvaluationTitle().replaceAll("<", "&lt;").replaceAll(">", " &gt;").replaceAll("\r\n", "<br>"));
 
            pstmt.setString(8, evaluationDTO.getEvaluationContent().replaceAll("<", "&lt;").replaceAll(">", " &gt;").replaceAll("\r\n", "<br>"));
 
            pstmt.setString(9, evaluationDTO.getTotalScore().replaceAll("<", "&lt;").replaceAll(">", " &gt;").replaceAll("\r\n", "<br>"));
 
            pstmt.setString(10, evaluationDTO.getCreditScore().replaceAll("<", "&lt;").replaceAll(">", " &gt;").replaceAll("\r\n", "<br>"));
 
            pstmt.setString(11, evaluationDTO.getComfortableScore().replaceAll("<", "&lt;").replaceAll(">", " &gt;").replaceAll("\r\n", "<br>"));
 
            pstmt.setString(12, evaluationDTO.getLectureScore().replaceAll("<", "&lt;").replaceAll(">", " &gt;").replaceAll("\r\n", "<br>"));
 
            return pstmt.executeUpdate();
 
        } catch (Exception e) {
 
            e.printStackTrace();
 
        } finally {
 
            try {
 
                if(pstmt != null) pstmt.close();
 
                if(conn != null) conn.close();
 
            } catch (Exception e) {
 
                e.printStackTrace();
 
            }
 
        }
 
        return -1;
 
    }
cs

이렇게 기본적인 웹페이지 구성과 mysql을 통한 db관리법을 공부했습니다.
JSP를 통한 웹페이지 만들기를 하며 사실 따라 친다? 라는 생각이 지배적이였으나 생각보다 내가 설정해야하는것이 많았으며 강의의 조회수가 점점 줄어드는것을보며 나뿐만 아니라 다른분들 또한 수없이 막히며, 포기하고, 강의와는 전혀 달라진 버전, 최신코드 스타일등을 알아보며 수정하는 과정을 통해 저 또한 많이 발전하고 성장한것 같습니다.

YOUTUBE 동빈나님의 https://www.youtube.com/watch?v=hke9FKluXow&list=PLRx0vPvlEmdAdWCQeUPnyMZ4PsW3dGuFB 를 기반으로 작성되었으며 연차가 좀 많이 된 강의기 때문에 중간중간 생성자에서 오류가 나는것, NULL값에서 나는 오류들이 몇개씩 있었습니다. 아마 수많은 강의생분들이 초반부터 막히고 dead code가 많이 일어날거라 생각합니다. 혹시라도 2023년 최신버전들로 설정하신분들과 조금더 리뉴얼된 코드를 필요로하시는분들은 댓글로 남겨주시면 제가 작성한 코드를 보내드리도록하겠습니다.

다음 포스팅부터는 대대적인 포토폴리오 구성과 배포방법에 대해서 작성하도록하겠습니다.

profile
매일매일 무한한 근성으로 코드를 작성합니다.

0개의 댓글