✅ 개발자가 원하는 시점에서 데이터 저장하는 방법
session
-> 서버 컴퓨터에 저장됨, 객체 저장 가능, 크기 제한 x, 보안이 필요한 데이터들은 세션에 넣음
cookie
-> client(사용자) 컴퓨터에 필요한 데이터를 저장하고 서버이용시에 가져오는 구조
-> 객체저장 불가능, 문자열만 저장 가능, 크기에 제한 O,
-> 보안에 필요하지않는 데이터들을 쿠기에넣음 ex) 아이디 저장, 최근본상품
공통점 : 둘 다 저장구조는 key:value 형식임
// 쿠키 생성
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Cookie c = new Cookie("readBoard","1$2$3$4"); // 쿠키 생성 (키 값 형식)
c.setMaxAge(60*60*24);
// 쿠키 유지기한 차례대로 (초,분,시) -> 60 60 24 = 하루
// 쿠키를 등록하기전에 먼저 기간을 정해줘야함 (순서 준수!)
// 유효기간이 끝나기전까지는 브라우저를 닫아도 쿠키는 사라지지 않음
response.addCookie(c); // 브라우저에 쿠키 저장
response.sendRedirect(request.getContextPath()); // 메인으로 이동됨
}
// 쿠키 사용(쿠키값 가져오기)
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 쿠키값 가져오기
Cookie[] cookies = request.getCookies(); // 쿠키의 반환형은 배열임 (키만 중복되지않으면 계속 저장됨)
if(cookies!=null) {
for(Cookie c : cookies) { // 쿠키메소드 : getName(), getValue()
System.out.println(c.getName()); // 키 출력
System.out.println(c.getValue()); // 값 출력
if(c.getName().equals("readBoard")) {
String[] data = c.getValue().split("\\$");
System.out.println(Arrays.toString(data));
// StringTokenizer st = new StringTokenizer(c.getValue(),"$");
// while(st.hasMoreTokens()){
// System.out.println(st.nextToken());
}
}
}
}
// 쿠키 삭제
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 쿠키 삭제하기
// 삭제할 쿠키와 동일한 key의 cookie 객체를 생성하고
// setMaxAge(0)으로 설정
Cookie c = new Cookie("readBoard","");
c.setMaxAge(0);
response.addCookie(c);
response.sendRedirect(request.getContextPath());
}
// 세션 설정
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession(true);
//getSession 메소드에 boolean형으로 매개변수를 설정할 수 있다.
// true -> 세션을갖고오되, 없으면 새로 생성해서 가져옴
// false -> 세션을 갖고오지 않음
session.setMaxInactiveInterval(5); // 세션 활동이 5초동안 없으면 세션삭제
session.setAttribute("data", "sessionData");
System.out.println(session);
response.sendRedirect(request.getContextPath());
}
✅ 서버에서 공통으로 사용하는 값에 대한 설정
// web.xml 파일
<context-param> <!-- context-param -->
<param-name>admin</param-name> <!-- admin이라는 이름으로 admin@admin.com이 나옴 -->
<param-value>admin@admin.com</param-value>
</context-param>
// 자바파일
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String contextdata = getServletContext().getInitParameter("admin");
// 위와 같은 방법으로 context-param 값을 가져올 수 있다
// 이 서블릿파일 말고도 다른 모든 서블릿파일에서도 사용 가능하다 -> context-param
System.out.println(contextdata);
}
✅ 해당 서블릿에 적용한 곳만 사용 가능한 설정
// web.xml 파일
<servlet> <!-- init-param -> 해당 적용한 서블릿에만 적용가능 -->
<servlet-name>contextdata</servlet-name>
<servlet-class>com.cookie.controller.ContextDataServlet</servlet-class>
<!-- 위 클래스 파일에서만 사용가능함 -->
<init-param>
<param-name>servletdata</param-name>
<param-value>testdata</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>contextdata</servlet-name>
<url-pattern>/contextdata.do</url-pattern>
</servlet-mapping>
// 자바파일
package com.cookie.controller;
import java.io.IOException;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//@WebServlet("/contextdata.do")
public class ContextDataServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 서블릿 초기화 데이터 이용하기
String servletdata = getInitParameter("servletdata"); // getInitParameter 메소드
System.out.println(servletdata); // 이 클래스에서만 servletdata 값 사용 가능 (다른 클래스에서는 불가능)
}
}
✅ 이클립스안에서 데이터베이스 활용하는 방법
✅ 서블릿을 통해 jdbc 데이터 연결하기
package com.member.controller;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.RequestDispatcher;
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.member.model.vo.Member;
@WebServlet("/memberall.do")
public class MemberSearchAllServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public MemberSearchAllServlet() {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 자바코드
// DB의 Member테이블에 있는 데이터를 가져와 화면에 출력해주기
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
String sql = "SELECT * FROM MEMBER";
List<Member> members = new ArrayList();
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe",
"student","student");
conn.setAutoCommit(false);
pstmt=conn.prepareStatement(sql);
rs=pstmt.executeQuery();
while(rs.next()) {
Member m = new Member();
m.setMemberId(rs.getString("member_id"));
m.setMemberPwd(rs.getString("member_pwd"));
m.setMemberName(rs.getString("member_name"));
m.setGender(rs.getString("gender"));
m.setAge(rs.getInt("age"));
m.setEmail(rs.getString("email"));
m.setPhone(rs.getString("phone"));
m.setAddress(rs.getString("address"));
m.setHobby(rs.getString("hobby"));
m.setEnrollDate(rs.getDate("enroll_date"));
members.add(m);
}
}catch(Exception e) {
e.printStackTrace();
}finally {
try {
if(rs!=null)rs.close();
if(pstmt!=null)pstmt.close();
if(conn!=null)conn.close();
}catch(SQLException e) {
e.printStackTrace();
}
}
// System.out.println("회원정보출력");
// members.stream().forEach(System.out::println);
// members.stream().forEach(e->System.out.println(e));
request.setAttribute("members", members);
RequestDispatcher rd =request.getRequestDispatcher("memberView.do");
rd.forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
// ("/memberView.do")
package com.member.views;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
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.member.model.vo.Member;
@WebServlet("/memberView.do")
public class MemberViewServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public MemberViewServlet() {}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
List<Member> members = (List)request.getAttribute("members");
// request 반환타입은 object라서 List타입으로 형변환 해줘야함
String html="<table>";
html+="<tr>";
html+="<th>아이디</th>";
html+="<th>패스워드</th>";
html+="<th>이름</th>";
html+="<th>나이</th>";
html+="<th>성별</th>";
html+="<th>이메일</th>";
html+="<th>전화번호</th>";
html+="<th>주소</th>";
html+="<th>취미</th>";
html+="<th>가입일</th>";
html+="</tr>";
for(Member m : members) {
html+="<tr>";
html+="<td>"+m.getMemberId()+"</td>";
html+="<td>"+m.getMemberPwd()+"</td>";
html+="<td>"+m.getMemberName()+"</td>";
html+="<td>"+m.getAge()+"</td>";
html+="<td>"+m.getGender()+"</td>";
html+="<td>"+m.getEmail()+"</td>";
html+="<td>"+m.getPhone()+"</td>";
html+="<td>"+m.getAddress()+"</td>";
html+="<td>"+m.getHobby()+"</td>";
html+="<td>"+m.getEnrollDate()+"</td>";
html+="</tr>";
}
html+="</table>";
out.print(html);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}