Servlet 실행 후 반환받은 데이터를 jsp에게 전달한다.
데이터를 가진 jsp가 결과페이지가 된다.
응답은 jsp 결과 페이지를 뜻한다.
화면은 서버에서 만들어지는 것이 아니라 클라이언트 측에서 데이터를 받아서 직접 작성한다.
=> 다양한 Device들에 대한 화면 구성을 클라이언트 측에서 자유롭게 할 수 있음
=> 클라이언트와 서버의 분리
Tomcat 서버를 Eclipse와 연동하고 나서 서버를 처음 실행하기 전에 설정을 바꿔줄 수 있다.
package web.servlet.generic;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
/*
MyGenericServlet 서블릿 클래스는 자바 기반으로 만들어진 클래스
자바클래스 --- JVM(Platform)
서블릿 --- Container(WAS, Engine)
*/
public class MyGenericServlet extends GenericServlet {
@Override
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
//웹 브라우저로 응답을 하기위한 객체
PrintWriter out = response.getWriter();
out.println("<html><body><h2>");
out.println("Hello Generic Servlet~!!");
out.println("</h2></body></html>");
out.close();
} //클라이언트 응답이 끝났다 == thread, request, response 객체는 메모리에서 내려온다
}
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>Request</h2>
<a href="My">서블릿으로 요청</a>
</body>
</html>
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<!--
web.servlet.generic.MyGenericServlet MyGenericServlet = new web.servlet.generic.MyGenericServlet();
-->
<servlet>
<servlet-name>MyGenericServlet</servlet-name>
<servlet-class>web.servlet.generic.MyGenericServlet</servlet-class>
</servlet>
<!-- 클라이언트 매핑 -->
<servlet-mapping>
<servlet-name>MyGenericServlet</servlet-name>
<url-pattern>/My</url-pattern>
</servlet-mapping>
</web-app>
web.servlet.generic.MyGenericServlet MyGenericServlet = new web.servlet.generic.MyGenericServlet();
<servlet-name>MyGenericServlet</servlet-name>
<servlet-class>web.servlet.generic.MyGenericServlet</servlet-class>
서블릿 클래스의 이름과 별칭의 매핑
<servlet-name>MyGenericServlet</servlet-name>
<url-pattern>/My</url-pattern>
서블릿 클래스 별칭과 url의 매핑
GenericServlet: 컨테이너에서 실행되는 자바 기반의 프로그램, CGI 기술
CGI 기술: 컨테이너 환경에서 실행되는 프로그램 (Servlet, ASP, PHP, Pear..)
ServletConfig
- 하나의 서블릿을 초기화하는 역할
- getInitParameter는 Servlet Life Cycle의 init()에서 동작
- init()은 사용자 요청이 오는 시점이 아니라, 서블릿 생성 직후에 돌아감
- 초기화 시 이용하는 정보는 DD 파일(web.xml)에서 가져옴
- getServletContext(): ServletContext 인터페이스와 association
ServletContext
- 하나의 서블릿이 아니라 Global한 초기화를 수행
- 대표적인 메서드: setAttribute(), getAttribute(), getInitParameter()
- 여기서의 getInitParameter()는 ServletConfig의 getInitParameter()와 scope가 다르다.
xml을 짧게 표현한 것
4.0 버전에서는 web.xml을 직접 만드는 것이 아니라
annotation을 컨테이너가 보고 web.xml을 만든다.
사진 교체 필요
login.html 주석 참고
참고사진
사진 교체 필요
첫 번째 클라이언트의 요청이 들어오면 그제서야 Ready On 상태까지의 과정을 수행함
이를 Eager Loading으로 바꾸기 위해서는 xml에 아래와 같은 코드 추가
<load-on-startup>1</load-on-startup>
혹은 web03_LifeCycle과 같이 web.xml을 작성하지 않는 방식이라면 어노테이션을 아래와 같이 작성
@WebServlet(urlPatterns ={"/Life"}, loadOnStartup = 1)
사진 교체 필요
HttpServletRequest 폼값 받아오는 기능
getParameterValues 포함
"그림"과 같이 구조를 만들 예정
-> web06_Forward
서버 내에서 데이터를 저장하는 일종의 공간
1. 데이터를 바인딩 - setAttribute("이름", 객체)
2. 저장된 데이터를 찾아옴 - getAttribute("이름")
상황에 맞게 적절한 Attribute를 사용하는 것이 핵심
MVC Pattern과 달리, 요구사항(비지니스 로직)을 처리하는 단위가 제어문에 따라 달라짐
메서드 단위로 요구사항 처리 (MVC Pattern은 서블릿 단위로 처리하는 반면에..)
장점
- 하나의 서블릿이 모든 요청을 다 처리한다.
단점
- 하나의 서블릿에서 모든 비지니스 로직을 메서드 단위로 처리하다보니
=> Heavy Controller, Fat Controller
좋은 글이네요. 공유해주셔서 감사합니다.