JSP(Java Server Page)
자바, 웹 서버 동작원리
- JDK설치
- 웹 서버 설치 -> 아파치 톰캣
웹 서버의 역할 : 1) 웹서버(아파치) 서버에 내용(파일)을 사용자에게 보여주는 기능
2) 웹 애플리케이션 서버(톰켓) : JSP, JAVA 코드 -> HTML로 변경해서 사용자에게 보여주는 기능
웹 서버 동작원리
Q. 웹 서버 동작원리는?
HTML 페이지
클라이언트가 HTML 페이지를 요청 - 서버에서 요청한 페이지를 응답
(사용자가 서버에 요청 - 서버에서 요청한 페이지를 응답)
웹 서버에 전달 - 웹 서버 안에 사용자가 요청한 페이지를 찾아 사용자에게 전달(응답)
JSP 페이지
클라이언트가 JSP 페이지 요청
- 웹 서버(아파치) 전달
- 해당 JSP페이지 찾아 웹 애플리케이션 서버(웹 컨테이너,WAS) 전달하여 JSP, JAVA 명령을 처리하고 결과를 HTML로 변경 작업
-웹 서버에 전달
-사용자에게 전달(응답)
※3계층 구조
클라이언트 - 웹 애플리케이션 서버 - 데이터베이스 서버
클라이언트 : 프리젠테이션 계층
웹/애플리케이션 계층 : 프리젠테이션 계층 controller/비지니스로직 계층 service/데이터 접근 계층 DAO
데이터베이스 서버 : 데이터 베이스
HTTP 프로토콜
Q. http, https 차이?
HTML 요청, 응답하는 통신 규약
HTTP 요청 메세지(시작,헤더,본문) -> 웹서버 -> HTTP 응답 메세지(시작,헤더,본문)
웹 애플리케이션 서버 동작원리
JSP 페이지
-> request(http가 들고 온 요청 정보를 저장(주소값)), response(서버 처리결과 응답 정보를 저장). 객체 생성
-> web.xml 참조(서버의 관문 역할, 설정 정보 확인)
-> servlet(명령 처리담당자) 기억 장소를 만듦 - JAVA,JSP 명령을 처리하고 결과를 html 변경 작업(응답 정보를 response에 저장)
-> response(응답정보)를 웹 서버에 전달
-> response(응답 정보)를 http에 전달
-> 응답정보를 사용자에게 전달
-> request, response, servlet 기억장소 해제
JSP 내장객체
request 요청 정보
response응답정보
session연결 정보 저장
application 서버 정보
out 출력 정보
pageContext 현재페이지 정보 저장
사용자 | 서버
서버 시작 application내장 객체 생성 / 서버 종료 시 application 소멸
사용자가 접속 연결정보 저장하는 session 객체 서버에 생성, 연결이 끊어지면 session 소멸
클라이언트가 요청 - 서버 reqeust(요청 작업), response(응답 정보) - 응답 정보를 클라이언트에게 전달 후 소멸
쿠키
Q. session과 cookie 차이
※Thread 동시에 작업이 이루어지게 함
사용자 | 서버
접속하자마자 session이 만들어져 서버에 저장
서버에서 쿠키가 생성되어 접속할 때 사용자 컴퓨터에 저장
session,쿠키 값을 유지하는 용도는 동일
session은 서버에 저장, 쿠키는 사용자 컴퓨터에 저장
쿠키는 서버가 종료되어도 값이 유지
form 태그
기능, 폼 안에 있는 내용을 들고(name="value") 서버에 전달
action 하이퍼링크 이동, 값을 들고 하이퍼링크로 이동
method get방식, post방식에 따라 서버에서 처리하는 것이 달라짐
get 주소줄에 가져가는 방식
단, id, class js제어용, 서버에 넘어갈때는 반드시 name="값"을 가져감
request.getParameter
DB
Q.자바, 객체지향, SQL구문
SQL 구문 정리 : SELECT, INSERT INTO, UPDATE SET, DELETE
보안
<%@page import="java.sql.Statement"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.Connection"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jsp4/loginPro.jsp</title>
</head>
<body>
<h1>jsp4/loginPro.jsp</h1>
<h1>로그인 화면</h1>
<!-- 폼에서 입력한 내용이 서버에 전달 →서버에 request 내장객체에 저장
request에서 id, pass태그값(파라미터값)을 가져와서 변수에 저장 -->
<%
request.setCharacterEncoding("utf-8");
String id = request.getParameter("id");
String pw = request.getParameter("pw");
//1단계 Driver.class 자바실행 파일 불러오기
Class.forName("com.mysql.cj.jdbc.Driver");
//2단계 불러온 파일을 DB 연결
String dbUrl ="jdbc:mysql://localhost:3306/jspdb?serverTimezone=Asia/Seoul";
String dbUser = "root";
String dbPw = "1234";
Connection con = DriverManager.getConnection(dbUrl, dbUser, dbPw);
//3단계 연결정보를 이용해 SQL구문을 만들고 실행할 수 있는 객체 생성
//보안에 좋은 코드
// String sql = "select * from members where id=? and pw=?";
// PreparedStatement pstmt = con.prepareStatement(sql);
// pstmt.setString(1, id);
// pstmt.setString(2, pw);
//SQL 삽입 공격
//보안 취약 코드 : 아이디 kim' OR ' '1' =' 1 입력 => 비밀번호가 틀려도 로그인이됨
//java.sql.Statement
//3단계
String sql = "select * from members where id='"+id+"' and pw='"+pw+"'";
Statement stmt = con.createStatement();
//4단계
ResultSet rs = stmt.executeQuery(sql);
//4단계 SQL구문 실행 → 실행 후 결과 저장(select) → ResultSet 내장객체 저장
//조건 db, form id, pw가 일치하면 → ResultSet 내장객체 저장
// ResultSet rs = pstmt.executeQuery();
//5단계 결과를 이용해 다음 행 이동 → 아이디, 비밀번호 일치 출력, 아이디, 비밀번호 불일치
if(rs.next()){
out.println("아이디, 비밀번호 일치<br>");
out.println("로그인 성공<br>");
// out.print(pstmt);
out.print(stmt);
//아이디 비밀번호 일치하면 로그인 표시 설정(연결되어 있는 동안 페이지 상관없이 값을 유지)
//세션에 로그인 표시 저장("세션에 로그인 표시이름", 값)
session.setAttribute("id",id);
response.sendRedirect("03_main.jsp");//main.jsp 이동
} else{
out.println("아이디, 비밀번호 불일치<br>");
out.println("로그인 실패<br>");
// out.print(pstmt);
out.print(stmt);
response.sendRedirect("02_login.jsp");//login.jsp 이동
}
%>
</body>
</html>
SQL 쿼리의 논리 연산은 AND연산자 먼저 계산한 후 OR 연산자를 계산함
※ 한국인터넷진흥원 https://kisa.or.kr/ 지식 플랫폼 법령가이드라인 가이드 라인
표준프레임워크 포털 https://www.egovframe.go.kr/home/main.do 알림마당 - 관련참고문서 - 표준프레임워크 보안 개발 가이드
PMD 설치
Help - Eclipse Marketplace - pmd - pmd plug-in 7.0.0.
빨간색이 보안에 취약
스프링 PMD 설치
그림 8에서 체크 해제한 후 Next, Next,..해서 창이뜨면 체크 후 TrustSelect
'KDT > WEB' 카테고리의 다른 글
240311 WEB - 로그인 제어 (0) | 2024.03.11 |
---|---|
240308 WEB - 정리 2, jQuery (0) | 2024.03.08 |
240227 WEB - Map (0) | 2024.02.27 |
240223 WEB 댓글,대댓글 (0) | 2024.02.23 |
2410220 WEB 메인에서 최신 글 보여주기, 게시판 검색 (0) | 2024.02.20 |