본문 바로가기

웹 구축/Jsp & Servlet

Servlet 2

 

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