본문 바로가기

JSP

서블릿의 get, post방식

# 서블릿 
톰캣이 만들어준 java파일



# 간단한 서블릿 만들기 
-    src -> new -> Servlet -> 패키지와 파일명 작성뒤 피니시하면 
-    WebContent->WEB-INF-> web.xml에 <servlet>부분이 생성됨
(만약 톰캣연동설정시 모듈버전이 3.0이면 이부분 자동생성안될수도있음! )



[ex] 서블릿이되는조건은 
-    extends HttpServlet의 자손이면됨
-    import javax.servlet.http.HttpServlet;해야함
-    HttpServlet은 추상클래스임(객체생성불가) , 메서드는 추상아니라서 그냥쓰면됨 
         ( 단, 오버라이딩이므로 접근제어자는 좁아질수없음)



# 이클립스로 만든 기본 서블릿

jjj.java
======================
package com.jaeju;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class jjj extends HttpServlet {
private static final long serialVersionUID = 1L;

        public jjj() {
            super();
        }

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}

}


그리고 해당프로젝트의 web.xml부분에 Servlet이 생성될때마다 추가되는내용은 다음과같음
 web.xml
 ================================================
  <servlet>          // 서블릿과 서블릿 매핑이 추가됨 
    <description></description>          
    <display-name> jjj</display-name>          
    <servlet-name> jjj</servlet-name>
    <servlet-class>com.jaeju.jjj</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name> jjj </servlet-name>
    <url-pattern> /jjj </url-pattern>
  </servlet-mapping>

-    <url-pattern> /jjj </url-pattern> 이부분에 의해 http://localhost:8282/ppp1/jjj 로 실행됨 ( jjj.java아님 )
-    /jjj 에서 / 는 현재프로젝트명을 말하는 절대경로임 => /ppp1/jjj 
-     url에서 포트번호8282다음 / 는 절대경로로서 webapps를 말함!      webapps/ppp1/jjj 임 
-    new->class로만들면 web.xml에 직접 추가해줘야하고 
-    new->servlet로 만들면 web.xml에 자동추가되어있음
-    url-pattern이 다른 서블릿이랑 중복안되게 조심할것! 뻘짓하는수가있음

-    하지만 a태그에서 /는 프로젝트명이아닌 8282 까지임!!! 
-    이유는 html이기때문에!! 위에는 jsp라서 프로젝트명이붙지만 html에서의 절대경로 / 는 맨처음 시작을 뜻함!!

-    이미지 상대경로/절대경로관련















# get방식

-    get방식이면 자동으로만들어준 서블릿의 doGet메서드를 호출하고
-    post방식이면 자동으로만들어준 서블릿의 doPost을 호출함
-       post방식은 폼태그를 구현해줘야 실행가능하다



[ex] get방식과 post방식으로 서블릿의 doGet, doPost메서드 실행하기
a.jsp
=========
// a태그로 get방식설정
         <a href="/ppp1/jjj?a=123a태그"> 연결이요</a>
         

// form태그로 get방식설정
         <form action="/ppp1/jjj" method="get">
          <input type="text" name="a">
          <input type="submit">
         </form>
        
// form태그로 post방식설정
         <form action="/ppp1/jjj" method="post">
          <input type="text" name="a">
          <input type="submit">
         </form>
   


jjj.java       // web.xml의 서블릿매핑에 의해 이jjj.java가 실행되는거임!!
==========
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
PrintWriter out=response.getWriter();     // response객체를 이용하여 out객체 얻음
out.println("get방식임"+"<br>");
out.println(request.getParameter("a"));
}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
PrintWriter out=response.getWriter();
out.println("post방식임"+"<br>");
out.println(request.getParameter("a"));
}


-    get방식 3번째설정방식
         =>  url에 http://localhost:8282/ppp1/jjj 해서 실행




[ 실행 결과 url ]
-    a.jsp실행하면 get방식이라면 url이 다음과같이바뀜 

-    a.jsp실행하면 post방식이라면 url이 다음과같이바뀜

-    웹상에서의 절대경로( / )는 webapps임!
-    웹상에서의 상대경로는 프로젝트명( 프로젝트명/ )임!
<form action="/Test1" > 이나 <a href="/Test1"> 은
webapps/Test1임...그래서 404에러남

아래와 같이해야 절대경로로서 /ppp1/Test1 이 인식됨
<form action="/ppp1/Test1" > 

아래는 상대경로로서 해당프로젝트인 /ppp1/Test1이 인식됨 
<form action="Test1" >