index html이 열리는 이유는 기본서블렛때문이라고 했따
servlet 으로 json데이터 만들기
일괄적으로 데이터 만들떄 jackson 어쩌고사용함
JDBC 에서 resultSet이랑 statement만드는 부분에서 좀 번거로움
항상 중심엔 JAVA가 있음. 왜냐면 전체로 봤을때 화면단은 입출력에 불과하고 DB는 결국은 저장소..storage..
사용자가 보는 뷰단은 결국은 전체 아키텍쳐에서 입출력에 불과한거란 말임
그 사이에 java 가 중간다리역할을 하는거임
view에서 이루어 지는 데이터 속성이 web이라고 치면 들어가는 언어는 html;이 되는거임
getparameter로 구해서 set id // // getString(id)(resultSet)로 setid
*서블릿에서 화면만드는게 버거워지니까 jsp나온거임
실제로 json데이터를어떻게 자바로 매핑시키는지... 에 대해서 얘기할거임
데이터는 키 : 밸류 (ex 수학 : 40점 ) 형태임. java은 변수명에 할당하는형식. a = 40 이런 형태.. 그래서 변수명을 잘 지어야함. 다시말해 변수명이 Key가 된다.
그럼 json은? 자원을 줄이기 위해서 key : value형탱를 그대로 .. 속성명 : value 이런식으로 한다.
자바에서 MemberVO라는 Class가 있을때, String id="mini"가 들어가잇다고 치자
이건 json 으로 바꾸면
{id:"mani"} 로 표현한다.
이걸 매핑한다라고 한다.
자바의 변수= 값은 json에서는 property: value 가 된다
이제 집합체가 문제임sdfdsfs
배열의 형태( Vector)
json 의 어레이 형태는 잭슨형을 거치면 Array/List가 된다 cla.
서블릿만들거임
잭슨이 겟메서드를 씀
리플렉션을 이용할때 겟메서드와 셋메서드를 이용하고..????
???
일단 내보낼 데이터를 만들어야함
package com.json.to;
import java.io.IOException;
import java.io.PrintWriter;
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.fasterxml.jackson.databind.ObjectMapper;
@WebServlet("/classToJson")
public class ClassToJsonServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Data data = new Data(); // new Data () 하게되면 그 안에 String message .. 그 안에 "sinchucknyun.."이라고 들어가잇는거임
//json으로 된다면,, class니까 {} 생기고 그 안에 message : sinchuk 이라고 들어갈거라고 예상됨 (화이트박스테스으)
//이제 이걸 내보내야하는데
ObjectMapper mapper = new ObjectMapper(); // ObjectMapper 가 변환자임.. dataMap.put() 을 {score:{kor:95,math:90...} 으로 바꾸는
//잭슨패키지에 잇는 녀석임
//여기서 붕어빵은 mapper임.. 얘가 실제로 일을 함
//mapper가 java의 Object를 json의 String형태로 만들어줄거임
//줄때 야 이거 json이야 라고 말해줘야하므로 컨텐츠타입 정해줌
response.setContentType("application/json;charset=utf-8");
//주의! writer꺼내기 전에 contenttype말해줘야함.. 헤더먼저 세팅후 라이터 가져오기
PrintWriter out = response.getWriter();//29 번줄이랑 순서바뀌면 안됨!
out.println(mapper.writeValueAsString(data));//json형태의 STring으로 만들어짐 //하나씩 꺼내서 json데이터에 넣는게 이 한줄로 끝남
out.close();
}
}
class Data{
String message="신축년입니다.";
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
서버의 web.xml은 모든 프젝에 적용
각각의 프젝의 web.xml은 각각의 프젝에 적용되는 WAS의 행위들을 정의
프젝의 web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app>
<filter>
<filter-name>setCharacterEncodingFilter</filter-name>
<filter-class>
org.apache.catalina.filters.SetCharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>setCharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
여기서 .. 사용자가 보낸 메세지를 좀 바꾸고 싶네?
사용자가 보낸 메세지를 받아서 저 메세지의 밸류를 바꾸려고 한다...? 데이터는 브라우저가 받는건 서버임
브라우저에서 사용자가 준 데이터를 받아서 json데이터에 데이터를 풀려고 하는데
지금 뭘로보내? 주소줄임!
그래서 우리가 그녀석을 컨트롤러라고 함.
그래서 서블릿을 화면제어라는 뜻의 컨트롤러... 그게 MVC 패턴
암튼 저 안녕하십니까를 뭘로받을거임? 이름... (항상 보내는 데이터에는 이름이있다)
?뒤에 써서 보내는걸 파라미터형식이라고 함
이제 주는놈 받는놈 처리하는놈있으니까 나오게되어있따. 이게 ajax 기본임
근데 사용자가 저 url쓰게 만들거임 ? 이렇게 보여줄거임?? no ! >> 예쁜 UI 만들어서 보여줘야하므로 이제 jQuery가 필요한거임
그럼 이제 list를 만들면 어떻게 될까
간접적으로 class를 하나 만들건데 패키지는 member vo
package com.json.to;
public class MemberVO {
private String id;
private String pwd;
private String phone;
private String email;
public MemberVO() {}
public MemberVO(String id, String pwd, String phone, String email) {
super();
this.id = id;
this.pwd = pwd;
this.phone = phone;
this.email = email;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
VO 는 왜만들어? DB의 데이터를 자바로 변환시켜야하는데 그걸 하기위한 바구니같은애임. 그릇같은애
그래서 VO 는 DB에 데이터를 가져오거나 넣어야할떄 그 데이터의 갯수나 종류나 타입에 모자름이 없이 만들어야
CRUD 가 가능
db와 java 사이에 왓다갔다하는 객체임
DB 에서 내가 필요한 정보 단위로 만드는거임 테이블단위가 아니라..
여러개 테이블을 조인해서 가져와야하는 데이터가 있따면 테이블 기준이 아니라 데이터 셋을 기준으로 잡아야함
그것이 정규화로 잘라져있던 하나로 되어잇던 간에... 테이블이 몇개건간에 결국은 DB에서 가져와야 하는거니까
변수명의 이름을 컬럼명으로 맞춰야 어떤데이터가 어떤데이터인지 알 수 있다.
그래서 vo객체의 변수명은 컬럼명에 맞춰라
VO는 껍데기이고 알맹이는 DB의 데이터들인거임
이걸 안맞추니까 mapper에 map을 맞춰야하게되는거임
그니까 DB에 id,pwd,phone,email이라는 컬럼이 있다는 거임
이제 list 형태로 만들거임
package com.json.to;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
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.fasterxml.jackson.databind.ObjectMapper;
import com.json.dto.MemberVO;
/**
* Servlet implementation class ListToJsonServlet
*/
@WebServlet("/ListToJson")
public class ListToJsonServlet extends HttpServlet {
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
List<MemberVO> memberList = new ArrayList<MemberVO>();//내보낼 대상. 처리의 대상이기때문에 먼저 만들어놓은거임
//처리단
memberList.add(new MemberVO("mimi","mimi","mimi","mimi"));
memberList.add(new MemberVO("mimi","mimi","mimi","mimi"));
memberList.add(new MemberVO("mimi","mimi","mimi","mimi"));
memberList.add(new MemberVO("mimi","mimi","mimi","mimi"));
//출력 은 동일하다 (복붙)
ObjectMapper mapper = new ObjectMapper(); // ObjectMapper 가 변환자임.. dataMap.put() 을 {score:{kor:95,math:90...} 으로 바꾸는
//잭슨패키지에 잇는 녀석임
//여기서 붕어빵은 mapper임.. 얘가 실제로 일을 함
//mapper가 java의 Object를 json의 String형태로 만들어줄거임
//줄때 야 이거 json이야 라고 말해줘야하므로 컨텐츠타입 정해줌
response.setContentType("application/json;charset=utf-8");
//주의! writer꺼내기 전에 contenttype말해줘야함.. 헤더먼저 세팅후 라이터 가져오기
PrintWriter out = response.getWriter();//29 번줄이랑 순서바뀌면 안됨!
out.println(mapper.writeValueAsString(memberList));//json형태의 STring으로 만들어짐 //하나씩 꺼내서 json데이터에 넣는게 이 한줄로 끝남
out.close();
}
}
이제 맵핑을 해보자
package com.json.to;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;
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.fasterxml.jackson.databind.ObjectMapper;
import com.json.dto.MemberVO;
/**
* Servlet implementation class MapToJsonServlet
*/
@WebServlet("/MapToJson")
public class MapToJsonServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//일단 맵이필요할거니까 맵을 만들건데
Map<String, MemberVO> dataMap = new HashMap<String, MemberVO>();
dataMap.put("member1", new MemberVO("mimi","mimi","mimi","mimi"));
dataMap.put("member2", new MemberVO("mimi","mimi","mimi","mimi"));
dataMap.put("member3", new MemberVO("mimi","mimi","mimi","mimi"));
//json 으로 어떻게 나올까? {member1 : {id : "mimi", pwd : "mimi"....} ,member2 : {} , member3 : {}}
ObjectMapper mapper = new ObjectMapper(); // ObjectMapper 가 변환자임.. dataMap.put() 을 {score:{kor:95,math:90...} 으로 바꾸는
//잭슨패키지에 잇는 녀석임
//여기서 붕어빵은 mapper임.. 얘가 실제로 일을 함
//mapper가 java의 Object를 json의 String형태로 만들어줄거임
//줄때 야 이거 json이야 라고 말해줘야하므로 컨텐츠타입 정해줌
response.setContentType("application/json;charset=utf-8");
//주의! writer꺼내기 전에 contenttype말해줘야함.. 헤더먼저 세팅후 라이터 가져오기
PrintWriter out = response.getWriter();//29 번줄이랑 순서바뀌면 안됨!
out.println(mapper.writeValueAsString(dataMap));//json형태의 STring으로 만들어짐 //하나씩 꺼내서 json데이터에 넣는게 이 한줄로 끝남
out.close();
}
}
자꾸 출력부분이 중복된다?> 메서드로 빼자> 내일할거임
내일은 json 구조를 보고 그걸 받을수잇는 객체를 만들거임(오늘이랑 반대)
마지막에 자유게시판 (CRUD) + 댓글 + 파일업로드. 다운로드
어떤 기능을 만들 때, 항상 give and take를 생각하기
프로세스상에 꼭 필요한건 아니지만 있으면 좋은거 >> Utility
package com.json.to;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
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.fasterxml.jackson.databind.ObjectMapper;
import com.json.dto.MemberVO;
import com.json.util.JsonResolver;
/**
* Servlet implementation class ListToJsonServlet
*/
@WebServlet("/ListToJson")
public class ListToJsonServlet extends HttpServlet {
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
List<MemberVO> memberList = new ArrayList<MemberVO>();//내보낼 대상. 처리의 대상이기때문에 먼저 만들어놓은거임
//처리단
memberList.add(new MemberVO("mimi","mimi","mimi","mimi"));
memberList.add(new MemberVO("mimi","mimi","mimi","mimi"));
memberList.add(new MemberVO("mimi","mimi","mimi","mimi"));
memberList.add(new MemberVO("mimi","mimi","mimi","mimi"));
//출력 은 동일하다 (복붙)
try {
JsonResolver.view(response, memberList);
} catch (Exception e) {
e.printStackTrace();
}
}
}
package com.json.to;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;
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.fasterxml.jackson.databind.ObjectMapper;
import com.json.dto.MemberVO;
/**
* Servlet implementation class MapToJsonServlet
*/
@WebServlet("/MapToJson")
public class MapToJsonServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//일단 맵이필요할거니까 맵을 만들건데
Map<String, MemberVO> dataMap = new HashMap<String, MemberVO>();
dataMap.put("member1", new MemberVO("mimi","mimi","mimi","mimi"));
dataMap.put("member2", new MemberVO("mimi","mimi","mimi","mimi"));
dataMap.put("member3", new MemberVO("mimi","mimi","mimi","mimi"));
//json 으로 어떻게 나올까? {member1 : {id : "mimi", pwd : "mimi"....} ,member2 : {} , member3 : {}}
ObjectMapper mapper = new ObjectMapper(); // ObjectMapper 가 변환자임.. dataMap.put() 을 {score:{kor:95,math:90...} 으로 바꾸는
//잭슨패키지에 잇는 녀석임
//여기서 붕어빵은 mapper임.. 얘가 실제로 일을 함
//mapper가 java의 Object를 json의 String형태로 만들어줄거임
//줄때 야 이거 json이야 라고 말해줘야하므로 컨텐츠타입 정해줌
response.setContentType("application/json;charset=utf-8");
//주의! writer꺼내기 전에 contenttype말해줘야함.. 헤더먼저 세팅후 라이터 가져오기
PrintWriter out = response.getWriter();//29 번줄이랑 순서바뀌면 안됨!
out.println(mapper.writeValueAsString(dataMap));//json형태의 STring으로 만들어짐 //하나씩 꺼내서 json데이터에 넣는게 이 한줄로 끝남
out.close();
}
}