@1. Servlet은 Java 소스에 HTML 코드가 삽입된다.
JSP는 반대로 HTML코드에 Java코드가 삽입된다.
@2. Servlet class는 컴파일과정과 등록 과정이 필요하지 하지만 JSP는 필요 없다.
@3. Servlet 보다는 JSP 디자인과 로직에 대한 구분이 명확해서 유지보수가 용이하다.
@4. 간단한 로직을 구현할 때는 JSP가 더 간편하다.
하지만 복잡한 로직을 구현할 때에 HTML 중심의 코드가 이해하기 어렵게 만들수 있고, 프로그래밍 언어를 모르는 사람이 실수로 중요한 코드를 건들 우려도 있다. 그리고 힘들게 개발한 로직의 유출을 막기 위해서도 Servlet 기술이 필요하게 된다.
=> 그래서 요즘은 JSP 기술과 Servlet 기술을 혼용한 새로운 프로그래밍 방법이 권장되고 있다. 프로그램의 기능을 구현하는 복잡한 로직은 서블릿 클래스 안에 기술하고, 그 결과를 가져다가 출력하는 일만 JSP 페이지가 담당하도록 만드는 방법이다.(아래의 예제 참고)
@ JSP와 Servlet 기술을 혼합해서 작성한 웹 애플리케이션
// ch01.Ex02_SumServlet.java 파일
package ch01;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Ex02_SumServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
int total = 0;
for (int cnt=1; cnt<=100; cnt++)
total += cnt;
request.setAttribute("result", total); // 위의 total 변수의 값을 "result"에 넣어서 jsp파일에서 사용할 수 있도록 한다.
RequestDispatcher rd = request.getRequestDispatcher("ch01/ex02_sum.jsp"); // jsp 페이지 호출 // RequestDispatcher : 요청을 보내주는 인터페이스 (참고 : http://famlilia.blog.me/100092297572)
rd.forward(request, response);
// forward : forward는 request, response객체를 모두 다 전달하기 때문에 이동된 페이지(또는 서블릿)에서도 request와 response객체를 이용해서 파리미터를 받아서 처리할 수 있다.
// 참고 http://blog.naver.com/seektruthyb/150109008317
}
}
// WebContent/WEB-INF/web.xml 파일에 servlet 등록
<!-- Ex02_SumServlet.java 등록 -->
<servlet>
<servlet-name>ch01_ex02</servlet-name>
<servlet-class>ch01.Ex02_SumServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ch01_ex02</servlet-name>
<url-pattern>/ch01_ex02</url-pattern>
</servlet-mapping>
// WebContent/ch01/ex02_sum.jsp
<%@ page contentType="text/html; charset=UTF-8" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
1부터 100까지의 합은? ${result }
</body>
</html>
// 실행화면
http://localhost:9090/hanb_jsp_servlet/ch01_ex02
출처 : 한빛미디어 - 뇌를 자극하는 JSP & Servlet p24~30