HttpServletRequest 객체
-> 1회용 데이터를 저장하는 저장소 -> 요청하고 응답이 완료될때까지 유지
-> (요청, 응답이 끝나면 날라감)
-> 일회용 객체를 보완하기위해서 (즉 객체가 유지되기위해서) 밑에 객체들이 만들어짐
HttpSession 객체 -> getSession() 메소드 이용
-> 원하는시점에 생성해서 원하는 시점까지 저장할 수 있는 저장소
-> 인증의 수단으로 사용
-> session을 삭제하는 메소드 : invalidate()
ServletContext -> getServletContext() 메소드 이용하거나, getServletConext()를 이용
-> 서버가 실행되고 종료될때까지 유지하는 저장소 = 서버가 꺼질때 까지
위 3개의 객체 모두 setAttribute 메소드를 통해서 데이터 저장 가능!
-- shareDataServlet.java
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 각 객체에 데이터 저장하기
// HttpServletRequest 객체에 데이터 저장하기
request.setAttribute("requestdata", "requestDataTest");
// HttpSession 객체 이용하기
// 1. HttpSession 객체를 생성
// -> HttpServletRequest 제공하는 getSession() 메소드 이용
HttpSession session = request.getSession();
// 2. HttpSession.setAttribute() 메소드를 이용해서 저장
session.setAttribute("sessiondata", "sessionDataTest");
// ServletContext 객체 이용하기
// 1. ServletContext 객체 생성
// -> HttpServletRequest 제공하는
// getServletContext() 메소드 이용하거나, getServletConext()를 이용
ServletContext context = request.getServletContext(); // 방법 1
context = getServletContext(); // 방법 2
context.setAttribute("contextdata", "contextDataTest");
RequestDispatcher rd =
request.getRequestDispatcher("/checkData.do");
rd.forward(request, response);
}
-- CheckDataServlet.java
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String requestData = (String)request.getAttribute("requestdata"); // 키 값을 통해서 값 저장
HttpSession session = request.getSession();// 키 값을 통해서 값 저장
String sessionData=(String)session.getAttribute("sessiondata");
ServletContext context = getServletContext(); // 키 값을 통해서 값 저장
String contextData = (String)context.getAttribute("contextdata");
response.setContentType("text/html;charset=utf-8"); // response 객체를 이용하여 html 인식할 수 있도록 설정 (한국어 깨지지 않도록 설정)
PrintWriter out= response.getWriter();
String html="<h3>request : "+requestData+"</h3>";
html+="<h3>session : "+sessionData+"</h3>";
html+="<h3>context : "+contextData+"</h3>";
html+="<button onclick=\"location.assign('/02_servletdata/checkData.do');\">checkdata 재요청</button>";
html+="<button onclick=\"location.assign('/02_servletdata/deleteSession.do');\">seesion삭제</button>";
out.write(html);
// 위 checkdata 재용처 버튼클릭해서 URL이바껴도 requestData만 없어지고
// sessionData와 contextData는 유지됨 -> 즉 url이 바껴도 HttpSession과 ServletContext 객체는 살아있음
// 위 session삭제 버튼 누르면 HttpSession 객체가 사라짐
// session 삭제버튼 화면은 바로 밑에있음
// ServletContext 객체는 서버 끄면 삭제됨
}
-- DeleteSessionServlet.java
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
session.invalidate(); // HttpSession 객체의 session값을 삭제하는 메소드
response.sendRedirect("/02_servletdata/checkData.do"); // 삭제한 후에 전 화면으로 이동
// 경로 : checkData.do 만 써도됨
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// HttpServleteRequest 객체가 제공하는 정보
// 1. ContextRoot 가져오기 = 프로젝트 path만 가져오기
String contextPath=request.getContextPath();
System.out.println(contextPath); // contextRoot;
// 2. HttpRequest의 header 정보 가져오기
String userAgent = request.getHeader("User-Agent");
System.out.println(userAgent);
// 이전 페이지정보
String prevPage = request.getHeader("Referer");
System.out.println(prevPage);// 바로 이전 주소가 나옴
// 3. 요청한 주소에 대한 정보를 가져오기
String uri = request.getRequestURI(); // 메인주소만 나옴 (URI)
System.out.println(uri);
StringBuffer url = request.getRequestURL(); // 전체주소가 나옴 (URL)
System.out.println(url);
// URI와 URL의 차이점
// URI= 식별자, URL=식별자+위치
// https://elancer.co.kr은 URL
// elancer.co.kr은 URI
// URI가 URL보다 더 큰 범위이다
}
// LoginServlet (폼으로 받아온 값들 이용)
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String userId = request.getParameter("userId");
String password= request.getParameter("password");
if(userId.equals("admin")&& password.equals("1234")) {
System.out.println("로그인 성공");
HttpSession session = request.getSession(); // 로그인되면 그 정보들이 유지되어야하기때문에 HttpSession 객체 사용
session.setAttribute("loginId", userId);
}else {
System.out.println("로그인 실패");
}
response.sendRedirect(request.getContextPath()+"/mainView.do"); // 해당 매핑 페이지로이동
}
// MainViewServlet.java
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
String loginId=(String)session.getAttribute("loginId"); // 해당 키값이 없으면 null로 반환됨
String html="";
if(loginId!=null) {
html+="<h2>"+loginId+"님 환영합니다</h2>";
}else {
html+="<h2>로그인 후 이용이 가능합니다.</h2>";
}
response.setContentType("text/html;charset=utf-8");
response.getWriter().write(html);
}