본문 바로가기

Java/공부

[SERVLET / JSP] 간단 정리

* Servlet

- 클라이언트의 요청에 대해 동적으로 작동하는 웹 애플리케이션 컴포넌트

  미리 만들어둔 화면(정적)이 아닌, 요청에 맞는 화면을 만들어 동적으로 응답

 

- 웹 프로그래밍에서 클라이언트의 요청을 처리하고,

  그 결과를 다시 클라이언트에게 응답하는

  Servlet클래스의 구현 규칙을 지킨 자바 프로그래밍 기술

 

- Servlet 클래스의 상속 관계

  Servlet 코드를 작성할 때는 반드시 HttpServlet 클래스를 상속받아 메소드를 구현해야함!

 

@WebServlet("/member/test")

// @WebServlet("요청주소")

// == 해당 클래스를 Servlet클래스로 등록하고, 어떤 요청 주소에 대해 처리할지 지정하는 어노테이션
public class TestServlet extends HttpServlet{

 

// 요청 방식에 따라 doGet/ doPost 두가지로 나뉨

// 해당되는 메서드를 오버라이딩하여 사용한다!

 

      @Override (GET방식 요청)
      protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

 

            // 요청을 받아 특정 JSP로 위임
            // 경로작성시 webapp폴더기준으로 작성 (webapp은 제외라서 /WEB-INF부터 작성 ㅠㅠ)
            String path = "/WEB-INF/views/member/test.jsp";

            // 요청 발송자 선언
            RequestDispatcher dispatcher = req.getRequestDispatcher(path);

           // 요청 위임시 추가할 값이 있으면 위임 전 세팅하기!!!
            req.setAttribute("menu", "pizza");
            req.setAttribute("person", "person");

            // 요청을 위임
            dispatcher.forward(req, resp);

            // 요청 발송자 선언 + 위임을 한 줄로 작성 가능
            // req.getRequestDispatcher(path).forward(req, resp);

      }

      @Override (POST방식 요청)
      protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

            // POST 방식 요청시 한글이 깨지는 문제 -> 요청 형식 지정
            req.setCharacterEncoding("UTF-8");

            // 로그인 할 파라미터 얻어오기
            String memberId = req.getParameter("memberId");
            String memberPw = req.getParameter("memberPw");
            
            try {


                  // 서비스 객체 생성
                  MemberService service = new MemberService();

                  // 서비스를 호출하여 결과를 Member객체 loginMember에 저장하기
                  Member loginMember = service.testLogin(memberId, memberPw);

                  // 요청 객체에서 세션 얻어오기
                  HttpSession session = req.getSession();

                  if(loginMember!=null) {

                  // 세션에 loginMember객체 저장하기
                  session.setAttribute("loginMember", loginMember)

                  // 세션 유지시간 지정 (초단위; 1시간)
                  session.setMaxInactiveInterval(3600);

                  // jsp 하단에 script문 작성해놔서... 메시지 세팅
                  session.setAttribute("message", "로그인 성공");

                  // 로그인 성공시 다시 test 화면으로 돌아오기

                  // 상대경로로 작성했는데... 절대경로는 /community/member/test

                  resp.sendRedirect("test");


                  // 인덱스 페이지로 돌아오는 방법도 있음 (/community)
                  // resp.sendRedirect(req.getContextPath()); -> 최상위주소

            }else {
                  session.setAttribute("message", "로그인 실패");
                  resp.sendRedirect("test");
            }

 

--------------------------------------------------------------------------------------
// 로그아웃 할 때에는 Session에 세팅된 회원정보를 없애는것!
// 현재 세션에서 로그인멤버 정보를 없애거나
// session.removeAttribute("loginMember");

// 현재 세션 전체를 없애고 새로운 새션 만들기 (이게 더 간단함)
// session.invalidate();

// 완료시 최상위경로(index.jsp)로 돌아가기
// resp.sendRedirect(req.getContextPath());


--------------------------------------------------------------------------------------

 

// 요청 처리 후 응답할 때에는 보통 PrintWriter 객체를 이용

 

// 출력 형식을 지정한 뒤

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

 

// 출력 스트림 생성 + resp.getWriter(); 서버가 클라이언트에게 응답할 수 있는 출력 전용 스트림을 얻어옴

// print("문자열") / println("문자열") 을 사용해 원하는 문자열로 응답한다.

PrintWriter out = resp.getWriter();

 

out.println("안녕");

--------------------------------------------------------------------------------------

 

// scope
// 1) page : 현재 페이지(Servlet, JSP)에서만 사용 가능
// pageContext.setAttribute 이용! jsp 상단에 작성
// <% pageContext.setAttribute("message", "page"); %>

// 2) request : 요청 받은 Servlet, 요청 위임한 JSP 에서 사용 가능
req.setAttribute("message", "request scope에 저장된 메세지 입니다.");

// 3) session : 현재 켜져 있는 브라우저가 종료되기 전까지 어디서든 사용 가능 (ex) 로그인 )  
// 1. HttpSession 내장 객체 얻어오기
HttpSession session1 = req.getSession();

// 2. session 범위로 값 세팅 (request범위와 방법 동일함)
session.setAttribute("sessionValue", "999");


// 4) application : 배포한 웹 어플리케이션이 종료되기 전까지 어디서든 사용 가능 (서버가 종료될 때 까지 유지)
// 1. ServletContext(application) 내장 객체 얻어오기
ServletContext application = req.getServletContext();

// 2. application 범위로 값 세팅 (request와 방법 동일)
application.setAttribute("appValue", "세미 프로젝트 파이팅 ~ ");

/* jsp파일에서
 
scope 우선순위 : page > request > session > application
* 원하는 범위 (scope)의 값 얻어오기 (xxxScope.key명)
${requestScope.message }
${sessionScope.message }
${applicationScope.message }
 
 */

}catch(Exception e) {
e.printStackTrace();

}
}

}

'Java > 공부' 카테고리의 다른 글

[Spring] 시작  (0) 2022.06.21
[JDBC] 정리  (0) 2022.04.03
[Java] 컬렉션 (Collection) _ List, Set, Map 0316  (0) 2022.03.21
[Java] 바인딩 (Binding) 0315_1  (0) 2022.03.21
[Java] 다형성 (Polymorphism)  (0) 2022.03.21