1. Servlet 알아보기
Servlet은 Java 언어로 작성된 웹 어플리케이션에서 동작하는 Java 클래스이며, 클라이언트의 요청에 따라 적절한 처리를 수행하고 그 결과를 반환하는 역할을 한다. Java를 이용하여 웹 개발을 하기 위해 고안되었으며, 최초 MVC1 Model에 사용되었다.
HTTP와 통신하기 위한 메소드로, GET, POST, PUT, DELETE 4가지 Type이 존재한다.
1) GET method [ C ]
GET 메소드는 서버로부터 정보를 요청하는데 사용된다. 즉, 클라이언트가 서버로부터 데이터를 가져오고자 할 때 사용된다. GET 메소드는 데이터를 전달하며, 이 데이터는 서버에서 처리된 결과를 반환할 때 함께 반환한다.
2) POSTmethod [ R ]
POST 메소드는 서버에 데이터를 제출하는데 사용된다. 즉, 클라이언트가 서버에 데이터를 보내고자 할 때 사용된다. POST 메소드는 URL 끝에 데이터를 전달하지 않으며, 대신 HTTP 요청 메시지 본문에 데이터를 담아서 서버에 전달한다.
3) PUT method [ U ]
PUT 메소드는 서버에 데이터를 저장하거나 갱신하는데 사용된다. 즉, 클라이언트가 서버에 데이터를 저장하거나 갱신하고자 할 때 사용된다. PUT 메소드는 HTTP 요청 메시지 본문에 데이터를 담아서 서버에 전달한다.
4) DELETE method [ D ]
DELETE 메소드는 서버에서 데이터를 삭제하는데 사용된다. 즉, 클라이언트가 서버에 데이터를 삭제하고자 할 때 사용된다. DELETE 메소드는 URL 끝에 데이터를 전달하지 않으며, 대신 HTTP 요청 메시지 본문에 데이터를 담아서 서버에 전달한다.
이러한 HTTP 메소드들은 RESTful 웹 서비스에서 주로 사용되며, 각 메소드의 적절한 사용은 웹 어플리케이션의 성능과 보안 등에 중요한 영향을 미친다.
이어서 HTTP와 통신할 때 자주 사용하는 데이터 타입은 아래와 같다.
1) 기본타입: Multipart/related
2) form 양식 기본 타입: x-www-form-urlencode
3) form 양식 첨부 파일 포함: multipart/form-data
4) json 타입: application/json
2. 사용자를 인증하기 위한 메커니즘
1) 쿠키
서버에서 클라이언트(브라우저)에 저장되는 작은 데이터 조각이다. 쿠키는 브라우저에서 사용자가 방문한 웹 사이트의 일부 데이터를 저장하고 다음에 그 웹 사이트를 방문할 때 사용된다.
예를 들어, 로그인 정보나 사용자가 선택한 언어 설정 등이 쿠키에 저장될 수 있다. 이러한 쿠키는 브라우저에 직접 저장되기 때문에, 클라이언트 측에서 쉽게 변경이 가능하다. 따라서, 보안적으로 민감한 데이터는 쿠키에 저장하면 안 된다.
2) 로그인 세션
클라이언트와 서버 간의 상태를 유지하는 데 사용되는 기술이다. 사용자가 로그인하면, 서버는 사용자를 고유하게 식별하는 세션 ID를 생성한다. 이 세션 ID는 서버 측에 저장되며, 사용자가 웹 사이트에 접속할 때마다 서버는 세션 ID를 확인하여 사용자가 로그인되어 있는지 확인한다. 따라서, 세션은 보안적으로 쿠키보다 안전하다.
로그인 세션은 일반적으로 쿠키를 사용하여 구현된다. 사용자가 로그인하면, 서버에서 세션 ID를 생성하고, 이를 쿠키에 저장하여 사용자의 브라우저에 전송한다. 이후, 사용자가 다시 웹 사이트를 방문할 때마다, 브라우저는 세션 ID를 서버에 전송하여 사용자를 식별한다. 따라서, 로그인 세션은 쿠키보다 보안적으로 안전한 방법으로 사용자 인증을 제공할 수 있다.
요약하면, 쿠키는 클라이언트 측에서 데이터를 저장하고, 로그인 세션은 서버 측에서 사용자를 식별하는데 사용된다. 로그인 세션은 쿠키를 사용하여 구현되며, 세션은 보안적으로 쿠키보다 안전하다. 따라서, 보안적으로 민감한 데이터는 로그인 세션을 사용하여 처리하는 것이 좋다.
3) Session 사용 방법
(1) 세션 객체 속성 추가 request.getSession().setAttribute( “key name”, value );
(2) 세션 객체 호출 request.getSession().getAttribute( “key name” );
(3) 모든 세션 지우기[초기화 작업] request.getSession().invalidate();
(4) 특정 세션 속성 지우기[일부 초기화 작업] request.getSession().setAttribute( “key name”, null);
// JSP File
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- 모든 세션 지우기 -->
<% request.getSession().invalidate(); %>
<!-- 특정 세션의 속성 지우기 -->
<% request.getSession().setAttribute("login", null); %>
<script type="text/javascript"> location.href="/JSPWEB/apply/index.jsp" </script>
</body>
</html>
// Servlet
package apply.controller.member;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.fasterxml.jackson.databind.ObjectMapper;
import apply.model.dao.MemberDao;
import apply.model.dto.MemberDto;
@WebServlet("/apply/login")
public class login extends HttpServlet {
private static final long serialVersionUID = 1L;
public login() {}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String mid = (String)request.getSession().getAttribute("login");
MemberDto result = MemberDao.getInstance().getMember( mid );
System.out.println( result );
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(result);
System.out.println( json );
response.setCharacterEncoding("UTF-8");
response.setContentType("application/json");
response.getWriter().print(json);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String mid = request.getParameter("mid");
String mpw = request.getParameter("mpw");
boolean result = MemberDao.getInstance().login(mid,mpw);
// 서버[톰캣] 내 세션 객체 호출하기
if( result ) { request.getSession().setAttribute("login", mid); }
response.getWriter().print(result);
}
}
3. json 사용 (객체 타입 변환)
// 2. 로그인 / 회원정보 출력
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1. 호환설정
response.setCharacterEncoding("UTF-8");
// 2. DB에서 가져온 데이터 저장
ArrayList<MemberDto> result = MemberDao.getInstance().mList();
// 3. JAVA 객체 -> JS객체로 형변환
ObjectMapper mapper = new ObjectMapper();
String jsonArray = mapper.writeValueAsString(result);
// 4. 전송
response.setContentType("application/json");
response.getWriter().print(jsonArray);
}
'JSP' 카테고리의 다른 글
JSP - 소켓 사용 (1) | 2023.04.28 |
---|---|
JSP - 이메일 인증 (0) | 2023.04.28 |
JSP - 공공데이터 사용 (0) | 2023.04.28 |
JSP - 페이징 처리 (0) | 2023.04.28 |
Java JSP 알아보기 (0) | 2023.03.06 |