WEB/JSP

3. Servlet 작성 방법

choi121xx 2013. 4. 18. 12:02

 

 

< 서블릿 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>");
    }
}