출처: https://bumcrush.tistory.com/182 [맑음때때로 여름]

sqlite.org/download.html

 

SQLite Download Page

Templates (1) and (2) are used for source-code products. Template (1) is used for generic source-code products and templates (2) is used for source-code products that are generally only useful on unix-like platforms. Template (3) is used for precompiled bi

sqlite.org

 

 

내가 쓸 곳에 복사!

 

 

나가는건 .exit

 

import sys
import io

sys.stdout = io.TextIOWrapper(sys.stdout.detach(), encoding = 'utf-8')
sys.stderr = io.TextIOWrapper(sys.stderr.detach(), encoding = 'utf-8')


# 설치 안해도 그냥 내장되어있었음 pip list해도안나오지만..
import sqlite3

# db연결
con = sqlite3.connect('sample')

# 커서생성
cur = con.cursor()

# sql
sql_select = 'Select * from userTable'

cur.execute(sql_select)
print('아이디\t이름\t이메일\t생년')
print('-----------------------------------')

while True:
    # 커서의 한줄을 가져오는 함수 fetchone : 행이 없으면 NONE 반환
    row = cur.fetchone()

    if row :
        break;

    print(row)
    print('{}\t{}\t{}\t{}'.format(row[0], row[1], row[2], row[3]))

con.close()

 

 

'DB > M' 카테고리의 다른 글

[ORACLE SQL] 계정생성 in cmd  (0) 2020.11.16
[ORACLE SQL] 시퀀스 1로 초기화  (0) 2020.11.16
[ORACLE SQL] 단축키  (0) 2020.11.12
[ORACLE SQL] 기본 & 함수 문제 풀기  (0) 2020.11.10
[ORACLE SQL] 업체코드6552 에러  (0) 2020.11.10
from flask import Flask


# 웹서버 생성
app = Flask(__name__)
print(app)
print(__name__) #main

# url mapping
@app.route('/')
def index():
    return 'Hello, Python'

@app.route('/hello')
def hello():
    return '<h1> /hello 요청의 응답입니다 </h1>'


if __name__ == '__main__':
    app.run(debug=True, port=8000)

 

 

파이썬이 설치된 위치의 Script에 들어가서 cmd를 실행해준다.

그리고 pip install beatufulsoup4라고 치고 이렇게 나오면 설치완료!

 

 

아톰 사용하고 있고 그 뒤로는 이렇게 불러오기 가능!

쥬피터 노트북에는 깔려있고? VS CODE도 그냥 이렇게 쓰는 것 같다능~

근데 vscode는 터미널이 있어서 거기에서 하는듯..

 

설치 목록확인은 pip list

 

pip install flask

	String base64 = null;

		// 절대경로
		String realPath = ootdBase64Controller.class.getResource("/").getPath().replaceAll("/WEB-INF/classes/", "/");
		// 사진파일 이름
		String filePath = realPath + "fileupload/ootdimage/" + ootdphotoname;
		File imagefile = new File(filePath);

			FileInputStream input = new FileInputStream(imagefile);
			System.out.println(input);
			// 이미지 파일을 byte[] 로 읽어온다.
			byte[] b = new byte[input.available()];
			input.read(b);

			byte[] encoded = Base64.encodeBase64(b);
			// byte[] 형태의 base64 데이터를 String으로 변환.
			base64 = new String(encoded);
			System.out.println(base64);
			

 

apache common codec 사용

'memo' 카테고리의 다른 글

[자바] REST API 요청 시 한글깨짐  (0) 2021.02.17
[파이썬] pip 업그레이드  (0) 2021.02.17
[파이썬] 판다스 pandas 설치  (0) 2021.02.15
최근 에러 참고  (0) 2021.02.03
[스프링] ajax 참고  (0) 2021.01.29
RESTCLIENT  (0) 2021.01.28
[스프링] mvc패턴에 관한 블로그  (0) 2021.01.08

 

- AWS RDS 다른 컴퓨터에서 안될때 보안에서 IP 

m.blog.naver.com/PostView.nhn?blogId=baekmg1988&logNo=221316318423&proxyReferer=https:%2F%2Fwww.google.com%2F

 

[AWS] RDS DB 외부에서 접속 안될때 외부 접속 되게 하는 해결 방법

aws 클라우딩 서버 많이들 이용하시죠??ㅎㅎ 저도 친구들이랑 간단한 프로젝트 할 때는 아마존의 프리티어...

blog.naver.com

 

- append 했을때 onclick 등 쿼리안먹힐때

sup2is.tistory.com/90

 

[jQuery] jQuery append 이후 event 먹통 현상 대처

최대한 간략하게 설명해보면 다음과 같은 케이스가 있다 //html //javascript $('#somethingBtn').click(function () { $("#base").append(" bla bla "); }) $('.new').click(function() { //not working!!!!! });..

sup2is.tistory.com

 

- 모달로data넘기기

tristan91.tistory.com/415

 

bootstrap - modal로 데이터 넘기기

button을 누르면 delteCheckModal이 동작합니다. 게시글 삭제 deletecheckmodal 정말로 삭제하시겠습니까? aria-hidden="true">× '삭제'버튼을 누르면 해당 게시글이 삭제됩니다. 정말로 삭제하시겠습니까?..

tristan91.tistory.com

 

'memo' 카테고리의 다른 글

[파이썬] pip 업그레이드  (0) 2021.02.17
[파이썬] 판다스 pandas 설치  (0) 2021.02.15
자바스크립트 파일 절대경로 / decode  (0) 2021.02.08
[스프링] ajax 참고  (0) 2021.01.29
RESTCLIENT  (0) 2021.01.28
[스프링] mvc패턴에 관한 블로그  (0) 2021.01.08
tomcat서버 에러 발생시 해결 방법  (0) 2020.12.28
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!doctype html>
<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <meta name="description" content="">
    <meta name="author" content="">
    <!-- <link rel="icon" href="../../../../favicon.ico"> -->

    <title>Offcanvas template for Bootstrap</title>

    <!-- Bootstrap core CSS -->
    <link href="css/bootstrap/bootstrap.min.css" rel="stylesheet">

    <!-- Custom styles for this template -->
    <link href="css/bootstrap/offcanvas.css" rel="stylesheet">
  </head>

  <body class="bg-light">

    <nav class="navbar navbar-expand-lg fixed-top navbar-dark bg-dark">
      <a class="navbar-brand mr-auto mr-lg-0" href="#">BITCAMP</a>
      <button class="navbar-toggler p-0 border-0" type="button" data-toggle="offcanvas">
        <span class="navbar-toggler-icon"></span>
      </button>

      <div class="navbar-collapse offcanvas-collapse" id="navbarsExampleDefault">
        <ul class="navbar-nav mr-auto">
          <li class="nav-item active">
            <a class="nav-link" href="#">Dashboard <span class="sr-only">(current)</span></a>
          </li>
          <li class="nav-item">
            <a class="nav-link" href="#">Notifications</a>
          </li>
          <li class="nav-item">
            <a class="nav-link" href="#">Profile</a>
          </li>
          <li class="nav-item">
            <a class="nav-link" href="#">Switch account</a>
          </li>
          <li class="nav-item dropdown">
            <a class="nav-link dropdown-toggle" href="https://example.com" id="dropdown01" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Settings</a>
            <div class="dropdown-menu" aria-labelledby="dropdown01">
              <a class="dropdown-item" href="#">Action</a>
              <a class="dropdown-item" href="#">Another action</a>
              <a class="dropdown-item" href="#">Something else here</a>
            </div>
          </li>
        </ul>
        <form class="form-inline my-2 my-lg-0">
          <input class="form-control mr-sm-2" type="text" placeholder="Search" aria-label="Search">
          <button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
        </form>
      </div>
    </nav>

    <div class="nav-scroller bg-white box-shadow">
      <nav class="nav nav-underline">
        <a class="nav-link active" href="#">Dashboard</a>
        <a class="nav-link" href="#">
          Friends
          <span class="badge badge-pill bg-light align-text-bottom">27</span>
        </a>
        <a class="nav-link" href="#">Explore</a>
        <a class="nav-link" href="#">Suggestions</a>
        <a class="nav-link" href="#">Link</a>
        <a class="nav-link" href="#">Link</a>
        <a class="nav-link" href="#">Link</a>
        <a class="nav-link" href="#">Link</a>
        <a class="nav-link" href="#">Link</a>
      </nav>
    </div>

    <main role="main" class="container">
      <div class="d-flex align-items-center p-3 my-3 text-white-50 bg-purple rounded box-shadow">
        
        <div class="lh-100">
          <h1 class="mb-0 text-white lh-100">MemberList</h1>
          <small>member info</small>
        </div>
      </div>

      <div class="my-3 p-3 bg-white rounded box-shadow" id="member_list">
        <h6 class="border-bottom border-gray pb-2 mb-0">Member List</h6>
        


        

      </div>

     
    </main>

    <!-- Bootstrap core JavaScript
    ================================================== -->
    <!-- Placed at the end of the document so the pages load faster -->
    <script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
    <script>window.jQuery || document.write('<script src="js/assets/vendor/jquery-slim.min.js"><\/script>')</script>
    <script src="js/assets/vendor/popper.min.js"></script>
    <script src="js/bootstrap/bootstrap.min.js"></script>
    <script src="js/assets/js/vendor/holder.min.js"></script>
    <script src="js/bootstrap/offcanvas.js"></script>
    
    
    
    <script>
    
    	$(document).ready(function(){
    		
    		$.ajax({
    			url : 'http://localhost:8080/op/rest/ver1/members',
    			type : 'GET',
    			success : function(data){
    				console.log(data);
    				//alert(data);
    				//alert(JSON.stringify(data));
    				
    				
    				$.each(data, function(index, item){
    					
        				var html ='<div class="media text-muted pt-3">';
        				html += '<p class="media-body pb-3 mb-0 small lh-125 border-bottom border-gray">';
        				html += '<strong class="d-block text-gray-dark">'+item.memberid+'('+item.membername+')'+'</strong>';
        				html += ''+item.memberphoto;
        		    html += '</p>';
        		    html += '</div>';
        		    
        		    $('#member_list').append(html);
    				});
    				
    			},
    			error : function(e){
    				console.log("에러발생 : ",e);
    			}
    		})
 
    		
    	});
        
    </script>
    
    
    
    
    
    
  </body>
</html>

 

1 lib 세팅

 

pom.xml

websocket과 잭슨바인드 json을 자바의 객체로 쉽게 변경할 수 있는 gson을 넣어준다.

 

2 채팅을 위한 핸들러 클래스 정의

TextWebSocketHandler 상속해서 정의 - 접속 / 퇴장 / 메세지 전송

ace - 접속, htm - 메세지 전송, close -로그아웃 , List/Map = 저장공간

package com.aia.socket.handler;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.socket.CloseStatus;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.TextWebSocketHandler;

import com.aia.socket.domain.Message;
import com.google.gson.Gson;

public class EchoHandler extends TextWebSocketHandler {

	private static final Logger logger = LoggerFactory.getLogger(EchoHandler.class);

	private List<WebSocketSession> sessionList = new ArrayList<WebSocketSession>();
	private Map<String, WebSocketSession> sessionMap = new HashMap<String, WebSocketSession>();

	@Override
	public void afterConnectionEstablished(WebSocketSession session) throws Exception {
		
		String chatMember = (String) session.getAttributes().get("user");

		System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>" + chatMember);
		
		
		// 저장! 둘중에 하나 사용하면 되는데, 선생님은 둘다 넣어두심
		sessionList.add(session);
		// sessionMap.put(chatMember, session);

		logger.info("{} 연결되었습니다.", session.getId()+":"+chatMember);

		System.out.println("체팅 참여자 : " + chatMember);
	}

	@Override	//메세지보내기 			//누가보냈는지에 대한 정보저장↓
	protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {

		// 현재 로그인된 멤버
		String chatMember = (String) session.getAttributes().get("user");
		
		logger.info("{}로 부터 {}를 전달 받았습니다.", chatMember, message.getPayload());
		
		
		Gson gson = new Gson();
							//json으로부터 객체를 만듦		//이 message클래스를 기반으로 json이만들어진다.
		Message msg = gson.fromJson(message.getPayload(), Message.class); 
		// ↑ json을 java의 객체로 바꿔주는 것.		// user, to, articleId, articleOwnver(방장?), message;
		
		System.out.println(msg);
		

		// 전달 메시지
		TextMessage sendMsg = new TextMessage(gson.toJson(msg));
		
					// sessionList 모두에게, afterConnectionEstablished에서 들어오는 인간들 저장했었음
		for (WebSocketSession webSocketSession : sessionList) {
			// 상대방에게 메시지 전달
			webSocketSession.sendMessage(sendMsg);
		}
		// 자신에게 메시지 전달
		//session.sendMessage(sendMsg); 
		
	}

	@Override
	public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
		
		// 현재 유저 - 로그아웃
		String chatMember = (String) session.getAttributes().get("user");
		sessionList.remove(session);
		logger.info("{} 연결이 끊김", session.getId()+chatMember);
		System.out.println("체팅 퇴장 : " + chatMember);
	}

}
package com.aia.socket.domain;

public class Message {

	private String user;
	private String to;
	private String articleId;
	private String articleOwner;
	private String message;

	public Message(String user, String to, String articleId, String articleOwner, String message) {
		this.user = user;
		this.to = to;
		this.articleId = articleId;
		this.articleOwner = articleOwner;
		this.message = message;
	}

	public Message() {
	}

	public String getUser() {
		return user;
	}

	public void setUser(String user) {
		this.user = user;
	}

	public String getTo() {
		return to;
	}

	public void setTo(String to) {
		this.to = to;
	}

	public String getMessage() {
		return message;
	}

	public void setMessage(String message) {
		this.message = message;
	}

	public String getArticleId() {
		return articleId;
	}

	public void setArticleId(String articleId) {
		this.articleId = articleId;
	}

	public String getArticleOwner() {
		return articleOwner;
	}

	public void setArticleOwner(String articleOwner) {
		this.articleOwner = articleOwner;
	}

	@Override
	public String toString() {
		return "Message [user=" + user + ", to=" + to + ", articleId=" + articleId + ", articleOwner=" + articleOwner
				+ ", message=" + message + "]";
	}



}

 

3. Spring-socket.xml 설정 파일 정의

 

설정파일 : 웹소켓 핸들러 bean 등록 

// handshake-interceptors = httpsession을 웹소켓세션으로 쓸 수 있게 해준다(?)

 

 

설정파일 : web.xml에 등록해주기!

 

 

4.

 

package com.aia.socket.controller;

import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class ChattingController {

	@RequestMapping("/chatting")
	public ModelAndView chat(
			ModelAndView mv,
			@RequestParam("uid") String uid,
			HttpSession session
			) {
		
		mv.setViewName("chat/chat");
		mv.addObject("user", uid);
		mv.addObject("articleId", "12345");
		mv.addObject("articleOwner", "jin");
		
		session.setAttribute("user", uid);
		
		return mv;
	}
	
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style>
	.text_right {
		text-align: right;
	}
	
	.text_left {
		text-align: left;
	}
	.chattingBox {
		padding : 15px;
		border : 1px solid #AAA;
		margin: 10px 0;
	}
</style>
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>

<!-- 웹소켓 객체를 가져올 수 있게해준다 -->
<script
	src="https://cdn.jsdelivr.net/npm/sockjs-client@1/dist/sockjs.min.js"></script>

<!-- Zebra-Dialog CDN -->
<!-- <script src="resources/js/dialog/zebra_dialog.src.js"></script>
<link rel="stylesheet" href="resources/css/dialog/zebra_dialog.css" type="text/css" /> -->

</head>
<body>

	<h1>Chatting Page (id: ${user})</h1>
	<br>
	<form>
		<div>
			<div>
				<input type="text" id="message" />
				<input type="submit" id="sendBtn" value="전송" />
			</div>
			<br>
			<div class="well" id="chatdata">
				<!-- User Session Info Hidden -->
				<input type="hidden" value='${user}' id="sessionuserid">
			</div>
		</div>
	</form>
</body>

<script>
	//websocket을 지정한 URL로 연결
	var sock = new SockJS("<c:url value="/echo"/>");
	//websocket 서버에서 메시지를 보내면 자동으로 실행된다.
	sock.onmessage = onMessage;
	//websocket 과 연결을 끊고 싶을때 실행하는 메소드
	sock.onclose = onClose;
	
	
	$(document).ready(function(){
		
		$("form").submit(function() {
			console.log('send message...');
			sendMessage();
			
			$('#message').val('');
			
			$('#message').focus();
			
			
			return false;
		});
		
	});
	
	$(function() {
	});

	function sendMessage() {
		//websocket으로 메시지를 보내기
		
		var msg = {
			user : '${user}',
			to : 'jin', // 현재 페이지 작성자의 id를 작성 (강제로하나써놈예제로)
			articleId : '${articleId}',
			articleOwner : '${articleOwner}',
			message : $("#message").val()
		};
		
		sock.send(JSON.stringify(msg));
	}

	//evt 파라미터는 websocket이 보내준 데이터다.
	function onMessage(evt) { //변수 안에 function자체를 넣음.
		var data = evt.data; // 전달 받은 데이터
		
		//alert(data);
		
		msgData = JSON.parse(data); 
		
		var sessionid = null;
		var message = null;
		
		//current session id//
		var currentuser_session = $('#sessionuserid').val();
		console.log('current session id: ' + currentuser_session);
		
		var target = $('#chattingBox-1');
		
		if(target.length==0){
			$('<div id=\"chattingBox-1\" class=\"chattingBox\"></div>').html('<h3>${user} : 게시물 작성자-'+msgData.articleOwner+'</h3>').appendTo('body');
			$('#chattingBox-1').append('<hr>')
		}

			

		// 나와 상대방이 보낸 메세지를 구분하여 출력
		if (msgData.user == currentuser_session) {
			var printHTML = "<div class='well text_right'>";
			printHTML += "<div class='alert alert-info'>";
			printHTML += "<strong>[" + msgData.user + "] -> " + msgData.message
					+ "</strong>";
			printHTML += "</div>";
			printHTML += "</div>";

			$('#chattingBox-1').append(printHTML);
		} else {
			var printHTML = "<div class='well text_left'>";
			printHTML += "<div class='alert alert-warning'>";
			printHTML += "<strong>[" + msgData.user + "] -> " + msgData.message
					+ "</strong>";
			printHTML += "</div>";
			printHTML += "</div>";

			$('#chattingBox-1').append(printHTML);
		}

		console.log('chatting data: ' + data);

		/* sock.close(); */
	}

	function onClose(evt) {
		$("#data").append("연결 끊김");
	}
</script>
</html>

chrome.google.com/webstore/detail/tabbed-postman-rest-clien/coohjcphdfgbiolnekdpbcijmhambjff

 

Tabbed Postman - REST Client

No separate window required! This is the legacy postman extension that can run in a Chrome tab. * Now runs in tab. * Does not…

chrome.google.com

http://localhost:8080/firstspring/members/26

GET방식으로 멤버 26번을 조회할때 결과물을 알 수 있다.

 

http://localhost:8080/firstspring/rest/ver1/members/map

map방식으로 나오는 결과물 볼 수 있다.

'memo' 카테고리의 다른 글

자바스크립트 파일 절대경로 / decode  (0) 2021.02.08
최근 에러 참고  (0) 2021.02.03
[스프링] ajax 참고  (0) 2021.01.29
[스프링] mvc패턴에 관한 블로그  (0) 2021.01.08
tomcat서버 에러 발생시 해결 방법  (0) 2020.12.28
Server Tomcat v8.5 Server at localhost failed to start  (0) 2020.12.23
과제  (0) 2020.11.14

1-1. pom.xml에 라이브러리 추가

<!-- https://mvnrepository.com/artifact/javax.mail/mail -->
<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>mail</artifactId>
    <version>1.4.7</version>
</dependency>


<!-- https://mvnrepository.com/artifact/org.springframework/spring-context-support -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context-support</artifactId>
    <version>${org.springframework-version}</version>
</dependency>

1-2. 서블릿 리퀘스트에 빈즈 추가

	<beans:bean id="mainSender"
	class="org.springframework.mail.javamail.JavaMailSenderImpl"
	>
	
	<beans:property name="host" value="smtp.gmail.com"/>
	<beans:property name="port" value="587"/>
	<beans:property name="username" value="hyoseonjinbit@gmail.com"/>
	<beans:property name="password" value="비밀번호라서지움ㅎㅎㅎㅎ"/>
	<beans:property name="defaultEncoding" value="UTF-8"/>
	<beans:property name="javaMailProperties">
		<beans:props>
			<beans:prop key="mail.transport.protocal">smtp</beans:prop>
			<beans:prop key="mail.transport.auth">true</beans:prop>
			<beans:prop key="mail.smtp.starttls.enable">true</beans:prop>
			<beans:prop key="mail.debug">true</beans:prop>
		</beans:props>
	</beans:property>	
	</beans:bean>
	
	
	<beans:bean id="templateEmailmessage"
	class="org.springframework.mail.SimpleMailMessage"
	p:subject="회원가입을 축하합니다"
	p:text="정상적인 가입을 위해 아래링크를 클릭해주세요"/>
package com.aia.firstspring.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.MailSender;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import com.aia.firstspring.service.MailSenderService;

@Controller
@RequestMapping("/mail")
public class MailSenderController {
	
	@Autowired
	private MailSenderService mailService; 
	
	@RequestMapping("/simplemail")
	public void simpleMailSend() {
		
		mailService.simpleMailsend();
	}
	
	
	@Autowired
	private SimpleMailMessage templateMessage;
	
	@Autowired  
	private JavaMailSender mailsender;
	
	@RequestMapping("/simplemail2")
	public void simpleMailSend2() {
		
		mailService.mailSend("heeumheeum@naver.com");
		
		/*
		 * SimpleMailMessage message = new SimpleMailMessage(templateMessage);
		 * message.setTo("heeumheeum@naver.com");
		 * 
		 * mailsender.send(message);
		 */	
	}
	
}
package com.aia.firstspring.service;

import java.io.UnsupportedEncodingException;

import javax.mail.MessagingException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.MailException;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Service;

@Service
public class MailSenderService {

	@Autowired  
	private JavaMailSender mailsender;
	
	public boolean simpleMailsend() {
		
		boolean result =true;

		
		SimpleMailMessage message = new SimpleMailMessage();
		message.setTo("hyein4coding@gmail.com");
		message.setSubject("인정합니까?");
		message.setText("인정합니다");
		try {
			mailsender.send(message);
		}catch (MailException e) {			
			result = false;
		}
		return result;
	}

	public boolean mailSend(String toEmailAddress) {
		
		boolean result = true;
		
		MimeMessage message = mailsender.createMimeMessage();
		try {
			
			// 메일의 제목 설정
			message.setSubject("[안내] 가입축하", "UTF-8"); 
			// 메일 내용
			String htmlStr = "<h1 style=\"color:red;\">가입축하드립니다 :)</h1>";
			message.setText(htmlStr, "UTF-8", "html");
			// 보내는 사람 이메일 : gmail을 사용하는 경우에는 인증된 메일처리가 된다.
			message.setFrom(new InternetAddress("hyoseonjinbit@gmail.com"));
			// 받는 사람의 이메일  주소
			message.addRecipient(RecipientType.TO, new InternetAddress("heeumheeum@naver.com","효선쓰","UTF-8"));
			// 메일 전송
			mailsender.send(message);
			
			
		} catch (MessagingException e) {
			result=false;
			e.printStackTrace();
		} catch (UnsupportedEncodingException e) {
			result=false;
			e.printStackTrace();
		}
		
		return result;
	}
	

	// 받는사람의메일주소, 받는이름, 메일제목, 메일내용
	public boolean mailSend(String toEmailAddress,String name, String subject, String text) {
		
		boolean result = true;
		
		MimeMessage message = mailsender.createMimeMessage();
		try {
			
			// 메일의 제목 설정
			message.setSubject(subject, "UTF-8"); 
			// 메일내용
			message.setText(text, "UTF-8", "html");
			// 보내는 사람 이메일 : gmail을 사용하는 경우에는 인증된 메일처리가 된다.
			message.setFrom(new InternetAddress("hyoseonjinbit@gmail.com"));
			// 받는 사람의 이메일  주소
			message.addRecipient(RecipientType.TO, new InternetAddress(toEmailAddress,name,"UTF-8"));
			// 메일 전송
			mailsender.send(message);
			
			
		} catch (MessagingException e) {
			result=false;
			e.printStackTrace();
		} catch (UnsupportedEncodingException e) {
			result=false;
			e.printStackTrace();
		}
		
		return result;
	}
}

 

 

package com.aia.firstspring.member.service;

import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.aia.firstspring.member.dao.MemberDao;
import com.aia.firstspring.member.dao.MemberInterfaceDao;
import com.aia.firstspring.member.dao.MybatisMemberDao;
import com.aia.firstspring.member.domain.Member;
import com.aia.firstspring.service.MailSenderService;

@Service
public class MemberRegService {

//	@Autowired
//	private MemberDao dao;
	
//	@Autowired
//	private MybatisMemberDao dao;
	
	private MemberInterfaceDao dao;
	
	@Autowired
	private SqlSessionTemplate template;
	
	@Autowired
	private MailSenderService mailService;
	
	
	public int insertMember(Member member) {
		int result = 0;
		try {
			dao = template.getMapper(MemberInterfaceDao.class);
			result = dao.insertMember(member);
			
			String htmlStr="<h1><a href=\"http://localhost:8080/op/firstspring\">인증하기</a></h1>";
			// 메일 전송
			mailService.mailSend(member.getMemberid(), member.getMembername(), "인증확인메일", htmlStr);
		} catch (Exception e) {
			e.printStackTrace();
		}
				
		return result;
	}
	
	
	
	
	
	
	
	
	
	
}
@@ -0,0 +1,14 @@
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>


<h1>메일발송✉✉</h1>
</body>
</html>

 

HTTP 통신 기반의 아키텍처 REST
-REST는 Representational State Transfer의 약어로 하나의 URI는 하나의 고유한 리소스를 대표하도록 설계된다는 개념.
- REST 방식은 특정한 URI는 반드시 그에 상응하는 데이터 자체라는 것을 의미. 예를 들면 /post/123은 해당 페이지의 번호의 123번이라는 고유한 의미를 가지고 설계하고, 이에 대한 처리는 GET, POST방식과 같이 추가적인 정보를 통해서 결정된다.
- REST API는 외부에서 위와 같은 방식으로 특정 URI를 통해서 사용자가 원하는 정보를 제공하는 방식.
- REST방식의 서비스 제공이 가능한 것을 Restful 하다고 표현.
- 스프링 3부터 @ResponseBody 애노테이션을 지원하면서 REST방식의 처리를 지원하고 있었으며, 스프링 4에 들어와서 @RestController가 본격적으로 적용.

 

REST API는 다음의 구성되어있다.
- 자원(RESOURCE) - URI
- 행위(Verb) - HTTP METHOD ( GET, POST, DELETE, PUT )
- 표현(Representations)

 

 

 

 

 

 

@PathVariable을 이용한 경로 변수 처리

- 경로의 특정 위치 값이 고정되지 않고 달라질 때 사용하는 것이 @PathVariable

 

 

 

 

 

 

 

@RequestBody & @ResponseBody

 

 

@RequestBody 과 @ResponseBody는 요청몸체와 응답 몸체 구현 
- @RequestBody  : JSON 형식의 요청 몸체를 자바 객체로 변환 
- @ResponseBody : 자바 객체를 JSON 이나 XML 형식의 문자열로 변환 
- Spring Framework는 HttpMessageConverter 를 이용해서 자바 객체와 HTTP 요청/응답 몸체 사이의 변환 처리

 

package com.aia.firstspring.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping("/mc/simple")
public class SimpleConvertercontroller {
	
	
	@RequestMapping(method = RequestMethod.GET)
	public String form() {
		
		return "simple/form";
	}
	
	@RequestMapping(method = RequestMethod.POST)
	@ResponseBody
	public String simple(@RequestBody String body) {
		
		System.out.println(body + " @ResponseBody 어노태이션은 일반객체도응답처리가된다 ");
		return body;
	}
		

}
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<h1>form</h1>
	
	<form method="post">
	name : <input type="text" name="uname"><br>
	age : <input type="number" name="age"><br>
	<input type="submit">
	</form>

</body>
</html>

 

 

 

 

JAXB2를 이용한 XML 처리

 

 

package com.aia.firstspring.controller;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.aia.firstspring.domain.GuestMessage;
import com.aia.firstspring.domain.GuestMessageList;

@Controller
public class GuestMessageController {
	
	@RequestMapping("/message/listXml") 
	@ResponseBody
	public GuestMessageList listXml() {
		return getMessageList();
	}

	private GuestMessageList getMessageList() {

		List<GuestMessage> list = new ArrayList<GuestMessage>();
		list.add(new GuestMessage(1, "안녕", new Date()));
		list.add(new GuestMessage(2, "HELLO", new Date()));
		list.add(new GuestMessage(3, "빠이", new Date()));
		return new GuestMessageList(list);
	}
	

}
package com.aia.firstspring.domain;

import java.util.Date;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlType;


@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name="", propOrder = {"id", "message", "regDate"})
public class GuestMessage {


	private int id;
	private String message;
	private Date regDate;
	
	
	public GuestMessage() {
	}

	public GuestMessage(int id, String message, Date regDate) {
		this.id = id;
		this.message = message;
		this.regDate = regDate;
	}
	
	
}
package com.aia.firstspring.domain;

import java.util.List;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;


@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name="message-list") // <message-list></message-list>
public class GuestMessageList {
	
	
	@XmlElement(name="message")
	private List<GuestMessage> message;

	public GuestMessageList(List<GuestMessage> message) {
		this.message = message;
	}

	public List<GuestMessage> getMessage() {
		return message;
	}

	public void setMessage(List<GuestMessage> message) {
		this.message = message;
	}

	public GuestMessageList() {
	}
	
	
	

}

 

 

 

 

 

JACKSON2를 이용한 JSON 형식의 처리

 

 

잭슨 버전과 스프링 버전에 신경써서 해야함

 

 

 

package com.aia.firstspring.controller;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.aia.firstspring.domain.GuestMessage;
import com.aia.firstspring.domain.GuestMessage2;
import com.aia.firstspring.domain.GuestMessageList2;

@Controller
public class GuestMessageController2 {
	

	@RequestMapping(value= "/message/listJson") 
	@ResponseBody
	public GuestMessageList2 listXml2() {
		return getMessageList2();
	}

	
	private GuestMessageList2 getMessageList2() {

		List<GuestMessage2> list2 = new ArrayList<GuestMessage2>();
		list2.add(new GuestMessage2(1, "안녕", new Date()));
		list2.add(new GuestMessage2(2, "HELLO", new Date()));
		list2.add(new GuestMessage2(3, "빠이", new Date()));
		return new GuestMessageList2(list2);
	}
	

}
package com.aia.firstspring.domain;

import java.util.Date;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlType;

public class GuestMessage2 {
	
	private int id;
	private String message;
	private Date regDate;

	public GuestMessage2() {
	}

	public GuestMessage2(int id, String message, Date regDate) {
		this.id = id;
		this.message = message;
		this.regDate = regDate;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getMessage() {
		return message;
	}

	public void setMessage(String message) {
		this.message = message;
	}

	public Date getRegDate() {
		return regDate;
	}

	public void setRegDate(Date regDate) {
		this.regDate = regDate;
	}
}
	
	
package com.aia.firstspring.domain;

import java.util.List;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;


public class GuestMessageList2 {

	private List<GuestMessage2> message;

	public GuestMessageList2(List<GuestMessage2> message) {
		this.message = message;
	}

	public List<GuestMessage2> getMessage2() {
		return message;
	}

	public void setMessage2(List<GuestMessage2> message) {
		this.message = message;
	}

	public GuestMessageList2() {
	}
	
	
	

}

'spring' 카테고리의 다른 글

[스프링부트] vs code 사용하기 메모  (0) 2021.03.08
[스프링] 웹소켓 : 채팅  (0) 2021.01.29
[스프링] 메일발송하기  (0) 2021.01.25
[스프링] 인터셉터 / intercepter  (0) 2021.01.15
[스프링] mapper / CRUD  (0) 2021.01.15
[스프링] mybatis  (0) 2021.01.12
[스프링] jdbc  (0) 2021.01.11

+ Recent posts