* 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 |