class
package : servlet.session
class : WriteServlet - /session_wirte
ShowServlet - /session_show
RemoveServlet - /session_remove
package servlet.session;
import java.io.IOException;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class WriteServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public WriteServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//클라이언트 별로 저장 하는 곳을 분리하고 싶을 때 세션스코프를 사용한다.
//어플리케이션 스코프를 사용하면 하나의 저장공간에 저장이 되어, c1,c2의 클라이언트가 값을 넣으면 두 군데가 같은 결과가 나오고
//리퀘스트 스코프로 하게 되면 응답을 하고 나면 저장 공간이 사라져서 값을 받아 올수가 없다.
request.setCharacterEncoding("utf-8");
String text = request.getParameter("text");
//text를 session scope에 설정
HttpSession session = request.getSession();
//같은 타입의 데이터를 들어 오는 만큼 넣어 줄 것이기 때문에 ArrayList를 사용한다. (ArrayList를 사용안하면 먼저 들어온 값은 사라진다.)
//기존의 list가 있으면 list값을 받아오고 없다면 새로 생성해서 값을 넣어 줘라.
ArrayList list = (ArrayList)session.getAttribute("list");
if(list==null){
list = new ArrayList();
session.setAttribute("list", list);
}
list.add(text);
response.sendRedirect("/myweb/session/write_form.html");
}
}
package servlet.session;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class ShowServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public ShowServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//Session scope에 지금까지 저장된 클라이언트가 보낸 text들을 출력
HttpSession session = request.getSession();
String url = null;
ArrayList list = (ArrayList)session.getAttribute("list");
//출력
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("<html><body>");
out.println("지금까지 입력된 값<br>");
for(int i=0;i<list.size();i++){
out.println((i+1)+" : "+list.get(i)+"<br>");
}
out.println("</body></html>");
}
}
WebContent
file : session
html : write_write_form.html
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="/myweb/session_write" method="post">
<input type="text" name="text" size="50">
<input type="submit" value="글전송">
<p>
<a href="/myweb/session_show">입력한 글들 출력</a>
</form>
</body>
</html>
- 실행 결과
* 한컴퓨터에서 웹프라우저를 여러개 띄워도 jSessionId가 같은 값이 들어가서 동일한 결과가 나온다.(chrom을 띄우면 프로세스가 달라서 값이 나온다)
- JsessionId값 받아오는 ShowServlet test
package servlet.session;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class ShowServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public ShowServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//Session scope에 지금까지 저장된 클라이언트가 보낸 text들을 출력
HttpSession session = request.getSession();
String url = null;
ArrayList list = (ArrayList)session.getAttribute("list");
//출력
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("<html><body>");
String jSessionID = session.getId();
out.println("JSESSIONID : "+jSessionID+"<br>");
out.println("지금까지 입력된 값<br>");
for(int i=0;i<list.size();i++){
out.println((i+1)+" : "+list.get(i)+"<br>");
}
out.println("</body></html>");
}
}
- 세션값 삭제하기
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="/myweb/session_write" method="post">
<input type="text" name="text" size="50">
<input type="submit" value="글전송">
<p>
<a href="/myweb/session_show">입력한 글들 출력</a>
</form>
</body>
</html>
package servlet.session;
import java.io.IOException;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class WriteServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public WriteServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//클라이언트 별로 저장 하는 곳을 분리하고 싶을 때 세션스코프를 사용한다.
//어플리케이션 스코프를 사용하면 하나의 저장공간에 저장이 되어, c1,c2의 클라이언트가 값을 넣으면 두 군데가 같은 결과가 나오고
//리퀘스트 스코프로 하게 되면 응답을 하고 나면 저장 공간이 사라져서 값을 받아 올수가 없다.
request.setCharacterEncoding("utf-8");
String text = request.getParameter("text");
//text를 session scope에 설정
HttpSession session = request.getSession();
//session.setAttribute("text", text); // (ArrayList를 사용안하면 먼저 들어온 값은 사라진다.)
//같은 타입의 데이터를 들어 오는 만큼 넣어 줄 것이기 때문에 ArrayList를 사용한다.
//기존의 list가 있으면 list값을 받아오고 없다면 새로 생성해서 값을 넣어 줘라.
ArrayList list = (ArrayList)session.getAttribute("list");
if(list==null){
list = new ArrayList();
session.setAttribute("list", list);
}
list.add(text);
response.sendRedirect("/myweb/session/write_form.html");
}
}
package servlet.session;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class ShowServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public ShowServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//Session scope에 지금까지 저장된 클라이언트가 보낸 text들을 출력
HttpSession session = request.getSession();
String url = null;
ArrayList list = (ArrayList)session.getAttribute("list");
if(list==null){
response.sendRedirect("/myweb/session/write_form.html");
return;
}
//출력
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("<html><body>");
String jSessionID = session.getId();
out.println("JSESSIONID : "+jSessionID+"<br>");
out.println("지금까지 입력된 값<br>");
for(int i=0;i<list.size();i++){
out.println((i+1)+" : "+list.get(i)+"<br>");
}
out.println("<p><a href='/myweb/session_remove'>모든 입력글 삭제</a>");
out.println("</body></html>");
}
}
package servlet.session;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* Servlet implementation class RemoveServlet
*/
public class RemoveServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public RemoveServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//Session scope의 list 삭제
HttpSession session = request.getSession();
session.removeAttribute("list");
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("<html><body>");
out.println("<a href='/myweb/session/write_form.html'>폼가기</a><br>");
out.println("<p><a href='/myweb/session_show'>입력한 글 보기</a>");
out.println("</body></html>");
}
}
- 결과
- 기존에 입력된 데이터에서 모든 입력글 삭제를 누르면 attribute가 지워지고 다시 폼 가기 가서 값을 입력하게 되면 새로 입력한 attribute 값만 들어가는 것을 볼 수 있다.
'프로그래밍 > JSP Programming' 카테고리의 다른 글
2012-4-27 eclipse와 DB연결해서 Driver Loading 시키기[실습] (0) | 2012.04.27 |
---|---|
eclipse에서 DB연동하기 (0) | 2012.04.27 |
2012-4-27 session이용하여 정보 유지하기 (0) | 2012.04.27 |
2012-4-27 cookie정보 관리(한글처리 및 필요한 키 정보 뽑기), SetCookieServlet2[실습] (0) | 2012.04.27 |
2012-4-27 cookie 사용 (0) | 2012.04.27 |