정적인 내용을 보낼 때 GET형식으로 페이지를 제공합니다.
기본적으로 사용자의 입력값을 받기 위해 정적인 페이지를 제공하고
정적인 페이지에 입력값을 사용자가 입력하고 POST방식으로 보내어
동적인 페이지를 다시 제공하는 형태가 가장 기본적인 방식입니다.
이러한 두 개의 파일을 생성해 따로 관리하는 것보다 정적인 페이지와 동적인 페이지를 하나로 합칠 수 있습니다.
사용자의 편의를 위해 정적인 문서와 동적인 문서를 합쳤는데 문제가 발생합니다.
개발자가 html을 전부 출력해주기 위해 java코드에서 html을 작성해주어야 하는데
기본적으로 웹페이지는 3천 줄 정도의 html 코드가 있는데 전부 html 코드를 작성해주어야 하는 일이 발생합니다.
package com.newlec.web;
import java.io.IOException;
import java.io.PrintWriter;
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("/calc")
public class Cal extends HttpServlet {
public void service(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
// response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");//기준잡아주기
PrintWriter out = response.getWriter();
int x = 0;
int y = 0;
String x_ =request.getParameter("x");//반드시 문자열로 변환해주어야한다.
String y_ =request.getParameter("y");//반드시 문자열로 변환해주어야한다.
if(x_!=null && !x_.equals(""))
x = Integer.parseInt(x_);
if(y_!=null && !y_.equals(""))
y = Integer.parseInt(y_);
out.write("<!DOCTYPE html>");
out.write("<html>");
out.write("<head>");
out.write("<meta charset=\"UTF-8\">");
out.write("<title>Insert title here</title>");
out.write("</head>");
out.write("<body>");
out.write(" <form action=\"calc\" method=\"post\">");
out.write(" <fieldset>");
out.write(" <legend>덧셈 계산을 위한 입력</legend>");
out.write(" <label>x</label> ");
out.write(" <input type=\"text\" name=\"x\">");
out.write(" <label>y</label>");
out.write(" <input type=\"text\" name=\"y\">");
out.write(" <input type=\"submit\" value=\"덧셈\">");
out.write(" </fieldset>");
out.write(" </form>");
out.write("</body>");
out.write("</html>");
out.printf("x + y 값은 %d 입니다", x+y);
}
}
이러한 HTML을 포함하고 구동 JAVA코드까지 포함하는 JSP파일로 HTML 파일을 변경해 사용하면
정적인 페이지와 동적인 페이지전부를 제공해줄 수 있다.
우선 HTML파일을 JSP로 변환합니다.
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="UTF-8"%>
<%
int x =3;
int y =3;
out.println(x+y);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="calc" method="post"> <!-- 데이터가 도착할 url -->
<fieldset>
<legend>덧셈 계산을 위한 입력</legend>
<label>x</label> <input type="text" name="x"> <label>y</label>
<input type="text" name="y"> <input type="submit" value="덧셈">
</fieldset>
</form>
</body>
</html>
그리고 실행을 한번 시켜줍니다.
만약 사용자에게 JSP파일 요청을 받게 되면 WAS는 JSP파일을 컨테이너에 로드한 뒤 서블릿을 간접적으로 생성합니다.
그런 다음 서블릿 파일을 컴파일을 한 다음 실행한 결과를 사용자에게 전송하게 됩니다.
그럼 톰캣이 가지고 있는 JSP파일을 한번 보고 저희가 작성한 JSP파일을 비교하여 무슨 차이가 있는지 확인해보겠습니다.
우리가 작성한 HTML 태그들을 전부 출력하는 자바 코드로 변환해주는 것을 확인할 수 있습니다.
따라서 우리는 JASPER을 이용해 서블릿을 간접적으로 생성하여 프로그램을 만듭니다.
제스퍼(Jasper)란?
- 톰켓의 JSP엔진이다. 제스퍼는 JSP파일을 파싱 하여 서블릿 코드로 컴파일한다.
제스퍼에 존재하는 지역변수가 존재합니다.
final javax.servlet.jsp.PageContext pageContext;
javax.servlet.http.HttpSession session = null;
final javax.servlet.ServletContext application;
final javax.servlet.ServletConfig config;
javax.servlet.jsp.JspWriter out = null;
final java.lang.Object page = this;
javax.servlet.jsp.JspWriter _jspx_out = null;
javax.servlet.jsp.PageContext _jspx_page_context = null;
데이터를 저장하기 위한 변수.
pageContext : 서블릿 , 페이지 내에서만 사용하는 저장소
session : 한 사용자(접속자)가 모든 서블릿에서 공유할 수 있는 저장소
application
request :입력
그럼 Calc.java의 동적인 코드를 calc.jsp코드 블록에 옮겨서 사용하겠습니다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
int x = 0;
int y = 0;
String x_ =request.getParameter("x");
String y_ =request.getParameter("y");
if(x_!=null && !x_.equals(""))
x = Integer.parseInt(x_);
if(y_!=null && !y_.equals(""))
y = Integer.parseInt(y_);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="calc.jsp" method="post"> <!-- 데이터가 도착할 url -->
<fieldset>
<legend>덧셈 계산을 위한 입력</legend>
<label>x</label> <input type="text" name="x"> <label>y</label>
<input type="text" name="y"> <input type="submit" value="덧셈">
<span>결과값은 <%=x+y%> 입니다.</span>
</fieldset>
</form>
</body>
</html>
JSP의 코드블럭
1. JSP Expression
<%= expression>
Jsp Expression에 요소는 String으로 변환되어 Servlet 출력에 사용됩니다.
동적인 페이지를 생성하며
문법에 세미콜론을 사요 하지 않습니다.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="calc.jsp" method="post"> <!-- 데이터가 도착할 url -->
<fieldset>
<legend>덧셈 계산을 위한 입력</legend>
<label>x</label> <input type="text" name="x"> <label>y</label>
<input type="text" name="y"> <input type="submit" value="덧셈">
<span>결과값은 <%=x+y%> 입니다.</span>
<br/>
<span>X의 입력값<%=request.getParameter("x") %></span>
<span>Y의 입력값<%=request.getParameter("y") %></span>
</fieldset>
</form>
</body>
</html>
2. JSP Scriptlet
<% code fragment %>
간단한 값이 아닌 조건이나, 복잡한 것을 수행해야 할 때 사용되며
임의의 JAVA코드를 삽입할 수 있습니다.
메서드는 사용하지 못하며 변수만 선언할 수 있다.
<%
int x = 0;
int y = 0;
String x_ =request.getParameter("x");
String y_ =request.getParameter("y");
if(x_!=null && !x_.equals(""))
x = Integer.parseInt(x_);
if(y_!=null && !y_.equals(""))
y = Integer.parseInt(y_);
%>
4. JSP Comment
<%-- comment --%>
주석의 개념입니다.
<%-- if(y_!=null && !y_.equals(""))
y = Integer.parseInt(y_); --%>
5.JSP Directive
<%@ directive %>
JSP 페이지의 전체적인 구조에 영향을 미칩니다.
초기 설정을 할 수 있습니다.
IMPORT나 메서드 파일 등 을 삽입할 수 있습니다.
전체 구조에 대해 WAS에 지시를 내리며
지시어는 PAGE , INCULDE, TAGLIB 등이 있습니다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
경로 지정하기.
기존 경로를 확인하게 되면
http://localhost/WebPrj/calc.jsp
WebPrj라는 contextName 존재합니다. 기본 contextName을 지우고 각 각의 프로젝트명을 기준으로 잡을 수 있습니다.
적용을 했다면 서버를 재 등록하거나 사용 중인 프로젝트를 지우고 재시작해야 합니다.
'웹 프로그래밍 기초 > 자바기반의 웹&앱 응용SW 개발자' 카테고리의 다른 글
자바기반의 웹&앱 응용 SW개발자 양성과정 41일차 -63 (0) | 2020.04.28 |
---|---|
자바기반의 웹&앱 응용 SW개발자 양성과정 40일차 -62 (0) | 2020.04.27 |
자바기반의 웹&앱 응용 SW개발자 양성과정 38일차 -60 (0) | 2020.04.22 |
자바기반의 웹&앱 응용 SW개발자 양성과정 38일차 -59 (1) | 2020.04.22 |
자바기반의 웹&앱 응용 SW개발자 양성과정 37일차 -58 (0) | 2020.04.21 |
댓글