3. Servlet 작성 방법
< 서블릿 Servlet >
- 웹서버에서 실행되는 자바클래스(웹어플리케이션에서 실행되는 작은 프로그램)
- main()를 가지고 있지 않으며, 대신 service()가 호출된다.
; 두개의 파라미터를 받아들인다. ( request, response )
- 클라이언트의 요청을 받고 클라이언트에 응답을 할 수 있다.
- 서블릿 요청과 응답과정
1) 클라이언트의 서비스 요청 --> 객체 생성유무 파악
Container : 생성유무 체크. tomcat, resine 등
2) 없을 경우만 생성(메모리 로드)
3) Invoker 실행 ( Thread를 하나 만듬 )
4) 생성된 Thread에서 Service메소드를 호출.
5) 클라이언트에게 보냄. 결과는 mime type으로 보내며, 브라우저의 mime type 은 text/html
- 만드는 방법
1) HttpServlet을 상속받는다.
2) service메소드를 오버라이딩한후 원하는 작업을 한다.
3) web.xml에 서블릿매핑을 한다.
4) 서블릿을 호출한다.
- 만드는 방법
1) HttpServlet을 상속받는다.
2) service메소드를 오버라이딩한후 원하는 작업을 한다.
3) web.xml에 서블릿매핑을 한다.
4) 서블릿을 호출한다.
서블릿 작성 예제>
- web.xml 에 쌍으로 name과 url을 매핑하고 servlet(java)파일과 html파일을 만들어 본다.
1) web.xml
2) insert.html --> insert.do --> insert.java
3) register.html --> register.do --> RegisterServlet.java
설정 >
* eclipse : new - dynamic web project
* java 파일 : java resource / src 밑에
* html, jsp, 기타 : WebContent 밑에
* web.xml 파일 : WebContent/WEB-INF
- 항상 쌍으로 등록해야 한다.
< web.xml >
<?xml version="1.0" encoding="UTF-8"?>-------------------day01_servlet01 index.html index.htm index.jsp default.html default.htm default.jsp insert test.servlet.InsertServlet insert /insert.do register test.servlet.RegisterServlet register /register.do Report01 test.servlet.Report01 Report01 /Report01.do
[ web.xml ]
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>day01_servlet01</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>
<!-- 1.서블릿 정의 -->
<servlet>
<!-- 사용할 서블릿 이름 -->
<servlet-name>insert</servlet-name>
<!-- 서블릿클래스 설정 -->
<servlet-class>test.servlet.InsertServlet</servlet-class>
</servlet>
<!-- 2.서블릿 매핑 -->
<servlet-mapping>
<!-- 호출할 서블릿 이름 -->
<servlet-name>insert</servlet-name>
<!-- 서블릿을 호출할때 사용될 url설정 -->
<url-pattern>/insert.do</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>register</servlet-name>
<servlet-class>test.servlet.RegisterServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>register</servlet-name>
<url-pattern>/register.do</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>Report01</servlet-name>
<servlet-class>test.servlet.Report01</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Report01</servlet-name>
<url-pattern>/Report01.do</url-pattern>
</servlet-mapping>
</web-app>
[ 폼 데이터 전송방식 ]
1) GET방식
- 전송되는 데이터가 화면에 보임(보안X)
- 작은 용량의 데이터만 전송가능
- 간단하게 데이터를 전송할 수 있음
2) POST방식
- 전송되는 데이터가 화면에 안보임(보안O)
- 전송량의 제한이 없다.
[ insert.html ]
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>insert.html</title>
</head>
<body>
<form method="post" action="insert.do">
아이디<input type="text" name="id"/><br/>
비밀번호 <input type="password" name="pwd"/><br/>
이메일<input type="text" name="email"/><br/>
<input type="submit" value="가입"/>
<input type="reset" value="취소"/>
</form>
</body>
</html>
; 입력페이지 insert.html
[ InsertServlet.java ]
* service메소드
- 클라이언트가 서블릿을 호출하면 자동으로 호출되는 메소드
- 파라미터 request:클라이언트가 요청한 정보(보내온정보)를 갖는다.
- 파라미터 response:클라이언트에 응답기능을 갖는다.
package test.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class InsertServlet extends HttpServlet{
@Override
protected void service(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
//클라이언트가 보내온 정보 읽어오기
String id=request.getParameter("id");
String pwd=request.getParameter("pwd");
String email=request.getParameter("email");
System.out.println(id+"," + pwd +"," +email);
///////////// ////////////////////
//콘텐츠타입지정(응답문서타입과 문자셋 설정)
response.setContentType("text/html;charset=euc-kr");
//클라이언트 웹브라우져에 출력하기위한 출력스트림얻어오기
PrintWriter pw=response.getWriter();
//응답을 html로 하기
pw.println("<html>");
pw.println("<head></head>");
pw.println("<body>");
pw.println("전송된 아이디:" + id +"<br/>");
pw.println("전송된 비밀번호:" + pwd +"<br/>");
pw.println("전송된 email:" + email +"<br/>");
pw.println("</body>");
pw.println("</html>");
}
}
; 결과 페이지 주소
; 결과 페이지
ex> 아이디,비밀번호,전화번호,이메일,주소를 입력받아 넘기기.
[ register.html ]
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<form method="post" action="reg.do">
아이디 <input type="text" name="id"/><br/>
비밀번호 <input type="text" name="pwd"/><br/>
전화번호 <input type="text" name="phone"/><br/>
이메일 <input type="text" name="email"/><br/>
주소 <input type="text" name="addr"/><br/>
<input type="submit" value="전송"/>
<input type="reset" value="취소"/>
</form>
</body>
</html>
[ RegServlet.java ]
package test.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class RegServlet extends HttpServlet{
@Override
protected void service(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
//전송된 정보를 한글문자셋으로 설정하기
//post방식에서 적용됨
request.setCharacterEncoding("euc-kr");
//////// 클라이언트가 보내온 정보 얻어오기 //////////////
String id=request.getParameter("id");
String pwd=request.getParameter("pwd");
String email=request.getParameter("email");
String phone=request.getParameter("phone");
String addr=request.getParameter("addr");
//////// 클라이언트에 응답하기 ///////////////////////
response.setContentType("text/html;charset=euc-kr");
PrintWriter pw=response.getWriter();
pw.println("<html>");
pw.println("<head></head>");
pw.println("<body>");
pw.println("<font color='red'>");
pw.println("아이디 : " + id +"<br/>");
pw.println("비밀번호 : " + pwd +"<br/>");
pw.println("이메일 : " + email +"<br/>");
pw.println("전화 : " + phone +"<br/>");
pw.println("주소 : " + addr +"<br/>");
pw.println("</font>");
pw.println("</body>");
pw.println("</html>");
}
}