회원가입 완료후 이벤트 생성

유동현·2023년 2월 11일
0

파이널프로젝트

목록 보기
3/4
post-thumbnail

문제점

  1. 회원가입후 회원가입이 정상적으로 완료되었는지에 대한 안내가 전혀없다.
  2. 이후 세션이 만료되었으나 페이지 자체는 로그인된 상태를 보여줄때 회원만 할 수 있는 상호작용을 할 경우 500에러가 날 가능성이 크다(세션이 없으므로) 이때 아무런 창 없이 초기화면으로 돌려보내면 사용자의 입장에서 당황스러울수 있다.

해결방법

  • 수업시간에 서블릿에 대해 배울때 HttpServletRequest, Response를 사용했던 적이 있다.
    이때 PrintWriter로 웹페이지를 작성했던 적이 있다.
  • 그때는 html 태그만 작성했지만 자바스크립트 jquery코드도 작성가능하지 않을까 해서 시도해봤다

코드

Step 1.

  • java Resources에 com.util 패키지 생성및 AlertMsg.java 파일 생성
package com.util;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.http.HttpServletResponse;

public class AlertMsg
{
	
	public static void alert(HttpServletResponse response,String errorMessage)
	{
		
		try
		{
			response.setContentType("text/html;charset=UTF-8");
			PrintWriter pw = response.getWriter();
			
			pw.println("<script>alert('"+errorMessage+"');</script>");
			
			pw.flush();
		} catch (IOException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
		
	}

}
  • 이제 이 함수를 컨트롤러에서 불러와 사용하면 된다.




문제발생

alert는 떳는데 전부 ??? 로 뜨는 현상이 발생했다.

페이지가 load 되기전에 alert 메소드를 통해 스크립트를 그리다 보니

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

이 부분보다 먼저 스크립트가 생성되어 그런거같다.

문제 해결

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

이 구문을 통해 charset을 utf-8로 지정해주었다. 결과가 잘 나온다.

step 2.

  • alert의 제목? title? 아무튼 localhost:8090부분이 마음에 들지 않았다. 그래서 저걸 가릴 방법이 없나 찾아봤는데...


이런식으로 alert창을 변경할 수 있게 만든 사람이 있다그래서 이대로 바꿔보기로 했다.

참고 : https://sweetalert2.github.io/

나와있는대로 사용했지만 위의 문제와 같이 페이지가 로딩되기 전에 호출되서 jquery가 적용되지 않았다.
해서

package com.util;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.http.HttpServletResponse;

public class AlertMsg
{
	
	public static void alert(HttpServletResponse response,String errorMessage)
	{
		
		try
		{
			response.setContentType("text/html;charset=UTF-8");
			PrintWriter pw = response.getWriter();
			
			pw.println("<script src=\"https://cdn.jsdelivr.net/npm/sweetalert2@10\"></script>");
			pw.println("<script type=\"text/javascript\" src=\"http://code.jquery.com/jquery.min.js\"></script>");
			//pw.println("<script>alert('"+errorMessage+"');</script>");
			pw.println("<script>");
			pw.println("$(document).ready(function(){");
			pw.println("Swal.fire({");
			pw.println("icon: 'success',");
			pw.println("title: '"+errorMessage+"',");
			//pw.println("text: '회원가입 됬다고',");
			pw.println("}); });");
			
			pw.println("</script>");
			
			pw.flush();
		} catch (IOException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
		
	}

}

해서 jquery.min.js까지 넣어주었다.

그리고

이렇게 성공했다. 확실히 좀 이쁜듯? 이제 이걸 회원가입 진행후 메인페이지로 돌려보낼때, 컨트롤러에서 세션이 없을때 호출하게 만들겠다.

다시 문제 발생

Request processing failed; nested exception is java.lang.IllegalStateException: 응답이 이미 커밋된 후에는, sendRedirect()를 호출할 수 없습니다.]을(를) 발생시켰습니다. 와 같은 에러가 발생했다.

에러 참고

  1. https://href-born-to-code.tistory.com/124
  2. https://codevang.tistory.com/212

해결방법

알림을 띄울 jsp페이지를 따로 만들고 컨트롤러에서 result가 될 페이지 url을 매개변수로 넘겨 알림을 띄우고 다음페이지를 띄울수 있게 변경할 예정

0개의 댓글