<form action=”abc1” method=”get/post”>
HttpServlet 클래스에 포함되어있음.상속받아서 서블릿 오버라이딩 할 수 있음
doGet | HttpServlet 오버라이딩 |
doGet | HttpServlet 오버라이딩 |
init | 서버 시작 후 최초 서블릿 실행시 1번만 |
destroy | 서블릿 객체 메모리 삭제시 = 재컴파일 또는 서버 종료시 |
package test;
import java.io.IOException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/flow")
public class FlowServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public void init(ServletConfig config) throws ServletException {
System.out.println("1.init 호출");
}
public void destroy() {
System.out.println("n.destroy 호출");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("n.doGet 호출");
}
}
매핑된 서블릿 확인 가능
그러니까 다른 파일들은 저기 /a,/b,/flow는 제외한 다른 이름으로 해줘야함!!!!
💡 protected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {**
⇒
서블릿 객체 생성 - init 호출
doGet 호출(요청정보객체, 응답정보객체 생성)
요청 - HttpServletRequest 객체 api가 가지고 있음.
req.getRemoteAddr(); ⇒ 나한테 요청을 보낸 상대(클라이언트) ip를 알 수 있다.
req.getParameter(”id”); ⇒ 클라이언트가 전송했던 id의 이름을 가진 정보를 달라.
처리
응답 - HttpServletResponse 객체 api가 가지고 있음.
java.io.PrintWriter out = resp.getWriter();
⇒ out객체를 통해 결과물 내보냄. out.println(”서버가 클라이언트로 전송할 내용=처리결과=응답”)
protected, public 가능, private은 안됨.**
클라이언트 요청 보낸다.(http://ip:port/컨텍스트명/a?id=java&pw=1111)
?이후는 전송하는 값, 값이 여러 개인 경우 &로 연결
서버는 요청 받는다.
package test;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/request")
public class RequestTestServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println(request.getContextPath());
System.out.println(request.getMethod());
System.out.println(request.getRequestURI());
System.out.println(request.getServletPath());
System.out.println(request.getRemoteAddr());
PrintWriter out = response.getWriter();
out.println("<h1>hello output</h1>");
out.println("<script src='/"+
request.getContextPath()+"/jquery-3.6.1.min.js'>hello output2</script>");
}
}
request.getContextPath(): 현재 서블릿이 동작하고있는 웹프로젝트 이름- servlettest
request.getMethod(): 서블릿의 메서드- GET
request.getRequestURI(): 서버ip와 포트번호를 제외한 나머지- servlettest/request
request.getServletPath(): 설정했던 서블릿 매핑 이름- /request
request.getRemoteAddr(): ip v6방식 0:0:0:0:0:0:0:1
out.println("<script src='/"+ request.getContextPath()+"/jquery-3.6.1.min.js'>hello output2</script>");
경로 앞에 /로 시작하면 포트번호까지 알려줌.
대신 현재 프로젝트 이름이 아리까리한 경우 저렇게 request.getContextPath() 넣어주기!
위 내용들은 콘솔에 출력.
아래 2개는 페이지에서 출력. 대신 페이지 소스보기를 해야 스크립트 태그 확인 가능함
한글 깨짐
인코딩 필요. 인코딩 먼저 하고 Writer생성해야 함. 순서 바뀌면 안됨.
서블릿 url표시할때 => "/a": 현재 컨텍스트명까지 생략 http://localhost:8080/servlettest/a
html태그 속성 url => "/a": 포트번호까지 인식. http://localhost:8080/a 라는 의미
/가 들어가면 컨텍스트 명까지 써주고 없으면 loginprocess이름만 써주기
<form action="http://localhost:8080/loginprocess"> 절대경로말고
<form action="loginprocess"> 상대경로 사용하기
프로젝트 배포하는등 경로가 바뀌면 절대경로 사용 어려워짐
select multiple 속성이 true일때, input타입이 checkbox일때!!!!!!!!
String title[] = request.getParameterValues("title");
//getParameterValues: 배열
<select name="title" multiple="true">
<option>웹클라이언트 과정</option>
<option>웹서버 과정</option>
<option>데이터베이스 과정</option>
<option>서비스배포 과정</option>
</select>
String title[] = request.getParameterValues("title"); //getParameterValues: 배열
response.setContentType("text/html;charset=utf-8"); // 인코딩 필요
PrintWriter out = response.getWriter();
out.println("<h1>" + id + " 회원님 환영합니다.</h1>");
out.println("<h1>" + pw + " 암호를 입력하셨습니다.</h1>");
for(String t:title) {
out.println("<h1>" + t + "을 선택하셨습니다.</h1>");
}
get방식: 주소창에 정보 다 보이게 전송
<form action="/servlettest/loginprocess" method="get">
post방식: doGet을 doPost로 수정해야 오류 안남
<form action="/servlettest/loginprocess" method="post">
-서블릿 요청 방식
- http 프로토콜 정의 방식
get | post |
-url 뒤 요청입력데이터를 전송한다. - 요청입력데이터가 모두 보인다. - 암호 보안 요구 데이터가 있을경우에는 get은 지양한다. - url?name=value&…. ⇒기본 방식 - url 뒤 길이 제한있다. - 250자 - 파일 업로드 전송 불가하다. - 서블릿에 doGet메서드 필요하다. get요청만 받아서 처리한다. |
-url 별도로 분리해서 요청 입력 데이터를 전송한다. -url에 정보가 보이지 않는다. - 암호 전송할때 post 사용 - form metho=post 지정 필수 - 파일 전송 가능 - 서블릿에 doPost 메서드는 post요청만 처리한다. - request.setCharacterEncoding(”utf-8”) 필요. |
1. 변수명=값 2. &연결한다 3. 영문, 숫자 그대로 전송한다. 4. 한글, 특수문자 인코딩 5. %16진수2자리%16진수2자리 → 한글 1문자 표헌(16진수2자리가 1바이트) 6. url 공백 허용하지 않는다. 7. 공백은 ‘+’ 기호로 변경된다. 8. 그럼 1+2같은 실제 +기호는 %2b로 변경되어 들어간다. |
1. 변수명=값 2. &연결한다 3. 영문, 숫자 그대로 전송한다. 4. 한글, 특수문자 인코딩 5. %16진수2자리%16진수2자리 → 한글 1문자 표헌(16진수2자리가 1바이트) 6. url 공백 허용하지 않는다. 7. 공백은 ‘+’ 기호로 변경된다. 8. 그럼 1+2같은 실제 +기호는 %2b로 변경되어 들어간다. |
서블릿에서
request.setCharacterEncoding("utf-8"); // post방식일때만 필요!!!get일때는 필요 없음
요청 - get 서블릿 - doGet
요청 - post 서블릿 - doPost
요청 - get 서블릿 - doPost ⇒ http 405 error code
요청 - post 서블릿 - doGet ⇒ http 405 error code
405error ⇒ 위 내용처럼 요청방식이 잘못 되었다는 것!!!!!
-http오류코드
404 | 요청 파일이 서버 내부에 없을 경우 확인: url/컨텍스트명/서블릿url매핑명 |
405 | <form method=”get” → doPost 메서드만 존재 <form method=”post” → doGet 메서드만 존재 |
500 | 문제가 일어날 수 있는 상황은 많다. 에러코드를 잘 읽어봐야 함. 서버실행파일-servlet,jsp - 자바 예외 발생한 경우 |
'웅진씽크빅 스타터스 부트캠프 > 강의 내용 정리' 카테고리의 다른 글
23.01.10 JSP(el, jstl, foreach,....) (0) | 2023.01.10 |
---|---|
23.01.09 JSP(액션태그) (0) | 2023.01.09 |
23.01.06 JSP (0) | 2023.01.06 |
23.01.05 Servlet, Cookie, Session (1) | 2023.01.05 |
22.12.26 SQL-DML 학습 (0) | 2022.12.26 |