미분류

230214

Berylly 2023. 2. 14. 18:08

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>&nbsp;</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>