Java Server Pages로서 정적 HTML과 동적인 컨텐츠를 섞어놓은 기술 서블릿 처럼 동적인 페이지를 기술 할 수 있다.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>Order Confirmation</TITLE>
<LINK REL=STYLESHEET
HREF="JSP-Style.css"
TYPE="text/css">
</HEAD>
<BODY>
Thanks for ordering <%= request.getParameter("title") %>!
</BODY>
</HTML>
다음은 JSP예시이다. <%= request.getParameter("title")%> 부분이 HTML 내부에 동적인 JAVA코드가 삽이되어있는 부분이다. JSP 가 실행되면 서블릿(Servlet)으로 변환되며웹 어플리케이션 서버에서 동작되면서 필요한 기능을 수행하고
그렇게 생성된 데이터를 웹페이지와 함께 클라이언트로 응답한다.
2. JSP 와 Servlet의 차이
JSP는 HTML 내부에 JAVA코드를 넣어 처리하고 Servlet은 JAVA코드내에 HTML을넣어 표시한다. 따라서 Servlet은 JSP보다 코드를 읽고 사용하기에 불편하다는 단점이 존재한다 따라서 Servlet은 데이터를 프로세싱 하기에 적합하고, JSP는 데이터를 보여주기에 적합하다
3. JSP 문법
1) JSP Expression
<%= 내용 %> 으로서 out 객체를 통해 print해주는 역할을 한다.
2) JSP Scriptlets
<% Java Code %> 로서 좀 더 복잡한 기능 구현을 하고 싶다면 <% %>사이에 JAVA코드를 넣어서 사용가능하다
ex) <% if(a == 1) out.println("aa"); %>
3) JSP Declarations
<%! private int count = 0; %> 처럼 필드, 메소드를 정의하는 방법이다. 사용자는 정의한 count 를
<%= count %>를 통해 출력하거나 사용할 수 있다.
4)JSP Directive
JSP전체 구조에 영향을 미친다
JSP 서블릿 컨테이너에 지시를 하는 역할을한다
#1 page Directive
페이지 지시는 JSP페이지의 가장 위에 적어주며 import하거나 페이지에 명령을 내리는곳에 사용한다
<%@ page import = "java.util.*" %>
<%@ page contentType = "text/html" %>
#2 include Directive
<%@ include file = "test_url"> 모든 페이지 하단부에 있는 주소같은 부분을 복사 붙여넣기 하여 사용하는것은 좋지않은 방법이다 따라서 이러한 include를 통하여 사용하는것이 좋다.
#3 taglib Directive
태그를 모아놓은 라이브러리로서 외부의 라이브러리 파일을 JSP내에 HTML이나 XML태그처럼 사용할 수 있게 함
등등 여러 말로 표현할 수 있겠지만 예를 들어 3초 간격으로 작동하는 모터가 있다고 가정하자, 모터가 3초마다 움직이게 프로그래밍을 해야 할 텐데 이때 작은 모터에 큰 컴퓨터를 사용하는 건 매우 비효율적이다 따라서, 소형 컴퓨터를 사용하면 매우 효율적일 테고, 아두이노, 라즈베리파이를 초소형 컴퓨터로 생각하면 좋을 것 같다.
참고자료 : 아두이노 스펙 & 아두이노 기본 핀 설명 아두이노 스펙기본 핀 설명
2. 통합 개발 환경 (IDE) 설치하기
아두이노 공식 홈페이지에서 제공하는 소프트웨어를 다운로드한다. 홈페이지에서는 Online IDE와 Offline IDE를 제공하고 있으며 실습은 Offline IDE를 다운로드하여 진행하도록 할 예정이다.
기본적인 흐름을 알기 위한 코드로 form 안에 username을 입력하기 위한 input과 password를 입력하기 위한 input이 존재한다 form은 POST방식으로 전달하기 위해 method = POST이며, action은 실제 서블릿에서 DoLogin이라는 함수에서 처리한다는 의미이다.
#3. index.html 결과 화면
html 결과
만약 html을 성공적으로 작성하고 실행하였다면 다음과 같은 결과가 확인된다.
이때 사용자가 제출 버튼을 누르게 된다면 다음과 같은 오류 화면이 발생할 것이다.
error 화면
왜냐하면 /DoLogin을 처리해줄 서블릿이 존재하지 않기 때문이다 따라서 /DoLogin을 처리해줄 서블릿을 생성해보자.
#4. 서블릿 생성 하기
서블릿 패키지 생성
생성된 프로젝트에Src를 우클릭하여 다음과 같이Package를생성한다. 패키지명은 원하는 명으로 해도 상관없으나 이 프로젝트에서는 servlet이라고 패키지명을 작성하였다.
서블릿 생성
생성된 패키지를 우클릭하여 New > Servlet을 클릭하여 서블릿을 생성한다
서블릿 생성
서블릿 명은 DoLogin으로 작성 하였다 (이는 html form에서 action을 DoLogin으로 지정했기 때문)
서블릿 생성
다음은 자동으로 URL이 /DoLogin으로 매핑되어있으므로 건드리지 않고 넘어간다.
서블릿 생성
다음은 재정의 하여 사용할 함수의 목록을 보여준다 아래에 현재 doPost와 doGet이 체크되어있지만 실습에서는 POST를 사용하기로 하였으므로 doPost만 체크하고 서블릿 생성을 완료한다.
생성된 DoLogin 서블릿의 코드는 다음과 같다.
package servlet;
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;
/**
* Servlet implementation class DoLogin
*/
@WebServlet("/DoLogin") //URL에노테이션으로 되어 있음
public class DoLogin extends HttpServlet { //HttpServlet상속 받아야함
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public DoLogin() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
String username = request.getParameter("username");
String password = request.getParameter("password");
PrintWriter out = response.getWriter();
String htmlResponse = "<html>";
htmlResponse += "<h2> Your name is : " + username + "<br/>";
htmlResponse += "<h2> Your password is : " + password + "<br/>";
htmlResponse += "</html>";
out.println(htmlResponse);
}
}
String username = request.getParameter("username")으로 form의 username input이 보낸 value를 저장하고
PrintWriter를 사용해 html을 response해준다.
@WebServlet("/DoLogin")이 부분이 form에서 /DoLogin으로 요청을 보낸 부분을 처리하겠다고 명시해주는 에노테이션 부분이다. 에노테이션에 대한 자세한 설명은 ~~에서 확인할 수 있다.
#5. 프로젝트 실행 결과
다음과 같이 서블릿을 생성을 완료하고 이전과 같이 html을 제출하였다면 다음과 같은 화면이 보이게 될 것이다.
프로젝트 성공
5. 설명
코드 구조
프로젝트에서 작성한 구성을 그림으로 표현하면 다음과 같다 사용자는 html폼을 이용하여 POST방식으로 /DoLogin이라는 요청을 보내고 서블릿에서는 DoLogin 클래스의 재정의된 doPost를 사용하여 이를 처리하여 사용자에게 다시 반환하는 방식이다.
먼저 N개를 2로 나눈 N/2의 몫을 P라 할 때 P가 처음 시작점이 될 것 이라고 생각했고, 첫번째 행부터 P번째 행까지는 -1, +1열까지 N부터 P번째 행까지는 +1 해가는 방식으로 2가지의 개수를 합치고 더해서 총 개수를 구하는 방식을 이용했다.
2. 코드
#include <iostream>
using namespace std;
int total;
int num;
int ary[49][49];
int sum = 0;
void check() {
int center = num / 2;
sum = 0;
for (int i = 0; i < center; i++) {
for (int j = center-i; j <= center+i; j++) {
sum += ary[i][j];
}
for(int k = center - i; k <= center + i; k++){
sum += ary[num-1-i][k];
}
}
for(int m = 0; m<num; m++){
sum += ary[center][m];
}
}
int main()
{
int temp = 0;
cin >> total;
for (int i = 0; i < total; i++) {
cin >> num;
for (int j = 0; j < num; j++) {
for (int k = 0; k < num; k++) {
scanf("%1d", &ary[j][k]);
}
}
check();
cout << "#" << i + 1 << " " << sum << endl;
}
}