✅ web.xml 파일에서 서블릿을 등록
package com.servlet.controller;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//일반 클래스를 서블릿 역할로 만들기
// HttpServlet에 정의되어 있는 메소드를 재정의
// 1) doGet() : get방식으로 요청한 내용을 처리하는 메소드
// 2) doPost() : post방식으로 요청한 내용을 처리하는 메소드
// 3. 서버에서 요청을 받을 수 있게 등록해야함 -> web.xml파일 이용, @어노테이션 이용
// 1.) 생성한 서블릿 클래스는 서버에 등록
// 2.) 서블릿을 실행한 주소를 매핑(연결시켜줌)
public class BasicServletController extends HttpServlet{
private static final long serialVersionUID = 5412475190290065154L;
public BasicServletController() {}
// doGet selvet 완성
@Override
public void doGet(HttpServletRequest request, // 요청클래스
HttpServletResponse reponse) // 받는 클래스
throws ServletException, IOException{
// 예외처리 해줘야함
System.out.println("서블릿의 do get메소드가 실행됨");
}
// doPost selvet 완성
@Override
public void doPost(HttpServletRequest request, // 요청클래스
HttpServletResponse reponse) // 받는 클래스
throws ServletException, IOException{
// 예외처리 해줘야함
System.out.println("서블릿의 do post메소드가 실행됨");
}
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
<display-name>02_servletdat</display-name>
<!--
생성한 서블릿 등록하기
<servlet>태그를 이용해서 생성한 서블릿클래스를 등록함
<servlet>태그의 자식으로
<servlet-name> : 서버내에서의 서블릿클래스의 이름 등록
<servlet-class> : 클래스를 등록 * 패키지명까지 모두 작성
-->
<servlet>
<!-- servlet-name은 중복되면 안됨 -->
<servlet-name>basicservlet</servlet-name>
<!-- servlet-class는 자바클래스의 패키지명부터 클래스명까지 다 작성해야함 -->
<servlet-class>com.servlet.controller.BasicServletController</servlet-class>
</servlet>
<!--
등록된 서블릿을 실행할 URL 주소를 매핑
<servlet-mapping> 태그를 이용
자식태그로
<servlet-name> : 연결한 서블릿 이름 (위 서블릿 등록할때 작성한 이름과 동일한것)
<url-pattern> : 매핑주소 * 주소 작성시에 반드시 /로 시작
-->
<servlet-mapping>
<servlet-name>basicservlet</servlet-name>
<url-pattern>/basicrequest.do</url-pattern>
</servlet-mapping>
</web-app>
Tomcat 서버는 url등 여러정보들을 받아서 분리
-> HTTP Servlet Request 와 HTTP Servlet Response 이렇게 두가지로 나뉨
즉 HTTP Servlet Request와 HTTP Servlet Response 객체에 있는 메소드들을 알아보자
HttpServletRequest 객체 관련 메소드들
✅ 클라이언트에서 보낸 데이터 불러오는 메소드
✅ 요청이 온 데이터에 대해 문자열이 깨지지 않게 인코딩 방식 정해주는 메소드
✅ 내부에서 요청을 다른 곳으로 전달시킬 때
HttpServletResponse 객체 관련 메소드들
데이터 통신(입출력)
getWriter(): 문자열을 전송할 Stream 가져옴
getOutputStream() : byte 단위로 전송할 Stream 가져옴
sendRedirect(String) : 이전 데이터가 필요 없이 화면 전환 될 때 사용
redirect는 아예 url주소 변경(응답 → 새요청)
이전 요청 사용 불가능(request 사용 불가능)
대부분 화면 전환할 때는 request 사용 → 새로고침할 때마다 요청(회원 등록 페이지면 계속 등록되는 문제 발생
-> 그 문제를 보완하기 위해서 sendRedirect 메소드 사용!
즉 이전 데이터가 필요 없이 화면 전환 될 때 sendRedirect 메소드 사용
ex ) 로그인 후, 등록(게시글, 상품 등) 화면 후, 로그아웃, 회원탈퇴 등
1. 더블클릭 시 오른쪽 화면
2. 포트 번호 수정 가능, 8080은 다른 곳에서 충돌 일어날 수 있어서 9090으로 수정
1. 45초 이내로 끝나지 않으면 타임아웃에러, 에러 뜰 경우 시간 늘리기
1. 체크해주기! 톰캣에 올렸지만 내가 쓰고있는 폴더와 맵핑되어 그 폴더에 생김
2. 저장(세팅 완료!)
- webapp안에 처음화면 생성 → index.html 파일 생성
- html 태그 name값 부여 필수!(name값으로 가져오기 때문에)
- radio나 checkbox는 value값 부여 필수!
- 데이터값이 안넘어오면은 공란으로 들어온다
- 체크박스나 라디오값이 안넘어오면 null값이 들어옴
- key값 자체가 없어도 null값이 들어온다
✅ index.html (초기화면) views의 html 파일과 연결하기
- views → html파일 생성
- a태그 경로설정(views의 html파일과 연결)
- 정적 페이지
✅ views의 html파일에서 경로 지정해주기(form태그 안에)
✅ 매핑하는 두가지 방법
1. web.xml 파일 이용하기
// web.xml 파일임
<!--
생성한 서블릿 등록하기
<servlet>태그를 이용해서 생성한 서블릿 클래스를 등록함
<servlet>태그를 이용해서 생성한 자식 클래스를 등록함
<servlet-name> : 서버 내에서의 서블릿클래스의 이름 등록
<servlet-class> : 클래스를 등록 * 패키지명까지 모두 작성
-->
<servlet>
<servlet-name>basicservlet</servlet-name>
<servlet-class>com.servlet.controller.BasicServletController</servlet-class>
</servlet>
<!-- 등록된 서블릿을 실행할 URL 주소를 매핑
<servlet-mapping>태그를이용
자식태그로
<servlet-name> : 연결할 서블릿이름
<url-pattern> : 매핑주소 *주소 작성시에는 반드시 /로 시작</url-pattern> -->
<servlet-mapping>
<servlet-name>basicservlet</servlet-name>
<url-pattern>/basicrequest.do</url-pattern>
</servlet-mapping>
// index.html 파일임
<!-- href나 form으로 다른 페이지에게 요청보낼 때 mapping 패턴과 동일하게 /basicrequest.do로 설정 -->
<a href="/02_servletdata/basicrequest.do">서블릿으로 기본요청처리하기</a>
<p>
<form action="/02_servletdata/basicrequest.do" method="post">
<input type="submit" value="전송">
</form>
</p>
// BasicServletController.java 파일
package com.servlet.controller;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
// 일반클래스를 서블릿역할로 만들기... -> 클라이언트의 요청을 받는 클래스
// 1. javax.servlet.http.HttpServlet 클래스를 상속받음
// 2. HttpServlet에 정의되어있는 메소드를 정의
// 1) doGet() : 클라이언트가 get방식으로 요청한 내용을 처리하는 메소드
// 2) doPost() : 클라이언트가 post방식으로 요청한 내용을 처리하는 메소드
// 3. 서버에서 요청을 받을 수 있게 등록해야함
// 1) 생성한 서블릿클래스는 서버에 등록 -> web.xml파일이용, @어노테이션 이용
// 2) 서블릿을 실행한 주소를 매핑(연결)시켜줌
public class BasicServletController extends HttpServlet {
private static final long serialVersionUID = 5412475190290065154L;
public BasicServletController() {
// TODO Auto-generated constructor stub
}
@Override
public void doGet(HttpServletRequest request,
HttpServletResponse response) // get방식으로 보내면 이곳에서 받음
throws ServletException, IOException {
System.out.println("서블릿의 doGet메소드가 실행됨");
}
@Override
public void doPost(HttpServletRequest request,
HttpServletResponse response) // post방식으로 보내면 이곳에서 받음
throws ServletException, IOException {
System.out.println("서블릿의 doPost메소드가 실행됨");
}
}
- html 파일에서 뒤 주소를 복사함!
- 원하는 부분 프로젝트 우클릭 후 -> 서블릿 생성한 후 -> 클래스이름은 알아볼수있도록 마음대로 정한다
- 해당 순서에 맞춰서 finish 누르면, 서블릿이 등록된 새로운 클래스가 만들어진다!
HTML 파일에서 -> 컨트롤 + f11 → 서버선택 → Finish
- 컨트롤러와 연결하기
- 해당 html 파일안의 form태그안의 /input.do 주소를 기억한다
- controller 패키지 우클릭 후 -> Servlet 파일을 생성한다.
- 클래스 이름이 마음대로 정한 후, URL mapping 부분 더블클릭 후 복사한 주소로 바꿔준다
! 반드시 매핑주소 앞에 /가 있어야함
-> 위 과정까지 다하면 controller 패키지 안에 새로운 자바파일이 생성된 것을 볼 수 있다