오봉이와 함께하는 개발 블로그
Servlet - 세션 트래킹(웹 페이지 사이 정보 공유)URL Rewrite 본문
728x90
쿠키와 세션
- 클라이언트와 서버 간에 정보를 교환하는데 클라이언트 PC 또는 서버의 메모리에 저장해 두고 사용하면 프로그램 속도를 향상시킬 수 있음
HTTP 프로토콜
- 서버-클라이언트 통신 시 stateless 방식으로 통신
- 브라우저에서 새 웹페이지를 열면 기존의 웹페이나 서블릿에 관한 어떤 연결 정보도 유지 않음
- 새로 열린 페이지에서 어떤 정보도 알 수 없음
- 페이지가 서로 독립적이어서 서로의 상태를 알 수 없음
- 웹 페이지 사이 또는 서블릿 간 상태나 정보를 공유하려면 웹 페이지를 연결시키는 기능 필요
- 세션 트래킹이라고 함
- 방법
- URL Rewrite
- GET 방식으로 전송할 때 데이터가 URL 뒤에 붙여서 다음 페이지로 전송
- second02?name=lee
- GET 방식으로 전송 : 데이터 노출, 길이 제한, 보안 문제
- URL Rewrite
- 방법
- 세션 트래킹이라고 함
URL Rewriting 방식 예제 - LoginRewriteServlet.java, SecondServlet.java, login-rewrite.html
package com.example.servlet4;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLEncoder;
@WebServlet("/loginrewrite")
public class LoginRewriteServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
String user_id = request.getParameter("user_id");
String user_pw = request.getParameter("user_pw");
String user_address = request.getParameter("user_address");
String user_email = request.getParameter("user_email");
String user_hp = request.getParameter("user_hp");
if (user_id != null && user_id.length() != 0) {
String data = "<html><body>";
data += "안녕하세요!<br> 로그인하셨습니다.<br><br>";
data += "아이디 : " + user_id + "<br>";
data += "비밀번호 : " + user_pw + "<br>";
data += "주소 : " + user_address + "<br>";
data += "이메일 : " + user_email + "<br>";
data += "휴대전화 : " + user_hp;
out.print(data);
// URL Rewriting 방식 이용
user_address = URLEncoder.encode(user_address, "utf-8");
// 인코딩 하면 서울시+종로구 라고 나오고 하지 않으면 서울시%종로구 라고 나옴
out.print("<br><br><a href='/second?user_id=" + user_id
+ "&user_pw=" + user_pw
+ "&user_address=" + user_address
+ "'>두 번째 서블릿으로 보내기</a>");
data = "</body></html>";
}
else {
out.println("로그인 하지 않았습니다. <br><br>");
out.println("다시 로그인 하세요. <br><br>");
out.println("<a href='login-rewrite.html'>로그인 창으로 이동</a>");
}
}
}
package com.example.servlet4;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet("/second")
public class SecondServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
String user_id = request.getParameter("user_id");
String user_pw = request.getParameter("user_pw");
String user_address = request.getParameter("user_address");
out.print("<html><body>");
if(user_id != null && user_id.length() != 0) {
out.println("이미 로그인 상태입니다. <br><br>");
out.println("첫 번째 서블릿에서 넘겨준 아이디 : " + user_id + "<br>");
out.println("첫 번째 서블릿에서 넘겨준 비밀번호 : " + user_pw + "<br>");
out.println("첫 번째 서블릿에서 넘겨준 주소 : " + user_address + "<br>");
out.print("</body></html>");
}
else {
out.println("로그인 하지 않았습니다. <br><br>");
out.println("다시 로그인 하세요. <br><br>");
out.println("<a href='login-rewrite.html'>로그인 창으로 이동</a>");
}
}
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form name="frmLogin" method="post" action="loginrewrite" >
아이디 :<input type="text" name="user_id"><br>
비밀번호:<input type="password" name="user_pw" ><br>
<input type="submit" value="로그인"> <input type="reset" value="다시입력">
<!-- hidden 태그 -->
<input type="hidden" name="user_address" value="서울시 종로구" >
<input type="hidden" name="user_email" value="test@naver.com" >
<input type="hidden" name="user_hp" value="010-1111-1111" >
</form>
</body>
</html>
728x90
'BE > Servlet' 카테고리의 다른 글
Servlet - 세션 트래킹(웹 페이지 사이 정보 공유) Session 세션 (0) | 2021.12.29 |
---|---|
Servlet - 세션 트래킹(웹 페이지 사이 정보 공유) Cookie 쿠키 (0) | 2021.12.29 |
Servlet - 세션 트래킹(웹 페이지 사이 정보 공유)<hidden> 태그 사용 (0) | 2021.12.29 |
Servlet - 포워딩 (0) | 2021.12.29 |
Servlet - Servlet DB연동(Connection Pool) (0) | 2021.12.28 |
Comments