T.김동식
json 타입 객체 출력하기
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isELIgnored="false" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<title>JSON 테스트</title>
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script>
//click, Trigger 연쇄작용
$(function() {
$("#checkJson").click(function() {
var jsonStr = '{"name": ["홍길동", "이순신", "임꺽정"] }';
//JSON.parse()
//JSON 문자열을 받아 js 객체를 반환
//반환된 데이터는 . 나 []로 접근할 수 있다.
var jsonInfo = JSON.parse(jsonStr);
var output ="회원 이름<br>";
output += "--------------------<br>";
for(var i in jsonInfo.name) {output += jsonInfo.name[i]+"<br>";}
$("#output").html(output);
});
});
</script>
</head>
<body>
<a id="checkJson" style="cursor:pointer">출력</a><br><br>
<div id="output"></div>
</body>
</html>

json lib
json을 활용할 수 있도록 도와준다.
https://code.google.com/archive/p/json-simple/downloads
Google Code Archive - Long-term storage for Google Code Project Hosting.
code.google.com
ajax로 json타입 객체 서버로 받기
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isELIgnored="false" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="contextPath" value="${pageContext.request.contextPath}" />
<!DOCTYPE html>
<html>
<head>
<title>JSON ajax 연습</title>
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script>
$(function() {
$("#checkJson").click(function() {
var _jsonInfo ='{"name":"박지성","age":"25","gender":"남자","nickname":"날센돌이"}';
//Asynchronous JavaScript And XML
//서버와 통신을 목적
$.ajax({
type:"post",
async:false,
url:"${contextPath}/json",
data : {jsonInfo: _jsonInfo},
success:function (data,textStatus){
},
error:function(data,textStatus){
alert("에러가 발생했습니다.");
},
complete:function(data,textStatus){
}
});
});
});
</script>
</head>
<body>
<a id="checkJson" style="cursor:pointer">전송</a><br><br>
<div id="output"></div>
</body>
</html>
package sec03.ex01;
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 org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
@WebServlet("/json")
public class JsonServlet1 extends HttpServlet {
private static final long serialVersionUID = 1L;
public JsonServlet1() {}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doHandle(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doHandle(request, response);
}
protected void doHandle(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("text/html; charset=utf-8");
String jsonInfo = request.getParameter("jsonInfo");
try {
//JSONParser JSON데이터를 넣어 JSON Object 로 만들어 줌
JSONParser jsonParser = new JSONParser();
JSONObject jsonObject = (JSONObject) jsonParser.parse(jsonInfo);
//console에 출력
System.out.println("* 회원 정보*");
System.out.println(jsonObject.get("name"));
System.out.println(jsonObject.get("age"));
System.out.println(jsonObject.get("gender"));
System.out.println(jsonObject.get("nickname"));
} catch (Exception e) {e.printStackTrace();}
}
}

MVC 방식
모델2 동작방식
객체지향 프로그래밍에서 각각의 기능을 모듈화(분리)해서 개발하는 것과 같은 원리
웹애플리케이션의 각기능을 분리해서 구현
각부분을 조립하면 전체활용이 가능해 개발 효율성이 높다.
유지보수/코드재활용성이 높다.
데이터베이스 - 로직처리(DATA MODEL) - 요청처리(CONTROLLER)/화면기능(VIEW) - 결과출력
회원가입/조회/수정/삭제
package sec02.ex02;
import java.sql.Date;
public class MemberVO {
private String id;
private String pwd;
private String name;
private String email;
private Date joinDate;
public MemberVO() {
System.out.println("MemberVO");
}
public MemberVO(String id, String pwd, String name, String email) {
super();
this.id = id;
this.pwd = pwd;
this.name = name;
this.email = email;
}
public MemberVO(String id, String pwd, String name, String email, Date joinDate) {
super();
this.id = id;
this.pwd = pwd;
this.name = name;
this.email = email;
this.joinDate = joinDate;
}
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 getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Date getJoinDate() {
return joinDate;
}
public void setJoinDate(Date joinDate) {
this.joinDate = joinDate;
}
}
package sec02.ex02;
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
public class MemberDAO {
private DataSource dataFactory;
private Connection conn;
private PreparedStatement pstmt;
public MemberDAO() {
try {
Context ctx = new InitialContext();
Context envContext = (Context) ctx.lookup("java:/comp/env");
dataFactory = (DataSource) envContext.lookup("jdbc/oracle");
} catch (Exception e) {
e.printStackTrace();
}
}
public List<MemberVO> listMembers() {
List<MemberVO> membersList = new ArrayList();
try {
conn = dataFactory.getConnection();
String query = "select * from t_member order by joinDate desc";
System.out.println(query);
pstmt = conn.prepareStatement(query);
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
String id = rs.getString("id");
String pwd = rs.getString("pwd");
String name = rs.getString("name");
String email = rs.getString("email");
Date joinDate = rs.getDate("joinDate");
MemberVO memberVO = new MemberVO(id, pwd, name, email, joinDate);
membersList.add(memberVO);
}
rs.close();
pstmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
return membersList;
}
public void addMember(MemberVO m) {
try {
conn = dataFactory.getConnection();
String id = m.getId();
String pwd = m.getPwd();
String name = m.getName();
String email = m.getEmail();
String query = "INSERT INTO t_member(id, pwd, name, email)" + " VALUES(?, ? ,? ,?)";
System.out.println(query);
pstmt = conn.prepareStatement(query);
pstmt.setString(1, id);
pstmt.setString(2, pwd);
pstmt.setString(3, name);
pstmt.setString(4, email);
pstmt.executeUpdate();
pstmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
public MemberVO findMember(String _id) {//id값을 가져와 findMember.
MemberVO memInfo = null;//회원객체 초기화
try {
conn = dataFactory.getConnection();//dataFactory가 나타내는 데이터와 연결
//sql문 매개 변수화
String query = "select * from t_member where id=?";
//prepareStatement 매개변수화된 sql문을 데이터베이스로 보내기전 준비된 개체로 만듦
pstmt = conn.prepareStatement(query);
pstmt.setString(1, _id);//1째 자리에 매개변수 _id값을 인덱싱한다.
//ResultSet 데이터베이스 결과 집합을 나타내는 데이터 테이블
//execute(실행하다) INSERT, UPDATE 또는 DELETE수행
//executeQuery, pstmt쿼리를 실행 후 개체 반환
ResultSet rs = pstmt.executeQuery();
rs.next();// next() 첫호출을 첫행, n호출을 n행으로 만드는 식.
String id = rs.getString("id");
String pwd = rs.getString("pwd");
String name = rs.getString("name");
String email = rs.getString("email");
Date joinDate = rs.getDate("joinDate");
memInfo = new MemberVO(id, pwd, name, email, joinDate);//위 회원정보를 가진 memInfo
pstmt.close();//sql문개체 닫기
conn.close();//데이터와 연결 닫기
} catch (Exception e) {e.printStackTrace();}
return memInfo;//memInfo 반환
}
//MemberVO memberVO = new MemberVO(id, pwd, name, email)
//생성된 회원정보 memberVO를 가져와 정보를 추출하고
public void modMember(MemberVO memberVO) {
String id = memberVO.getId();
String pwd = memberVO.getPwd();
String name = memberVO.getName();
String email = memberVO.getEmail();
try {
conn = dataFactory.getConnection();//dataFactory가 나타내는 데이터와 연결
//sql문 매개 변수화
String query = "update t_member set pwd=?,name=?,email=? where id=?";
System.out.println(query);
//prepareStatement 매개변수화된 sql문을 데이터베이스로 보내기전 준비된 개체로 만듦
pstmt = conn.prepareStatement(query);
//n째 자리에 매개변수 n값을 인덱싱한다.
pstmt.setString(1, pwd);
pstmt.setString(2, name);
pstmt.setString(3, email);
pstmt.setString(4, id);
//execute(실행하다) INSERT, UPDATE 또는 DELETE수행
pstmt.executeUpdate();
pstmt.close();//sql문개체 닫기
conn.close();//데이터와 연결 닫기
} catch (Exception e) {e.printStackTrace();}
}
//memberDAO.delMember(id);
public void delMember(String id) {
try {
conn = dataFactory.getConnection();//dataFactory가 나타내는 데이터와 연결
//sql문 매개 변수화
String query = "delete from t_member where id=?";
System.out.println(query);
//prepareStatement 매개변수화된 sql문을 데이터베이스로 보내기전 준비된 개체로 만듦
pstmt = conn.prepareStatement(query);
pstmt.setString(1,id);//n째 자리에 매개변수 n값을 인덱싱한다.
//execute(실행하다) INSERT, UPDATE 또는 DELETE수행
pstmt.executeUpdate();
} catch (Exception e) {e.printStackTrace();}
}
}
package sec02.ex02;
import java.io.IOException;
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;
@WebServlet("/member/*")
public class MemberController extends HttpServlet {
private static final long serialVersionUID = 1L;
MemberDAO memberDAO;
public void init() throws ServletException {
memberDAO = new MemberDAO();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doHandle(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doHandle(request, response);
}
private void doHandle(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String nextPage = null;
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
String action = request.getPathInfo();//url과 관련된 추가경로정보 반환
System.out.println("action:" + action);
//경우의 수
//action:/listMembers.do
//action:/addMember.do
//action:/memberForm.do
//action:/modMemberForm.do
//action:/delMember.do
//url정보가 없거나 listMembers를 호출시
if (action == null || action.equals("/listMembers.do")) {
List<MemberVO> membersList = memberDAO.listMembers();
request.setAttribute("membersList", membersList);
nextPage = "/test03/listMembers.jsp";//바로 회원정보페이지로 이동할것.
//url정보가 addMember 일때
} else if (action.equals("/addMember.do")) {
String id = request.getParameter("id");
String pwd = request.getParameter("pwd");
String name = request.getParameter("name");
String email = request.getParameter("email");
MemberVO memberVO = new MemberVO(id, pwd, name, email);//새로운 객체를 만들어
memberDAO.addMember(memberVO);//addMember한뒤
request.setAttribute("msg", "addMember");//결과 alert할 key값 msg을 addMember로 저장
nextPage = "/member/listMembers.do";//회원정보페이지로 이동할것.
//url정보가 memberForm일때
} else if (action.equals("/memberForm.do")) {
nextPage = "/test03/memberForm.jsp";//회원가입페이지로 이동할것.
//url정보가 modMemberForm일때
}else if(action.equals("/modMemberForm.do")){
String id=request.getParameter("id");//수정버튼 url의 id 값을 가져와
//findMember(String _id)이후 return memInfo;
//반환된 회원정보를 memInfo에 저장
MemberVO memInfo = memberDAO.findMember(id);
request.setAttribute("memInfo", memInfo);//memInfo를 key값으로 회원정보 set
nextPage="/test03/modMemberForm.jsp";//회원정보를 가지고 회원수정페이지로 이동할것
//url정보가 modMember일때
}else if(action.equals("/modMember.do")){
String id=request.getParameter("id");
String pwd=request.getParameter("pwd");
String name= request.getParameter("name");
String email= request.getParameter("email");
MemberVO memberVO = new MemberVO(id, pwd, name, email);//회원정보를 가져와 객체생성
memberDAO.modMember(memberVO);//회원정보를 가지고 modMember()를 수행
request.setAttribute("msg", "modified");//결과 alert할 key값 msg을 modified로 저장
nextPage="/member/listMembers.do";//회원정보페이지로 이동할것.
//url정보가 delMember일때
}else if(action.equals("/delMember.do")){
String id=request.getParameter("id");
memberDAO.delMember(id);//id값을 가져와 delMember()수행
request.setAttribute("msg", "deleted");//결과 alert할 key값 msg을 deleted로 저장
nextPage="/member/listMembers.do";//회원정보페이지로 이동할것.
//그 외의 호출일 경우
}else {
List<MemberVO> membersList = memberDAO.listMembers();
request.setAttribute("membersList", membersList);
nextPage = "/test03/listMembers.jsp";//회원정보페이지로 이동할것.
}
//위 각 상황에 맞는 url nextPage정보를 가져와 forward할것.
RequestDispatcher dispatch = request.getRequestDispatcher(nextPage);
dispatch.forward(request, response);
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
isELIgnored="false" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="contextPath" value="${pageContext.request.contextPath}" />
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원 가입창</title>
<body>
<form method="post" action="${contextPath}/member/addMember.do">
<h1 style="text-align:center">회원 가입창</h1>
<table align="center">
<tr>
<td width="200"><p align="right">아이디</td>
<td width="400"><input type="text" name="id"></td>
</tr>
<tr>
<td width="200"><p align="right">비밀번호</td>
<td width="400"><input type="password" name="pwd"></td>
</tr>
<tr>
<td width="200"><p align="right">이름</td>
<td width="400"><p><input type="text" name="name"></td>
</tr>
<tr>
<td width="200"><p align="right">이메일</td>
<td width="400"><p><input type="text" name="email"></td>
</tr>
<tr>
<td width="200"><p> </p></td>
<td width="400">
<input type="submit" value="가입하기">
<input type="reset" value="다시입력">
</td>
</tr>
</table>
</form>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
isELIgnored="false" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="contextPath" value="${pageContext.request.contextPath}" />
<%request.setCharacterEncoding("UTF-8");%>
<head>
<meta charset="UTF-8">
<title>회원 정보 수정창</title>
<style>
.cls1 {
font-size:40px;
text-align:center;
}
</style>
</head>
<body>
<h1 class="cls1">회원 정보 수정창</h1>
<form method="post" action="${contextPath}/member/modMember.do?id=${memInfo.id}">
<table align="center" >
<tr>
<td width="200"><p align="right" >아이디</td>
<!-- return memInfo; 반환된 정보 출력 -->
<td width="400"><input type="text" name="id" value="${memInfo.id}" disabled ></td>
</tr>
<tr>
<td width="200"><p align="right" >비밀번호</td>
<!-- return memInfo; 반환된 정보 출력 -->
<td width="400"><input type="password" name="pwd" value="${memInfo.pwd}" >
</td>
</tr>
<tr>
<td width="200"><p align="right" >이름</td>
<!-- return memInfo; 반환된 정보 출력 -->
<td width="400"><input type="text" name="name" value="${memInfo.name}" ></td>
</tr>
<tr>
<td width="200"><p align="right" >이메일</td>
<!-- return memInfo; 반환된 정보 출력 -->
<td width="400"><input type="text" name="email" value="${memInfo.email}" ></td>
</tr>
<tr>
<td width="200"><p align="right" >가입일</td>
<!-- return memInfo; 반환된 정보 출력 -->
<td width="400"><input type="text" name="joinDate" value="${memInfo.joinDate }" disabled ></td>
</tr>
<tr align="center" >
<td colspan="2" width="400"><input type="submit" value="수정하기" >
<input type="reset" value="다시입력" > </td>
</tr>
</table>
</form>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
isELIgnored="false"
%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="contextPath" value="${pageContext.request.contextPath}" />
<%
request.setCharacterEncoding("UTF-8");
%>
<html>
<head>
<c:choose>
<c:when test='${msg=="addMember" }'>
<script>
window.onload=function(){
alert("회원을 등록했습니다.");
}
</script>
</c:when>
<c:when test='${msg=="modified" }'>
<script>
window.onload=function(){
alert("회원 정보를 수정했습니다.");
}
</script>
</c:when>
<c:when test= '${msg=="deleted" }'>
<script>
window.onload=function(){
alert("회원 정보를 삭제했습니다.");
}
</script>
</c:when>
</c:choose>
<meta charset="UTF-8">
<title>회원 정보 출력창</title>
<style>
.cls1 {
font-size:40px;
text-align:center;
}
.cls2 {
font-size:20px;
text-align:center;
}
</style>
</head>
<body>
<p class="cls1">회원정보</p>
<table align="center" border="1" >
<tr align="center" bgcolor="lightgreen">
<td width="7%" ><b>아이디</b></td>
<td width="7%" ><b>비밀번호</b></td>
<td width="7%" ><b>이름</b></td>
<td width="7%"><b>이메일</b></td>
<td width="7%" ><b>가입일</b></td>
<td width="7%" ><b>수정</b></td>
<td width="7%" ><b>삭제</b></td>
</tr>
<c:choose>
<c:when test="${empty membersList}" >
<tr>
<td colspan=5>
<b>등록된 회원이 없습니다.</b>
</td>
</tr>
</c:when>
<c:when test="${!empty membersList}" >
<c:forEach var="mem" items="${membersList }" >
<tr align="center">
<td>${mem.id }</td>
<td>${mem.pwd }</td>
<td>${mem.name}</td>
<td>${mem.email }</td>
<td>${mem.joinDate}</td>
<td><a href="${contextPath}/member/modMemberForm.do?id=${mem.id }">수정</a></td>
<td><a href="${contextPath}/member/delMember.do?id=${mem.id }">삭제</a></td>
</tr>
</c:forEach>
</c:when>
</c:choose>
</table>
<a href="${contextPath}/member/memberForm.do"><p class="cls2">회원 가입하기</p></a>
</body>
</html>












