[2022-08-25] TIL - 20일차
2022. 8. 26. 08:59ㆍGolfzon 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 |