Enumeration : 데이터 가져올때 쓰는데 복잡하고 하나하나 설정해줘야해서 잘 안씀
Map : Set -> Iterator로 가져올 수 있어서 쉽게 가져옴 개꿀띠
Enumeration으로 가져오는 법
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<form action="EnumerationServlet">
이름 <input type="text" name="userName"><br>
나이 <input type="text" name="userAge"><br>
<input type="submit" value="전송"><br>
</form>
</body>
</html>
package step1;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class EnumerationServlet
*/
@WebServlet("/EnumerationServlet")
public class EnumerationServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public EnumerationServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
Enumeration e = request.getParameterNames();
Enumeration<String> em = request.getParameterNames();
while(e.hasMoreElements()) {
String info = request.getParameter(e.nextElement().toString());
out.print(info+"<br>");
out.print(em.nextElement().toString()+"<br>");
out.close();
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
Map으로 가져오는 법
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<form name="friendForm" method="get" action="MapServlet">
<input type="radio" name="gender" value="남">남<br>
<input type="radio" name="gender" value="여">여<br>
기수 <input type="text" name="kosta"><br>
<input type="checkbox" name="friend" value="b">홍길동<br>
<input type="checkbox" name="friend" value="lee">장동건<br>
<input type="checkbox" name="friend" value="m">마동석<br>
<input type="checkbox" name="friend" value="pizza">피자<br>
<input type="checkbox" name="friend" value="flower">꽃등심<br>
<input type="checkbox" name="friend" value="fish">다금바리<br>
<input type="submit" value="전송">
</form>
</body>
</html>
package step2;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class MapServlet
*/
@WebServlet("/MapServlet")
public class MapServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public MapServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
//요청시 넘어온 데이터를 name, value 형태로 가져옴
//String key, String[] value
Map<String, String[]> map = request.getParameterMap();
//Map으로부터 key들을 반환받는 keyset();
//keyset()은 set을 반환하므로 iterator()를 열거할 수 있다
//Iterator()을 수행하며 next()를 호출하면 key가 반환되고
//이는 html name이다, name을 map에 get(name)하면 value가 반환되는데
//이 value의 타입은 String[]이므로
//for loop를 수행하고 name과 value를 출력하면 된다
Set<String> set = map.keySet();
Iterator<String> it = set.iterator();
String str = "";
String str1[];
while(it.hasNext()) {
str=it.next();
str1 = map.get(str);
for(String s : str1) {
out.print(s+"<br>");
}
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
<라이프 사이클>
init()
생성자 같은 역할
맨 처음 서블릿이 객체 생성될 때 한번만 실행됨
초기화 목적으로 사용
destroy()
서블릿 객체가 없어질 때 한 번만 실행됨
마무리 작업, 메모리 해제해줄 때, 정리할 때 사용
service()
서블릿이 호출될 때마다 계속 실행됨
직접적인 작업을 해줄 때 사용
package step3;
import java.io.IOException;
import javax.servlet.ServletConfig;
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("/LifeServlet")
public class LifeServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
public void init(ServletConfig config) throws ServletException {
//서블릿 객체는 1개 생성됨
//서블릿 객체 생성 이후에 한번 호출
System.out.println("init() call...");
}
private int count;
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println(++count+"service call....");
}
@Override
public void destroy() {
//server를 stop할 경우 싱행됨
//destroy() 서블릿 객체 해제 직전 호출
System.out.println("destroy() call...");
}
}
ServletContext
서블릿과 컨테이너의 연동
서블릿끼리 데이터를 공유하기 위해 사용
컨테이너마다 하나의 서블릿컨텍스트가 생성되고 종료시 소멸
Map형식으로 데이터가 들어갑니다~
dto
package vo;
public class ProductVo {
private String id;
private String name;
private int price;
public ProductVo(String id, String name, int price) {
super();
this.id = id;
this.name = name;
this.price = price;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
@Override
public String toString() {
return "ProductVo [id=" + id + ", name=" + name + ", price=" + price + "]";
}
}
Set
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
ServletContext context = this.getServletContext(); //데이터를 공유하는 공간
context.setAttribute("product", new ProductVo("nexus","넥서스s",1234));
out.print("ServletContext에 data setting...");
out.print(this.getServletName()+"ServletContext에 vo setting"+"<hr>");
out.print("<a href=GetProductServlet> GetProductServlet로 이동 </a>");
out.close();
}
Get
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
ServletContext context = this.getServletContext(); //데이터를 공유하는 공간
ProductVo vo = (ProductVo)context.getAttribute("product");
out.print(vo);
out.print(this.getServletName()+"ServletContext로부터 vo getting");
out.print("<hr>");
out.print("아이디 :"+vo.getId()+"<hr>"+"이름"+vo.getName()+"<hr>"+"가격"+vo.getPrice());
out.close();
}
주는애
private List list = new ArrayList();
@Override
public void init() throws ServletException {
ServletContext context = this.getServletContext();
//list는 주소값을 저장하고 있으므로 새로운 사람 추가는 list.add()로 한다
//결국 list가 가리키는 주소값은 고정이지만 list의 객체에는 계속 추가된 인원이 증가한다
context.setAttribute("table", list);
System.out.println("init() list add");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
out.print(request.getParameter("nick")+"님 입장 환영합니다"+"<hr>");
list.add(new PersonVo(request.getParameter("id"),request.getParameter("nick")));
out.print("<a href=ListViewServlet>입장 명단 확인</a>");
out.close();
}
받는애
private List<PersonVo> list;
@Override
public void init() throws ServletException {
ServletContext context = this.getServletContext();
list = (ArrayList)context.getAttribute("table"); //Object타입을 return해서 형번환 해주는 것
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
if(list==null) {
out.print("입장한 사람이 아무도 없습니다");
} else {
int count = 1;
out.print("<table border=1>");
out.print("<td>인원 수 </td> <td>아이디 </td> <td>닉네임 </td>");
for(PersonVo p : list) {
out.print("<tr>");
out.print("<td>"+count+"</td>");
out.print("<td>"+p.getId()+"</td>");
out.print("<td>"+p.getNick()+"</td>");
out.print("</tr>");
count++;
}
out.print("</table>");
}
}
http는 클라이언트 정보를 저장할 수 있는 능력이 없다
그래서 우리는 데이터를 저장할 수 있는 데이터 저장 공간을 쓰게 되는데....
<데이터 저장 공간>
Request
응답와따가따하는애 요청마다 하나씩, 서버가 응답해서 클라이언트한테 가면 소멸됨
Session
어디든지 갈 수 있는 애(클라이언트마다 하나, 많은 정보를 담으면 서버 과부하 올 수 있음)
대표적인 거 로그인 로그아웃
Application
서버마다 한개씩 있는 애 얘는 데이터 전체 총괄함
pageContext
한 페이지안에서만 동작하는 애
유효 범위가 서로 달라서 그때그때 맞춰서 사용하면 됨!
유효범위가 넓은 세션이 제일 편할 거 같지만...클라이언트마다 하나씩 가지고 있는 저장 공간이라
클라이언트가 많아지면 서버 과부하가 오기 때문에
최대한 효율적으로 사용하는 것이 좋다, 세션 객체에 담아온다면 데이터 쓸모가 없어지면 바로세션에서 삭제하는 식으로...
'국비 학원 가서 개발새발' 카테고리의 다른 글
국비학원 29일차) mvc (0) | 2022.11.09 |
---|---|
국비학원 28일차) ajax (0) | 2022.11.08 |
국비학원 25일차) JSP & 서블릿 (0) | 2022.11.03 |
국비학원 24일차) 자바스크립트 (0) | 2022.11.02 |
국비학원 23일차) html/css (0) | 2022.11.02 |