반응형
1. 서블릿과 JSP 차이
서블릿은 자바이기 때문에 프로그램 로직을 짜기가 편리하다.
반면, JSP는 자바 코드를 사용하기 위해 스크립트릿이라든지 선언문이라든지를 통해 써야하기 때문에 번거롭다.
하지만, JSP는 html을 사용할 수 있기 때문에 "출력"면에서 편리하다.
서블릿에서는 html을 사용할 때 out.println에서 문자열로 html 태그를 다 넣어줘야 하기 때문에 매우 번거롭다.
즉, 프로그램 로직을 짜기에는 서블릿이 편하고, html을 출력하기 위해서는 JSP가 편하다.
따라서, 서블릿과 JSP를 연동하여 서블릿에서 프로그램 로직을 짜고, JSP로 포워딩한다.
2. 코드
: 2개의 랜덤 값을 더해서 출력하는 코드를 작성해본다.
package example;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/logic")
public class LogicServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public LogicServlet() {
super();
}
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int v1 = (int)(Math.random() * 100) + 1;
int v2 = (int)(Math.random() * 100) + 1;
int result = v1 + v2;
request.setAttribute("v1", v1);
request.setAttribute("v2", v2);
request.setAttribute("result", result);
RequestDispatcher rd = request.getRequestDispatcher("/result.jsp"); // 루트 : WebContent
rd.forward(request, response);
}
}
LogicServlet.java
: v1과 v2 랜덤값을 발생시키고, result에 그 합을 넣는다
: request에 v1, v2, result 를 담아서 보낸다.
: RequestDispatcher로 result.jsp로 forward 한다.
<%@ 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>
<!-- jsp -->
<%
int v1 = (int)request.getAttribute("v1");
int v2 = (int)request.getAttribute("v2");
int result = (int)request.getAttribute("result");
%>
<%=v1 %> + <%=v2 %> = <%=result %>
<br />
<!-- jstl -->
${v1 } + ${v2 } = ${result}
</body>
</html>
result.jsp
: request 객체에서 v1, v2, result 값을 받아온다.
: JSTL로 구현도 가능하다.
: forward 이기 때문에 url 매핑은 바뀌지 않는다.
반응형
'Programming > JSP & Servlet & Mysql' 카테고리의 다른 글
부스트캠프 5) EL(Expression Language) (0) | 2020.12.15 |
---|---|
부스트캠프 4) 4가지 Scope (0) | 2020.12.14 |
부스트캠프 2) REST API 란? (0) | 2020.11.21 |
부스트캠프 1) JDBC - mysql 연동하기 for mac (0) | 2020.11.19 |
실습 10) 리다이렉트(redirect), 포워드(forward) (0) | 2020.11.12 |