📌Servlet
: 웹 서비스를 위한 자바 클래스
ex) <form> action='주소'
- 웹 프로그래밍에서 클라이언트의 요청(Request)을 처리하고
그 결과를 다시 클라이언트에게 응답(Response)하는 Servlet클래스의 구현 규칙을 지킨 자바 프로그래밍 기술
💡 자바 어플리케이션 코딩을 하듯 웹 브라우저용 출력 화면(HTML) 을 만드는 방법
➰ 비쥬얼 스튜디오 코드 ➰
1. index.html 먼저 생성한다.
→ index라는 이름이 붙은 파일은 메인 페이지 역할을 한다.
2. form 태그 작성
→ 내부에 작성된 input 태그 값을 지정된 서버 또는 페이지로 제출 하는 역할
name : 어떤 input 태그에 작성된 값이 제출 된건지 알 수 있도록 반드시 input 태그에 작성해야한다.
action : input 태그 값을 전달할 서버 또는 페이지 주소를 작성하는 속성
http://localhost:8080/ServletProject1/ - http://아이피:포트번호 > 통신규약, 서버 컴퓨터 위치를 지정(고정되어있다고 생각) - /ServletProject1/ > 요청하고자 하는 내용을 나타내는 주소 |
method : 데이터 전달 방식 지정하는 속성 (get / post)
<form action="/ServletProject1/example1.do">
<!-- ServletProject1 프로젝트에 example1.do 요청을 전달한다.
-> 예제 1번을 수행해서 결과를 응답할 예정
-->
이름 : <input type="text" name="inputName"><br>
나이 : <input type="text" name="inputAge"><br>
<button type="submit">서버로 제출하기</button>
</form>
➰ 자바 코드 : 얻어오는 방법 ➰
✳ Get방식 : 요청하는 주소 뒤에 전달하려는 값(input태그에 작성된 값)을 문자열 형태로 붙여서 서버로 전달하는 방식 - 장점 : 단숨함, 캐싱 가능(요청 저장 가능 == 북마크, 즐겨찾기) - 단점 : 보안에 취약함(눈에 다 보임) * form태그, a태그, 주소창 직접 입력하는 것들이 GET 방식 * form태그 method 속성 기본값 ✳ POST방식 : HTTP Body를 통해서 데이터 전달 이 때, 문자 인코딩은 서버의 기본 문자 인코딩을 따름 우리 서버(Tomcat) -> ISO-8859-1이 기본 문자 인코딩 → 한글 깨짐 현상이 있어 문자 인코딩을 해줘야함 * req.setCharacterEncoding("UTF-8"); ✳ HttpServletRequest : 클라이언트 + 요청 정보가 담긴 객체 요청 시 전달된 input 태그 값(==파라미터) 얻어오는 방법 req.getParameter("input 태그 name 속성값") ✳ HttpServletResponse : 서버가 클라이언트한테 응답하는 방법을 제공하는 객체 |
1. Servlet 클래스 만들기
- Servlet 클래스를 만들기 위해서는 반드시 javax.servlet.http.HttpServlet 추상 클래스를 상속 받아야한다.
- doGet() doPost() 필요한 형태로 오버라이딩 진행
package edu.kh.servlet;
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 ServletEx1 extends HttpServlet {
! ServletProject1/example1.dp 주소로 요청이 왔을때
해당 클래스가 응답 할 수 있도록 연결하는 작업이 필요함
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
}
}
- 비쥬얼소스코드에서 작성한 태그값을 얻어올 수 있도록 작성
package edu.kh.servlet;
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 ServletEx1 extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String inputName = req.getParameter("inputName");
String inputAge = req.getParameter("inputAge");
System.out.println(inputName);
System.out.println(inputAge);
}
}
2. web.xml 연결하기
사용자가 요청한 URL을 분석한 어떤 서블릿 클래스에 요청 내용을 전달할지 찾음
ServeltProject1/example1.do 주소로 요청이 왔을때 ServletEx1이 응답할 수 있도록 연결 작업이 필요하다.
- ServletEx1 클래스 Servlet으로 등록(자격부여)
- Servlet으로 등록하고자하는 클래스 파일의 패키지명+클래스 작성
<servlet>
<servlet-name>example1</servlet-name>
<servlet-class>edu.kh.servlet.ServletEx1</servlet-class>
</servlet>
- 요청 주소를 처리할 Servlet과 연결 지정(프로젝트명 없이 요청 주소만 작성해도 된다!)
<Servlet-mapping>
<servlet-name>example1</servlet-name>
<url-pattern>/example1.do</url-pattern>
</Servlet-mapping>
💡
- 비쥬얼 스튜디오 코드
- input 태그에 name 속성을 반드시 작성해야한다. - 자바 Servlet 클래스
- HttpServlet 추상 클래스 상속 받기
- doGet( ) / doPost ( ) 필요한 형태로 오버라이딩 진행
- input 태그값(파라미터) 얻어오는 방법
req.getParameter("input 태그 name 속성값")
➰ 비쥬얼 스튜디오 코드 ➰
<form action="/ServletProject1/example2.do" method="get">
주문자 : <input type="text" name="orderer"><br>
<label for="">
<input type = "checkbox" name="coffee" value="아이스 아메키라노">
아이스 아메리카노
</label>
<br>
<label for="">
<input type = "checkbox" name="coffee" value="카라멜 마끼야또">
카라멜 마끼야또
</label>
<br>
<label for="">
<input type = "checkbox" name="coffee" value="녹차 라떼">
녹차 라떼
</label>
<br>
<label for="">
<input type = "checkbox" name="coffee" value="초코칩 프라페">
초코칩 프라페
</label>
<br>
<label for="">
<input type = "checkbox" name="coffee" value="민트초코 프라페">
민트초코 프라페
</label>
<br>
<button>주문서 제출하기</button>
</form>
➰ 자바 코드 : 출력 하는 방법 ➰
! 위 코드를 보면 input name 속성은 모두 coffee인 것을 알 수 있다.
getParameter( )은 input 태그의 name이 하나 일때만 사용 가능하여 배열을 이용해야하고,
getParameterValues( )를 사용하면된다.
package edu.kh.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 ServletEx2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String orderer = req.getParameter("orderer");
String[] coffee = req.getParameterValues("coffee");
if (coffee != null) { //
// 향상된 for문
for (String c : coffee) {
System.out.println(c);
}
}
System.out.println("주문자 : "+orderer);
! 만일 서버가 클라이언트 정보를 출력하고 싶다면 resp.getWriter() 을 이용하면 된다.
resp.getWriter() : 서버가 클라이언트에게 응답할 수 있는 출력 전용 스트림을 얻어옴
여기서, 어떤 형식인지 문자 인코딩은 어떤건지 지정해주지 않으면 정상 출력되지 않아
resp.setContentType("text/html;charset=UTF-8");로 지정해주면 된다.
resp.setContentType("text/html;charset=UTF-8");
PrintWriter out = resp.getWriter();
! HTML 코드를 자바 (Servlet)에서 작성하여 클라이언트와 연결된 응답 출력용 스트랩을 이용해 출력
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<title> "+orderer+"의 주문 목록</title>");
out.println("</head>");
out.println("<body>");
out.println("<ul>");
if(coffee != null) {
for(String c:coffee) {
out.println("<li>"+ c +"</li>");
}
}
out.println("</ul>");
out.println("</body>");
out.println("</html>");
}
}
💡
- 자바 Servlet 클래스
- input 태그값(파라미터) 1개 이상인 것을 얻어오는 방법
req.getParameterValues("input 태그 name 속성값")
- 출력하는 방법
resp.setContentType("text/html;charset=UTF-8");
PrintWriter out = resp.getWriter();
'ON > Servlet' 카테고리의 다른 글
[Servlet] JSTL (0) | 2023.07.04 |
---|---|
[Servlet] Serlvet/JSP 내장 객체와 범위 (0) | 2023.07.04 |
[Servlet] EL방식 및 작성법(JSP와 차이) (0) | 2023.07.03 |
[Servlet] 아파치 톰캣 / JSP 이용하기 (0) | 2023.06.29 |
[Servlet ] JAVA 설정 / 아파치 톰캣 / 오라클 포트 연결 / 서버 연결하기 (0) | 2023.06.28 |