동적 웹 페이지 동작
- 요청할때 요청한 문서를 서버에서 그 요청에 맞는 문서를 생성해서 다시 리턴해준다.
자바를 기반으로 하는 JSP는 서버 측 웹 프로그래밍 언어 중 하나
JSP는 서블릿 기술의 확장이다.
Servlet
servlet container
자바서버를 실행할 수 있는 환경을 만들어 준다.
jsp를 어떻게 쓰는지만 알면 된다.
JSP 생명주기
JSP 개발 환경 도구
자바 개발환경 : JDK
웹서버 : 톰켓
IDE : 이클립스
자바 개발 키트
JDK
자바 실행 환경
JRE
패스 설정
java_home
utf-8 설정
톰켓 설정
server.xml
<!-- docBase : 컨텍스트에 대한 실제 웹 애플리케이션이 위치한 경로 -->
<!-- path : 웹 애플리케이션의 컨텍스트 이름, 웹브라우저에서 실제 웹 애플리케이션을 요청하는 이름이다. -->
<!-- reloadable : 실행 중 소스코드가 수정될 경우 바로 갱신할지 설정한다. 서버를 restart하지 않아도 구현가능 만약 false로 설정하면 톰켓을 다시 중지했다가 실행해야 변경된 소스가 반영된다. -->
<Context docBase="Chap01_intro" path="/Chap01_intro" reloadable="true" source="org.eclipse.jst.jee.server:Chap01_intro"/></Host>
jsp 요청 url
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<!--
* 브라우저에서 웹 애플리케이션 요청
http://localhost:8080/Chap01_intro/hello.jsp
http://IP주소:포트번호/컨텍스트이름/요청파일이름
* 컨텍스트 : 톰켓의 server.xml에 등록하는 웹 애플리케이션을 컨텍스트라고 한다.
톰켓입장에서 인식하는 한개의 웹 애플리케이션임.
- 웹 애플리케이션당 하나의 컨텍스트가 등록이 된다.(WAS에)
- 웹 애플리케이션 이름과 같을수도 있고 다를 수도 있다.
- 컨텍스트 이름은 중복하면 안된다.
- 웹 애플리케이션의 의미를 나타낼수 있는 명사형으로 지정.
-->
<html>
<head>
<meta charset="UTF-8">
<title>Hello JSP</title>
</head>
<body>
<h1>안녕하세요 JSP 테스트 페이지 입니다.</h1>
JSP를 열심히 학습하도록 합시다.
</body>
</html>
현재 시간값 출력하는 jsp
<%@page import="java.util.Calendar"%>
<%@ 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>
<%-- <% %> : 스크립트릿이라고함.
JSP 파일에서 자바코드를 삽입할때 반드시 표기를 해야함.
--%>
<%
Calendar calendar = Calendar.getInstance();
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);
%>
</head>
<body>
<%-- <%= %> : 스크립트릿의 일종으로 표현식(expression)임.
값을 나타내고자 할때 사용함.
;을 붙이지 아니함을 반드시 주의해야한다.
--%>
<h1>현재시간 : <%=hour %>시 <%=minute %>분 <%=second %>초</h1>
</body>
</html>
Servlet
- .java확장자
- 클라이언트 요청에 동적으로 작동하고 응답은 html을 이용
- java thread를 이용 서버 부하를 줄임 (톰켓)
- mvc 패턴에서 controller로 이용, view(jsp), model
톰켓 홈페이지에서
Source 에서 zip파일 다운로드
Servlat 문서 작성 하기
소스 연동
톰켓 아래에 붙여넣기
f3 키누른다.
소스와 연결
servlet 만들기
어노테이션으로 매핑
package kr.gov.servlet1;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//URL 매핑코드가 @WebServlet 어노테이션에 표기가 된다.
// @WebServlet어노테이션보다 web.xml에서 지정한 매핑코드가 우선순위가 훨씬 높다.
//@WebServlet("/HServlet")
//서블릿 파일은 HttpServlet클래스를 자동으로 상속받는다.
public class HelloServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
//생성자
public HelloServlet() {
}
/*
* 여기서 2가지 메서드가 나온다. -- doGet(), doPost()
* 이 서블릿 파일이 처리하는 부분임.
* 이 서블릿을 호출할때 즉 클라이언트에서 요청이 들어올때,
* get방식이냐, Post방식이냐에 따라 호출이 달라짐.
* http://localhost:8080/Chap02_Servlet-1/HServlet
* 보통, doGet()메서드는 폼(form)을 그냥 출력하는 형태로 많이 쓰이고,
* doPost() 메서드는 데이터를 가동하거나 처리코드를 실행할때 많이 사용함.
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("Hello Servlet!");
System.out.println("doGet()");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("Hello Servlet!");
System.out.println("doPost()");
}
/*
* 소결론
* 1. JSP 파일 : HTML파일내에 JSP코드를 넣는 것.
* 2. Servlet 파일 : .JAVA파일이고, 반드시 매핑을 해서 사용해야 한다.
*/
}
web.xml에서 서블릿 매핑하기
어노테이션 매핑보다 우선순위가 높다.
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>Chap02_Servlet-1</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<!-- 어노테이션 했던것을 => 매핑해야할 서블릿 파일로 지정 -->
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>kr.gov.servlet1.HelloServlet</servlet-class>
</servlet>
<!-- 위에서 지정한 매핑할 서블릿 파일을 url-pattern테그를 이용해서
url창에 표식이 되도록 한다. 위에서 서블릿네임으로 지정한 값과 동일하게 입력을
해줘야 한다.
-->
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/servlet</url-pattern>
</servlet-mapping>
</web-app>
apache는 웹서버
apache 톰켓은 was
웹 서블릿 사용하기
http://localhost:8080/Chap02_Servlet-1/NowTime
package kr.gov.servlet2;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
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("/NowTime")
public class NowTime extends HttpServlet {
private static final long serialVersionUID = 1L;
public NowTime() {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//문자셋 지정
response.setContentType("text/html; charset=utf-8");
/*
* 서블릿 : JSP표준 이전에 등장한 표준이다.
* 자바 웹 애플리케이션 개발이 목적이다.
*
* 프로그램 실행 : 어노테이션 매핑방법 web.xml에서의 매핑방법이 있음.
* 어노테이션 매핑방법 => 프로그램 개발을 완성한 후 릴리즈 했을때
* 수정시 자바소스파일도 수정해야되고 아울러
* 재컴파일을 계속하게 될것이다.=>유지보수에 용이하지 않다.
* web.xml에서의 매핑방법 => 낫긴 하지만, 이건 경우에 따라서 각각 다르게 구현
* 되어야함.
*/
PrintWriter out = response.getWriter();
out.println("<HTML>");
out.println("<HEAD><TITLE>현재 시간</TITLE></HEAD>");
out.println("<BODY>");
out.println("지금시간은");
out.println(new Date());
out.println("입니다.");
out.println("</BODY>");
out.println("</HTML>");
out.close();
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
get 방식 post 방식 servlet 호출
1. html을 만들어준다.
form테그를 이용해서 /GetorPost실행하여 doGet()를 직접 호출함.
입력타입이 submit : 전송의미의 버튼이 나타남 (action값으로 전송한다)
value : 값으로 설정한 라벨로 표기됨.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>form테그</title>
</head>
<body>
<!-- form테그를 이용해서 /GetorPost실행하여 doGet()를 직접 호출함. -->
<form action="GetorPost" method="get"> //post
<!-- 입력타입이 submit : 전송의미의 버튼이 나타남 (action값으로 전송한다)
value : 값으로 설정한 라벨로 표기됨. -->
<input type="submit" value="전송">
</form>
</body>
</html>
2. servlet을 만들어준다.
package kr.gov.servlet3;
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("/GetorPost")
public class GetorPostServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public GetorPostServlet() {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("doGet메서드 호출됨.");
response.setContentType("text/html; charset=utf-8");
//출력스트림 획득
PrintWriter writer = response.getWriter();
writer.print("안녕하세요");
writer.println("<html>");
writer.println("<head>");
writer.println("</head>");
writer.println("<body>");
writer.println("<h1>doGet방식입니다. 반갑습니다.</h1>");
writer.println("</body>");
writer.println("</html>");
writer.close();
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("doPost메서드 호출됨.");
response.setContentType("text/html; charset=utf-8");
//출력스트림 획득
PrintWriter writer = response.getWriter();
writer.print("안녕하세요");
writer.println("<html>");
writer.println("<head>");
writer.println("</head>");
writer.println("<body>");
writer.println("<h1>doPost방식입니다. 반갑습니다.</h1>");
writer.println("</body>");
writer.println("</html>");
writer.close();
}
}
get 방식 post 방식 servlet 호출2
1. html을 만들어준다 , login 화면만들기
form 테그 사용
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인 화면</title>
<style type="text/css">
/* 인라인 스타일의 css */
#LoginFormArea {
text-align: center;
width: 250px;
margin: auto;
border: 1px solid red;
}
h1 {
text-align: center;
color: blue;
}
</style>
</head>
<body>
<h1>로그인</h1>
<section id="LoginFormArea">
<form action="Login" method="get">
<label>아이디 : </label> <!-- label은 브라우저에 글자를 표시하는 테그 -->
<!-- required속성 : 반드시 입력하라는 속성 -->
<input type="text" name="id" id="id" required="required">
<br/><br/>
<label>비밀번호 : </label>
<input type="password" name="passwd" id="passwd" required="required">
<br/><br/>
<input type="submit" value="로그인">
</form>
</section>
</body>
</html>
http://localhost:8080/Chap02_Servlet-1/Login?id=아이디값&passwd=passwordvalue => servlet에 넘겨줌
1. servlet을 만들어준다 , login 화면만들기
package kr.gov.servlet4;
import java.io.IOException;
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("/Login") //form테그 action Login을 찾는다.
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public LoginServlet() {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("doGet() 호출됨");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
콘솔창
doGet() 호출됨