클라이언트에서 서블릿으로 요청하는 방식에는 대표적으로 GET과 POST 두 가지 방식이 있다.
GET 방식
단순하게 서버에 존재하는 간단한 페이지를 요청하거나 게시판 글 목록 페이지에서 해당 페이지에 대한 목록 출력을 요청할 때 페이지 번호와 같이 간단한 파라미터를 전송하는 경우 사용되는 방식
Get 방식으로 요청이 전송되는 경우
1) 브라우저 주소 표시줄에 주소를 직접 입력해서 요청을 전송하는 경우
2) Html의 a태그를 사용해 링크를 걸어서 전송하는 경우
<a href = "list.jsp">
3) Html 폼태그에서 method 속성을 POST로 지정하는 경우
<form action = ""name"" method = "POST"
POST 방식
∙ 단순하게 특정한 페이지를 요청하는 것이 아니라 특정 페이지로 많은 양의 파라미터를 전송하여 파라미터에 관한 처리를 할 때 POST 방식으로 요청을 전송
∙ 회원 가입 요청, 게시판 글쓰기 요청 ,자료실 업로드 등을 처리할 때 사용하는 방식이 이에 해당
∙ 반드시 Html의 form 태그를 사용하여 method 속성을 POST로 지정해야 함
Form 태그를 사용한 GET 방식의 요청처리
login.html
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
<style>
#loginFormArea{
text-align : center;
width : 250px;
margin : auto;
border : 1px solid red
}
h1{
text-align : center;
}
</style>
</head>
<body>
<h1>로그인</h1>
<setion id = "loginFormArea">
<form action = "login" method="get">
<label id = "id">아이디 :</label> <input type = "text"name="id" id="id"/>
<br>
<label passwd = "passwd">비밀번호 :</label> <input type = "password" name="passwd" id="passwd"/>
<br><br>
<input type = "submit" value="로그인"/>
</form>
</setion>
</body>
</html>
LoginServlet.java
import java.io.IOException;
import java.io.PrintWriter;
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("/login")
public class LoginServlet extends HttpServlet
{
private static final long serialVersionUID = 1L;
public LoginServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String id = request.getParameter("id");
String passwd = request.getParameter("passwd");
response.setContentType("text/html;charset=euc-kr");
PrintWriter out = response.getWriter();
out.println("아이디 : " + id + "<br>");
out.println("비밀번호 : " + passwd + "<br>");
}
}
1) 클라이언트에서 전송되어 오는 id라는 이름의 파라미터 값와 pawwsd라는 이름의 파라미터 값을 받을 부분
2) 응답하는 데이터 타입이 html 타입이고, charset = euc-kr로 지정하면서 응답되는 데이터들의 한글 처리를 한 부분. 서블릿에서 응답하는 데이터 타입은 XML 데이터일수도 JSON 데이터일수도 있다. setContentType으로 지정해주는 마임 타임에 따라서 응답하는 데이터의 타입이 결정됨
3) 문자열 단위로 response 객체에 내용을 출력할 수 있는 출력 스트림을 생성한 부분
4) 응답에 id 변수 값과 passwd 변수 값을 출력하는 부분
web.xml
<?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>studyJSP_4</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.jsp</welcome-file>
<welcome-file>default.htm</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
</web-app>
login.html 서버를 실행하면 다음과 같은 화면이 나온다
POST 방식으로 요청이 전송되어 올 경우
POST 방식으로 요청을 처리할 경우도 GET 방식으로 요청을 처리하는 경우와 거의 유사하다. 서블릿에서 요청 처리를 수행할 때 doGet이 아닌 doPost 메소드에서 요청이 처리됨!
회원가입 페이지 만들어보기
mdmReg.html
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<form action="mrs" method="post">
회원명 : <input type = "text" name = "name"> <br>
주소 : <input type = "text" name = "addr"> <br>
전화번호 : <input type = "text" name = "tel"> <br>
취미 : <input type = "text" name = "hobby"> <br>
<input type="submit" value="회원가입">
</form>
</body>
</html>
MemRegServlet.java
import java.io.IOException;
import java.io.PrintWriter;
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("/mrs")
public class MemRegServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public MemRegServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=EUC-KR");
PrintWriter out = response.getWriter();
String name=request.getParameter("name");
String addr=request.getParameter("addr");
String tel=request.getParameter("tel");
String hobby=request.getParameter("hobby");
out.println("이름: " + name + "<br>");
out.println("주소: " + addr + "<br>");
out.println("전화번호: " + tel + "<br>");
out.println("취미: " + hobby+ "<br>");
}
}
web.xml
<?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_3_1.xsd" version="3.1">
<display-name>studyjsp_5</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.jsp</welcome-file>
<welcome-file>default.htm</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>MemRegServlet</servlet-name>
<servlet-class>MemRegServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MemRegServlet</servlet-name>
<url-pattern>/mrs</url-pattern>
</servlet-mapping>
</web-app>
회원가입 예제를 하면서 404 에러가 많이 났고 겨우 해결했다... 내가 실수한 부분들
3개 파일의 url 이름이 동일해야 한다.
'Web > JSP' 카테고리의 다른 글
자바빈을 이용한 회원가입 폼 작성 (0) | 2022.01.21 |
---|---|
Servlet을 사용한 로그인 기능 구현 (0) | 2022.01.20 |
[JSP] Servlet request, response (0) | 2022.01.18 |
서블릿 매핑(Servlet Mapping) (0) | 2022.01.18 |
Servlet 프로젝트 생성하기 (0) | 2022.01.18 |