Servlet 은 http라는 클래스를 상속받는다.
next 를 누르면
url mappings 를 확인 가능한데
이를 통해 web browser에서 servlet 을 동작시키기 위해
실제 java 클래스의 이름대신 servelt 을 요청하기 위한 문자열을
servlet 클래스와 맵핑 시킬 수 있다.
경로를 그대로 지정해 주면 보안상의 문제가 발생할 가능성이 있는데 그것을
미연에 방지하고자
사용자가 정의한 단어에 맵핑되어 접근한다.
다음을 누르면
v 표가 있는 것은 Servlet의 생명주기를 일컫는다
init() 은 최초에 한 번 초기화(호출,실행) 되는 메서드이다.
: 필요한 자원의 준비
service() 는 사용자가 어떤 요청을 했을 때 그것을 어떻게 처리할지를 고려하는 메서드이다.
service()는 doget, dopost를 호출할 수 있는데, 이것은 데이터의 송수신을 위해 쓰이며
php의 get과 post와 유사하다.
destroy() 는 서버가 종료될 때 1번 호출되는 메서드이다.[어플리케이션 실행 종료, 자원 초기화]
package com.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 Test
*/
//annotation url 매핑이 됨
@WebServlet("/Hello")
public class Test extends HttpServlet {
private static final long serialVersionUID = 1L; //byte 단위로 보낼 때 데이터를 직렬화 시키기위한 아이디 값
/**
* @see HttpServlet#HttpServlet()
*/
public Test() { //생성자
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
*/
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 서비스 되는 곳
response.setContentType("text/html; charset=euc-kr");
PrintWriter out = response.getWriter();
//html 문서 만들기
out.print("<html>");
out.print("<body>");
out.print("Hello World!!");
out.print("</body>");
out.print("</html>");
}
}
서블릿에서 hello world 를 print 하는 예제이다.
여기서 실제 작동하는 곳은 service 구간이므로 서비스 영역 내에서 명시하여야 한다.
response의 setcontenttype 메서드를 통해 콘텐츠 타입을 지정하고
객체를 생성하여 getwriter 로 html 문서를 만들어주었다.
form 태그를 통해 사용자로부터 요청(데이터)을 받고
사용자에게 응답을 할 수 있다.
<form action="abc">와 같다면, action 속성 abc는 값을 어디로 보낼지를 의미한다.
<input type="text" name="id">에서 name 속성은 어떤 값을 보내는가이다.
<input type="submit"> submit을 통해 보내는 행위를 한다.[값을 보내는 시점]
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<form action="Ex01Dattasend">
<input type = "text" name="data">
<input type ="submit" value ="발동">
</form>
</body>
</html>
package com.servlet;
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("/Ex01Dattasend")
public class Ex01Dattasend extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// html 문서에서 받아온 input tag의 name 속성 값
String data = request.getParameter("data");
System.out.println(data);
}
}
HTML 문서로 부터 받은 입력값 "data" 를
서블릿에서 받아서, String 자료형에 넣어 선언해주고
콘솔창에 출력해주는 예제이다.
이때 @webservlet은 URL을 지정하는데, 기본 URL 은 최초설정된 HTML 문서와
연동되게 되어있다.
form 태그에 action속성은 서블릿 Ex01dattasend 를 호출한다는 말이다.
최종적으로 Submit을 통해서 서버로 값을 전달하게 된다.
여기서 다시 받은 값을 PrinterWriter 메서드를 통해 객체를 생성하여 사용자에게 보여줄 수 있다.
package com.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;
@WebServlet("/Ex01Dattasend")
public class Ex01Dattasend extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// html 문서에서 받아온 input tag의 name 속성 값
String data = request.getParameter("data");
System.out.println(data);
response.setContentType("text/html; charset=euc-kr");
PrintWriter out = response.getWriter();
out.print("<html>");
out.print("<body>");
out.print("입력한 데이터: <b>" +data);
out.print("</body>");
out.print("</html>");
}
}
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<form action="Ex02Plus">
<input type="text" name="num1">+<input type="text" name="num2">
<input type="submit">
</form>
</body>
</html>
package com.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;
@WebServlet("/Ex02Plus")
public class Ex02Plus extends HttpServlet {
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// request.getparameter의 반환타입은 스트링이므로, 변환하여야 한다.
int num1 = Integer.parseInt(request.getParameter("num1"));
int num2 = Integer.parseInt(request.getParameter("num2"));
response.setContentType("text/html; charset=euc-kr");
PrintWriter out = response.getWriter();
out.print("<html>");
out.print("<body>");
out.print(num1 +"+"+num2+"="+(num1+num2));
out.print("</body>");
out.print("</html>");
}
}
사용자에게 x + x 연산을 입력받아 답을 표기하는 서블릿이다.
이걸 조금 더 변형해서
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<form action="ex03">
<input type="text" name="num1">
<select name="operator">
<option value="+">+</option>
<option value="-">-</option>
<option value="*">*</option>
<option value="/">/</option>
</select>
<input type="text" name="num2">
<input type="submit">
</form>
</body>
</html>
package com.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;
@WebServlet("/ex03")
public class ex03 extends HttpServlet {
public ex03() {
super();
}
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int num1 = Integer.parseInt(request.getParameter("num1"));
int num2 = Integer.parseInt(request.getParameter("num2"));
//int operator = Integer.parseInt(request.getParameter("operator"));
String operator = request.getParameter("operator");
response.setContentType("text/html; charset=euc-kr");
PrintWriter out = response.getWriter();
out.print("<html>");
out.print("<body>");
if (operator.equals("+")) {out.print(num1 +"+"+num2+"="+(num1+num2));}
if (operator.equals("-")) {out.print(num1 +"-"+num2+"="+(num1-num2));}
if (operator.equals("*")) {out.print(num1 +"*"+num2+"="+(num1*num2));}
if (operator.equals("/")) {out.print(num1 +"/"+num2+"="+(num1/num2));}
out.print("</body>");
out.print("</html>");
}
}
select 박스를 통해 사칙연산 기호를 받을 수 있게 하였다, 기본적으로 value 값은 String 형태로
서블릿에서 받게 되므로, 그것을 이용하여 변수의 문자열을 호가인하는 equals 메서드를 사용하였다.
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
<style>
input{
width : 50px;
}
</style>
</head>
<body>
<form action="ex04Table">
몇개의 방을 만듭니까?? <input type="text" name="num1">행<input type="text" name="num2"> 열
<input type="submit" value="SEND">
</form>
</body>
</html>
package com.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;
@WebServlet("/ex04Table")
public class ex04Table extends HttpServlet {
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int num1 = Integer.parseInt(request.getParameter("num1"));
int num2 = Integer.parseInt(request.getParameter("num2"));
response.setContentType("text/html; charset=euc-kr");
PrintWriter out = response.getWriter();
out.print("<html>");
out.print("<head>");
out.print("<style>");
out.print("p{ font-weight : bold; font-size: 35px; color: red;}");
out.print("</style>");
out.print("</head>");
out.print("<body>");
out.print("<table border = '1'>");
for(int i=1; i<=num1; i++) {
out.print("<tr>");
for (int j =1; j<=num2; j++) {
out.print("<td>"+j+"</td>");}
out.print("</tr>");
}
out.print("</table>");
out.print("<p>생성완료");
out.print("</body>");
out.print("</html>");
}
}
두개의 값을 입력받아서 테이블의 열과 행을 생성하는 코드이다.
여기서 서블릿 코드를 확인하면 스타일 태그를 적용한 것을 알 수 있는데, 원래 페이지의 스타일 태그는
서블릿으로 넘어가지 않기 때문에 서블릿에서 스타일 태그를 따로 지정해 주었다.
'웹 구축 > Jsp & Servlet' 카테고리의 다른 글
JSP 3 쿠키, 세션 (0) | 2021.01.28 |
---|---|
JSP 2 - 지시자. (0) | 2021.01.28 |
JSP 1 (0) | 2021.01.27 |
Servlet 3 (0) | 2021.01.27 |
Servlet (0) | 2021.01.26 |