데일리로그C:
article thumbnail
Published 2023. 3. 3. 11:39
230303_web2(9)-메일, 채팅 JAVA/model2

[메일]

1. jar 파일 다운   https://mvnrepository.com/

2. google 설정 > 보안 > 앱비밀번호 생성

 

3. mail.jsp

<%@ 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>

<form action="mailSend" method="post">
<table>
	<tr>
		<td>받는 사람 메일</td>
		<td><input name="receiver"></td>
	</tr>
	<tr>
		<td>제목</td>
		<td><input name="subject"></td>
	</tr>
	<tr>
		<td>내용</td>
		<td><textarea name="content"></textarea></td>
	</tr>
	<tr>
		<td></td>
		<td><button>메일 보내기</button></td>
	</tr>
</table>
</form>

</body>
</html>

 

4. Mailsend.java

package mail;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import java.util.Properties;

import javax.mail.Address;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
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("/mailSend")
public class MailSend extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    
    public MailSend() {
        super();
    }

	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		request.setCharacterEncoding("utf-8");
		
		//jsp 에서 넘긴 변수 3개 담기!
		String num = request.getParameter("num");
		String receiver = request.getParameter("email");
		//String subject = request.getParameter("subject");
		String subject = "(주)망밍에서 인증번호를 보냈습니다.";
		String content = "인증번호는 "+num+"입니다.";
		//String content = request.getParameter("comment");
		
		
		//System.out.println("======num:"+num);
		//System.out.println("======email:"+receiver);
		//System.out.println("======subject:"+subject);
		//System.out.println("======content:"+content);
		

		response.setContentType("text/html; charset=utf-8");

		PrintWriter out = response.getWriter();
		
		try {
			Properties p = System.getProperties(); //서버 정보를 p객체에 저장
			
			p.put("mail.smtp.starttls.enable","true");
			p.put("mail.smtp.host","smtp.gmail.com"); //gmail.com
			p.put("mail.smtp.auth", "true");
			p.put("mail.smtp.port", "587"); //gmail 포트번호
			
			Authenticator auth = new GoogleAuthentication(); //인증정보 생성
			Session s = Session.getInstance(p, auth); //메일 전송 역할하는 객체 생성
			Message m = new MimeMessage(s); //s객체를 사용하여 전송할 m객체 생성
			
			Address receiver_address = new InternetAddress(receiver); //받는 사람

			//메일 전송에 필요한 설정 부분
			m.setHeader("content-type", "text/html;charset=utf-8");
			m.addRecipient(Message.RecipientType.TO, receiver_address);
			m.setSubject(subject);
			m.setContent(content, "text/html;charset=utf-8");
			m.setSentDate(new Date());
			
			Transport.send(m); //메세지를 메일로 전송
			
			out.print("메일 전송");
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	
	}

}

 

 

5. GoogleAuthentication.java

package mail;

import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;

public class GoogleAuthentication extends Authenticator{

	// 변수
	PasswordAuthentication passAuth;



	// 메소드
	public GoogleAuthentication() { //생성자

		passAuth = new PasswordAuthentication("아이디","비밀번호");

		//gmail 아이디(메일주소), 앱 비밀번호(2단계 인증) 발급받은 16자리

	}



	public PasswordAuthentication getPasswordAuthentication() {

		return passAuth;

	}
}

 

6. join2.jsp  --> 회원가입 사이트에 메일인증 추가하기

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ include file="/include/header.jsp" %>

<table width=400 border=0 align=center>
	<tr>
		<td align=center class="td_title">회원가입</td>
	</tr>
</table>

<script>
	function id_ok(id) {
		
		//var id = $("#id").val(); 보다는 매개변수 넘기는게 나을 듯!
		
		$.ajax({
			url: "idok", //전송받을 페이지 경로(상대경로) servlet
			type: "post", //데이터 읽어오는 방식
			dataType: "text", //데이터 방식
			data: "id="+id,

			error:function(){ //실패일 경우
				alert("실패");
			},
			success:function(text){ //성공일 경우
				$("#id_result").html(text);
			}
		});
	}
	
	function email_ok(str) {
		var num = parseInt(Math.random() * 100000);
		//alert(num);
		
		$.ajax({
			url: "/mailSend", //전송받을 페이지 경로(절대경로) servlet
			type: "post", //데이터 읽어오는 방식
			dataType: "text", //데이터 방식
			data: "num="+num+"&email="+str,

			error:function(){ //실패일 경우
				alert("실패");
			},
			success:function(text){ //성공일 경우
				//$("#email_result").html(text);
				alert("메일 확인후 인증번호 입력하세요.")
			}
		});
	}
</script>

<form name="join2" action="join2_insert" method="post">
<!-- <input id="id_check" name="id_check"> -->
<table width=400 border=1 align=center>
	<tr>
		<td>아이디</td>
		<td>
			<input id="m_id" name="id" value="">
			<span onclick="id_ok(join2.m_id.value)">[중복확인]</span>
			<div id="id_result"></div>
		</td>
	</tr>
	<tr>
		<td>비밀번호</td>
		<td><input name="pass" value=""></td>
	</tr>
	<tr>
		<td>이름</td>
		<td><input name="name" value=""></td>
	</tr>
	<tr>
		<td>나이</td>
		<td><input name="age" value=""></td>
	</tr>
	<tr>
		<td>성별</td>
		<td><input name="gender" value=""></td>
	</tr>
	<tr>
		<td>메일주소</td>
		<td>
			<input id="email" name="email" value=""><input type="button" value="메일인증" onclick="email_ok(email.value)">
			<br>
			<input id="" name="" value="" placeholder="인증번호를 입력하세요">
		</td>
	</tr>
	<tr>
		<td></td>
		<td><button>회원가입</button></td>
	</tr>
</table>
</form>



<%@ include file="/include/footer.jsp" %>


[채팅]

1. header.jsp 

<a href="/chat.jsp">[채팅]</a>

 

2. chat.jsp

로컬 호스트 아이피 수정해야함

ㄴ> ip 확인 방법 : cmd(명령 프롬프트) >> ipconfig 

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<%@ include file="/include/header.jsp" %>

<style>
	#main-container{
		width:500px;
		border:2px solid #cadef0;
		border-radius:2px;
	}
	#chat-container{
		border: 0px solid red;
		min-height: 500px;
		max-height: 500px;
		overflow: scroll;
		overflow-x:hidden;
		overflow-y:auto;
		background: #bacee0;
	}
	#bottom-container{
		margin:5px;
	}
	#bottom-container2{
		margin-bottom:5px;
	}
	#inputMessage{
		width:100%;
		height:30px;
		border:1px solid #bacee0;
		font-size:13px;
	}
	#btn-submit{
		background: #F7E600;
		width:60px;
		height:26px;
		color:#607080;
		border:none;
		border-radius:4px;
	}	
	.chat{
		font-size: 12px;
		color:#666;
		margin: 5px;
		padding: 3px 6px 4px 6px;
		text-align: left;
        height:auto;
        word-break : break-all;
        background: #ffffff;
        width:auto;
        display:inline-block;
        border-radius: 4px;
	}
	.my-chat{
		text-align: right;
		background: #ffeb33;
		border-radius: 4px;
		width:auto;
		padding: 3px 6px 4px 6px;
	}	
	.notice{
		color:#777;
		font-weight: bold;
		border : none;
		text-align: left;
		background-color: #cadef0;
		display: block;
	}

	.chat-info{
		color:#556677;
		font-size: 10px;
		text-align: right;
		padding: 5px;
		padding-top: 0px;
	}
	.chat-box{
		text-align:left;
	}
	.my-chat-box{
		text-align: right;
	}
</style>
</head>

<body>
<center>
	<div id="main-container">
		<div id="chat-container">

		</div>
		<div id="bottom-container">
			<input id="inputMessage">
		</div>
		<div id="bottom-container2">
			<input id="btn-submit" type="submit" value="전송" >
		</div>
	</div>
</center>
</body>

<script type="text/javascript">
	var textarea = document.getElementById("messageWindow");
	var webSocket = new WebSocket('ws://192.168.0.27:8080/webChatServer'); //로컬 호스트 아이피 적용
	var inputMessage = document.getElementById('inputMessage');

	webSocket.onerror = function(e){
		onError(e);
	};
	webSocket.onopen = function(e){
		onOpen(e);
	};
	webSocket.onmessage = function(e){
		onMessage(e);
	};

	function onMessage(e){
		var chatMsg = event.data;
		var date = new Date();
		var dateInfo = date.getHours() + ":" + date.getMinutes() + ":" + date.getSeconds();
		if(chatMsg.substring(0,6) == 'notice'){
			var $chat = $("<div class='chat notice'>" + chatMsg + "</div>");
			$('#chat-container').append($chat);
		}else{
			var $chat = $("<div class='chat-box'><div class='chat'>" + chatMsg + "</div><div class='chat-info chat-box'>"+ dateInfo +"</div></div>");
			$('#chat-container').append($chat);
		}

		$('#chat-container').scrollTop($('#chat-container')[0].scrollHeight+20);
	}

	function onOpen(e){

	}

	function onError(e){
		alert(e.data);
	}

	function send(){
		var chatMsg = inputMessage.value;
		if(chatMsg == ''){
			return;
		}
		var date = new Date();
		var dateInfo = date.getHours() + ":" + date.getMinutes() + ":" + date.getSeconds();
		var $chat = $("<div class='my-chat-box'><div class='chat my-chat'>" + chatMsg + "</div><div class='chat-info'>"+ dateInfo +"</div></div>");
		$('#chat-container').append($chat);
		webSocket.send(chatMsg);
		inputMessage.value = "";
		$('#chat-container').scrollTop($('#chat-container')[0].scrollHeight+20);
	}
</script>

<script type="text/javascript">
	$(function(){
		$('#inputMessage').keydown(function(key){ //글 입력후 엔터를 쳤을 때 실행
			if(key.keyCode == 13){
				$('#inputMessage').focus();
				send();
			}
		});
		$('#btn-submit').click(function(){
			send();
		});

	})
</script>
</html>

 

3. WebChatServer.java

package chatting;

import java.io.IOException;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import javax.servlet.http.HttpServlet;
import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;

import model.Member;


@ServerEndpoint("/webChatServer") //클라이언트에서 서버로 접속 할 주소로 지정
public class WebChatServer extends HttpServlet {
	
	private static Map<Session,Member> users = Collections.synchronizedMap(new HashMap<Session, Member>());

	@OnOpen //클라이언트에서 서버로 접속할 때 - 비회원 아이디,공지내용 작성 처리

	public void onOpen(Session session){
		String userName = "user";
		int rand_num = (int)(Math.random()*1000);		

		Member client = new Member();
		System.out.println(session);
		client.setName(userName+rand_num);

		System.out.println(session + " connect");

		users.put(session, client);

		sendNotice(client.getName() + "님이 입장하셨습니다. 현재 사용자 " + users.size() + "명");
	}

	//공지출력 처리
	public void sendNotice(String message){

		String userName = "notice";
		System.out.println(userName + " : " + message);

		synchronized (users) {
			Iterator<Session> it = users.keySet().iterator();
			while(it.hasNext()){
				Session currentSession = it.next();
				try {
					currentSession.getBasicRemote().sendText(userName + " ::: " + message);
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}

	@OnMessage //클라이언트로 부터 메시지가 도착했을때 처리
	public void onMsg(String message, Session session) throws IOException{

		String userName = users.get(session).getName();

		System.out.println(userName + " : " + message);

		synchronized (users) {

			Iterator<Session> it = users.keySet().iterator();

			while(it.hasNext()){
				Session currentSession = it.next();
				if(!currentSession.equals(session)){
					currentSession.getBasicRemote().sendText(userName + " :: " + message);
				}
			}
		}

	}

	@OnClose //접속이 끊겼을때 처리
	public void onClose(Session session) {

		String userName = users.get(session).getName();

		users.remove(session);

		sendNotice(userName + "님이 퇴장하셨습니다. 현재 사용자 " + users.size() + "명");
	}
      
 
}

'JAVA > model2' 카테고리의 다른 글

게시판  (0) 2023.03.03
jar 파일  (0) 2023.03.03
230303  (0) 2023.03.03
230302_web2(8)-상품관리  (0) 2023.03.02
230302_web2(7)-분류관리  (0) 2023.03.02
profile

데일리로그C:

@망밍

포스팅이 도움됐다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

profile on loading

Loading...