[2022-08-25] TIL - 20일차

2022. 8. 26. 08:59Golfzon tech/TIL

😁 Today I Learned

  • JSP
  • Servlet
  • RequestDispatcher
  • Redirect

  • Servlet
  • 서버용 페이지가 있어야한다.  브라우저는 html 이 충분하지만 
  • JSP 서버 페이지가 html 을 다 받는다.
  • JSP 파일만 우클릭후 run as - run on server 이고 실제는 프로젝트 우클릭 후 실행 해야 맞다.
  • 자동 restart 가 되어 편해졌다.
  • Tomcat.  Server.xml 에서 63번쨰 라인 port 번호를 바꿀 수 있다.
  • Web.xml 에서 기본 index.html 이름으 ㄹ바꿀 있다.

 

 

webapp 폴더 밑에 index.jsp 를 생성한다.

 

 

Servlet

package test.com.controller;

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

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;

/**
 * Servlet implementation class TestController
 */
// 주소창에이 webServlet으로만 호출 해야한다.
// 이곳은 서버 restart 해야한다.
@WebServlet({ "/index.do", "/test.do", "/insert.do", "/selectAll.do" })
public class TestController extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#HttpServlet()
	 */
	public TestController() {
		super();
		System.out.print("생성자..");
	}

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	//
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		// 브라우저에다가 write를 하는 것이다. 브라우저에다가 프린트 하라눈것이다.
//		PrintWriter out = response.getWriter(); // 얘 있으면 한글 깨
//		out.append("Served at: ");
//		out.append(request.getContextPath()); // contextpath 는 현 jsp02_servlet
//		out.append(request.getServletPath()); // servletpath !

		String sPath = request.getServletPath();
		System.out.println("sPath :" + sPath);

		if (sPath.equals("/index.do")) {
			
			// 주소에 맞게 주소 포워딩 해주는것 
			RequestDispatcher rd = request.getRequestDispatcher("index.jsp"); // 실경로를 적어주면 된다.
			rd.forward(request, response); // 이걸 줘야지 서버로서 정보를 공유해서 가져가는 코
			
		} else if (sPath.equals("/insert.do")) {
			
			// 주소에 맞게 주소 포워딩 해주는것 
			RequestDispatcher rd = request.getRequestDispatcher("member/insert.jsp"); 
			rd.forward(request, response); 
		} else if (sPath.equals("/test.do")) {
			// 주소에 맞게 주소 포워딩 해주는것 
			RequestDispatcher rd = request.getRequestDispatcher("test/test.jsp"); 
			rd.forward(request, response); 
		}else if (sPath.equals("/selectAll.do")) {
			// 주소에 맞게 주소 포워딩 해주는것 
			RequestDispatcher rd = request.getRequestDispatcher("member/selectAll.jsp"); 
			rd.forward(request, response); 
		}

	} // end doGet

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */

	// request 에 요청의 모든것 response는 응답의 모든
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// 넘어온거를 다 떠넘긴다. doGet 에다가.. post로와도 위로가고 get으로가면 당연히 거기로 가고..
		doGet(request, response);
	} // end doPost

}

 

  • @WebServlet 의 경로를 설정할 때 / 를 넣어주지 않으면 사용할 때 404 에러가 발생한다.
  • Controller 수정은 서버를 다시 켜야한다.
  • RequestDispatcher 에서 getRequestDispatcher는 실경로를 적어주면 된다.
  • 그리고 주소에 맞게 포워딩을 해준다.
  • Post 방식으로 설정한 것을 제외한 모든것은 Get으로 인식한다.

 

Request

package test.com.controller;

import java.io.IOException;

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;
import javax.servlet.http.HttpSession;

@WebServlet({"/index.do","/login.do","/join.do","/loginOk.do","/logout.do"})
public class IndexController extends HttpServlet {
	private static final long serialVersionUID = 1L;

	public IndexController() {
		super();
	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
//		response.getWriter().append("Served at: ").append(request.getContextPath());

		String sPath = request.getServletPath();

		if (sPath.equals("/index.do")) {
			RequestDispatcher rd = request.getRequestDispatcher("index.jsp");
			rd.forward(request, response);
		}
		else if(sPath.equals("/login.do")) {
			RequestDispatcher rd = request.getRequestDispatcher("login.jsp");
			rd.forward(request, response);
		}
		else if(sPath.equals("/loginOk.do")) {
			System.out.println(request.getParameter("id"));
			System.out.println(request.getParameter("pw"));
			
			String user_id = request.getParameter("id");
			// 브라우저 닫을때까지 유지됨. (브라우저 종속이다. 하나씩)
			HttpSession session = request.getSession();
//			request.setAttribute("user_id", user_id);
			session.setMaxInactiveInterval(5); // 5초 지나면 꺼짐.
			session.setAttribute("user_id", user_id); // session 을 쓴다.
			
			response.sendRedirect("m_selectAll.do");
		}
		else if(sPath.equals("/logout.do")) {
			
			HttpSession session = request.getSession();
			
			// user_id 끊어버리기
			session.removeAttribute("user_id");
			
			response.sendRedirect("index.do");
		}
		else if(sPath.equals("/join.do")) {
			RequestDispatcher rd = request.getRequestDispatcher("join.jsp");
			rd.forward(request, response);
		}
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}

}
  • session 을 이용하여 로그인

 

CORS

		if (sPath.equals("/json_idCheck.do")) {
			
			// cors 코드 
			response.addHeader("Access-Control-Allow-Origin", "*");
			response.addHeader("Access-Control-Allow-Credentials", "true");
			
			System.out.println(request.getParameter("id")); // id를 불러왔네.
			
			PrintWriter out = response.getWriter();
			
			boolean result = true;
//			result = false;

			if(result){
				out.println("{ \"result\" : \"Not OK\" }");
			}else{
				out.println("{ \"result\" : \"OK\" }");
			}
			
//			RequestDispatcher rd = request.getRequestDispatcher("index.jsp");
//			rd.forward(request, response);
		}

 

 

MemeberController

package test.com.controller;

import java.io.IOException;
import java.util.ArrayList;
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;

import test.com.model.MemberVO;

@WebServlet({ "/m_insert.do", "/m_selectAll.do", "/m_update.do", "/m_delete.do", "/m_selectOne.do", "/m_searchList.do",
		"/m_insertOk.do", "/m_updateOk.do", "/m_deleteOk.do" })
public class MemberController extends HttpServlet {
	private static final long serialVersionUID = 1L;

	public MemberController() {
		super();
		System.out.println("Member 생성자...");
	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		
		String sPath = request.getServletPath();
		System.out.println("doGet......");
		System.out.println(sPath);
		if (sPath.equals("/m_insert.do")) {
			RequestDispatcher rd = request.getRequestDispatcher("member/insert.jsp");
			rd.forward(request, response);
		} else if (sPath.equals("/m_update.do")) {
			System.out.println(sPath);
			System.out.println(request.getParameter("num")); // id를 불러왔네.
			RequestDispatcher rd = request.getRequestDispatcher("member/update.jsp");
			rd.forward(request, response);
		} else if (sPath.equals("/m_delete.do")) {
			
			RequestDispatcher rd = request.getRequestDispatcher("member/delete.jsp");
			rd.forward(request, response);
		} else if (sPath.equals("/m_selectAll.do")) {
			System.out.println(sPath);
			
			// 값을 보낼 때 이걸로 보낼수 있다. (순수 자바로만 하기 힘드니까 )
			request.setAttribute("user_name", "yangssem123");
			
			List<MemberVO> vos = new ArrayList<MemberVO>();
			for (int i = 0; i < 10; i++) {
				MemberVO vo2 = new MemberVO();
				vo2.setId("id"+i);
				vo2.setNum(i+1);
				vo2.setName("name"+i);
				vo2.setPw("password"+i);
				vo2.setTel("010-111"+i);
				
				vos.add(vo2);
			}
			
			request.setAttribute("vos", vos);
			
			
			RequestDispatcher rd = request.getRequestDispatcher("member/selectAll.jsp");
			rd.forward(request, response);
			
		} else if (sPath.equals("/m_selectOne.do")) {
			
			MemberVO vo2 = new MemberVO();
			vo2.setId("id1234");
			vo2.setNum(2);
			vo2.setName("name1234");
			vo2.setPw("12345");
			vo2.setTel("010-111");
			request.setAttribute("vo2", vo2);
			
			System.out.println(request.getParameter("num")); // id를 불러왔네.
			RequestDispatcher rd = request.getRequestDispatcher("member/selectOne.jsp");
			rd.forward(request, response);
		} else if (sPath.equals("/m_searchList.do")) {
			System.out.println(request.getParameter("searchKey")); // id를 불러왔네.
			System.out.println(request.getParameter("searchWord")); // id를 불러왔네.
			
			List<MemberVO> vos = new ArrayList<MemberVO>();
			for (int i = 0; i < 10; i+=2) {
				MemberVO vo2 = new MemberVO();
				vo2.setId("id2"+i);
				vo2.setNum(i+1);
				vo2.setName("name2"+i);
				vo2.setPw("password2"+i);
				vo2.setTel("010-222"+i);
				
				vos.add(vo2);
			}
			
			RequestDispatcher rd = request.getRequestDispatcher("member/selectAll.jsp");
			rd.forward(request, response);
		} else if (sPath.equals("/m_insertOk.do")) {
			System.out.println(sPath);
			RequestDispatcher rd = request.getRequestDispatcher("member/insert.jsp");
			rd.forward(request, response);
		} else if (sPath.equals("/m_deleteOk.do")) {
			System.out.println(sPath);
			System.out.println(request.getParameter("num")); // id를 불러왔네.

			response.sendRedirect("m_selectAll.do"); // 실경로가 아닌 servlet path 로 간다.
		}

	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		// get으로 넘어가기전에 쓰기위해 여기다 적는다.... 근데 .. 나는 한글 되는뎁?
		request.setCharacterEncoding("UTF-8"); // 얘는 Post 에만 있어야 한다.

		String sPath = request.getServletPath();
		System.out.print("doPost : ");
		System.out.println(sPath);

		if (sPath.equals("/m_insertOk.do")) {
			System.out.println(request.getParameter("id")); // id를 불러왔네.
			System.out.println(request.getParameter("pw")); // id를 불러왔네.
			System.out.println(request.getParameter("pw_check")); // id를 불러왔네.
			System.out.println(request.getParameter("email")); // id를 불러왔네.
			System.out.println(request.getParameter("tel")); // id를 불러왔네.

			// 이게 위에처럼 RequestDispatcher 로 하게 되면 insertOk 서블릿 패스가 남아있고 그냥 페이지만 selectAll
			// 페이지로 남아있어서
			// 새로고침하면 입력이 계속해서 발생하여서 아예 selectAll 이 오도록 redirect를 사용하여 서블릿 패스까지도
			// selectAll.do 가 오도록 한다.
			// redirect
			response.sendRedirect("m_selectAll.do"); // 실경로가 아닌 servlet path 로 간다.
			// response 얘는 그냥 바로 가는거다..
		} else if (sPath.equals("/m_updateOk.do")) {
			System.out.println(sPath);
			System.out.println(request.getParameter("num")); // id를 불러왔네.
			System.out.println(request.getParameter("id")); // id를 불러왔네.

			response.sendRedirect("m_selectOne.do" + "?num=" + request.getParameter("num")); // 실경로가 아닌 servlet path 로
						// request 가 끝나면 끝이다. 영속성은
			
		} 

//		doGet(request, response); // 왜 주석이징.

	}

}

 

  • 미리 생성한 MemberVO 를 이용하여 CRUD 작성가능
  • request.setCharacterEnding("UTF-8")   은 doPost 에서 한글 깨지지 않기 위해 적어준다.
  • redirect 는 실경로가 아닌 servlet path 로 이동한다.
  •  
728x90

'Golfzon tech > TIL' 카테고리의 다른 글

[2022-08-29] TIL - 22일차  (0) 2022.08.29
[2022-08-26] TIL - 21일차  (0) 2022.08.26
[2022-08-24] TIL - 19일차  (2) 2022.08.24
[2022-08-22] TIL - 18일차  (0) 2022.08.22
[2022-08-19] TIL - 17일차  (0) 2022.08.20