11주차 02.09(목) Servlet

하이·2023년 2월 9일
0

수업

목록 보기
25/41
post-custom-banner

ServletContext
Session처리
JSP

Servlet

ServletContext

(항상 써야하나요? 필요한 경우가 있음)
: 저장공간 -> Map 구조 -> key와 value 쌍으로 데이터 저장
: servlet container 안에 위치 - client thread가 호출하는 doGet(doPOST())안에서 이 객체의 reference를 얻어서 사용 가능

count는 Servlet을 stateful형태로 사용하지 않음

만약 stateful로 사용하려면 singleton 이라는게 전제가 되야함(실제 운영할 때 singleton이 아닌 경우가 생길 수 있음)

form에서 method가 post일 때만 doPost/ 나머지는 doGEt?

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>사용자 이름을 입력하세요</h1>
	<!-- action은 servlet을 위한 url mapping임 -->
	<form action="secondServlet" method="post">
		이름을 입력하세요 : <input type="text" name="userName">
		<br><br>
		<button type="submit">서버로 전송</button>
	</form>
</body>
</html>
package controller;

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

import javax.servlet.ServletContext;
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 NameServlet
 */
@WebServlet("/saveName")
public class NameServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public NameServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		response.getWriter().append("Served at: ").append(request.getContextPath());
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 한글처리
		request.setCharacterEncoding("UTF-8");
		
		// 1. 입력처리
		String name = request.getParameter("userName");
		
		// 2. 로직처리
		// ServletContext를 가져와서 여기에 이름을 저장 !!
		// ServletContext는 Map구조(key와 value 쌍으로 저장)
		ServletContext context = this.getServletContext();
		
		context.setAttribute("memberName", name);
		
		// 3. 결과처리
		response.setContentType("text/html; charset=UTF-8"); // 설정잡고
		PrintWriter out = response.getWriter();				 // 구멍 뚫음
		
		out.println("<html><head></head>");
		out.println("<body>");
		out.println("<a href='secondServlet'>두번째 서블릿 호출</a>");
		out.println("</body></html>");
		
		
	}

}
package controller;

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

import javax.servlet.ServletContext;
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 SecondServlet
 */
@WebServlet("/secondServlet")
public class SecondServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public SecondServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 1. 입력받고
		// 2. 로직처리
		// container가 가지고 있는 걸 가져옴.reference를 확보함
		ServletContext context = this.getServletContext();
		// context.getAttribute("memberName")는 최상위 오브젝트가 나옴. 나는 String이 필요햐기 때문에 앞에서 (String)으로 잡아줌 !
		String name = (String)context.getAttribute("memberName"); 
		
		// 3. 결과처리
		response.setContentType("text/html; charset=UTF-8"); // 설정잡고
		PrintWriter out = response.getWriter();				 // 구멍 뚫음
		
		out.println("<html><head></head>");
		out.println("<body>");
		out.println("가져온 이름은 : " + name);
		out.println("</body></html>");
		
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

Session(session처리, session Tracking)

: 우리가 사용하는 web은 HTTP 프로토콜을 사용
: HTTP Protocol은 간단한 protocol - 동작방식도 단순


① 로그인
1. MySQL

CREATE TABLE MEMBERS (
	id			VARCHAR(10) NOT NULL PRIMARY KEY,
    name		VARCHAR(20) NOT NULL,
    password		VARCHAR(20) NOT NULL
);

INSERT INTO MEMBERS VALUES('hong', '홍길동', '1234');
  1. login.html


  • 5페이지 필기 빠짐

JSP + HTML + JSP요소(Java code+특수한 표기법)가 포함된 구조

  1. JSP file내에서 HTML내용은 out.println("~~) 이 안으로 다 들어감

  2. JSP file내에서 scriptlet:<% 일반 JAVA code %>
    : 변수 선언 for, if, while -> 제어문, 객체생성, method호출

  3. JSP File 내에서 <%= 문자열로 가능한 값 %> : Expression

  4. <%@ import %> : directive(설정)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%
		// 3. 출력은 HTML에 끼워넣기
	%>
	<%	
		// 간단한 화면 로직코드
		String name = "홍길동";	// 지역변수(method안에 선언)
		for(int i=0; i<5; i++) {
	%>
		<h1>반복!!!</h1>
	<%
		}
	%>
	<!-- 출력코드 -->
	아우성..
	사용자의 이름은 : <%= name %> 입니다.
</body>
</html>


JSP 게시판 만들기

: MVC pattern + JSP를 이용한 View 처리
① 일반적인 Round-Trip방식

② JQuery AJAX를 이용하여 View처리 분리

③ Vue.js 같은 Framework를 이용해 Front-End와 Back-End를 분리

  1. Story Board(화면 Navigation)
  • 로그인 기능
  • 댓글 게시판

session은 servlet에서 처리함 !

mybatis
-driver.~~

driver = com.mysql.cj.jdbc.Driver
url = jdbc:mysql://127.0.0.1:3306/mydatabase?characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true
user = root
password = test1234

loginSuccess.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="member.vo.Member" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<!-- JSP에서는 나에게 할당된 session객체를 그냥 사용할 수 있음
		 어떤 이름을 사용해야 하나요? => session -->
	<h1><%= ((Member)session.getAttribute("member")).getMemberName() %> 님 환영합니다.</h1>
</body>
</html>

profile
기록의 즐거움 😆💻
post-custom-banner

0개의 댓글