<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP 페이지</title>
</head>
<body>
<h1>JSP로 만든 페이지</h1>
// 요청시 Hello경로로 이동,
<form action="Hello" method="post">
<p>서블릿으로 이동</p>
<button type="submit">이동</button>
</form>
</body>
</html>
package com.koreait.servlet;
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;
/**
* Servlet implementation class MyServlet
*/ // 어노테이션을 통해 Hello 경로 찾음
@WebServlet(description = "test", urlPatterns = { "/Hello" })
public class MyServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public MyServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// JSP 파일 디렉티브 태그의 contentType부분을 넣으면 된다.
// response.setContentType("text/html; charset=UTF-8");
// 바디 태그에 글을 작성하기 위해 PrintWirter타입의 out에
// response.getWriter()을 담아준다.
// PrintWriter out = response.getWriter();
// out.print("<html>");
// out.print("<body>");
// out.print("<h1>");
// out.print("서블릿으로 만든 페이지");
// out.print("</h1>");
// doGet방식은 이동할 경로로 실제 JSP파일명으로 작성
// out.print("<a href='index.jsp'>JSP로이동!</a>");
// out.print("</body>");
// out.print("</html>");
// out.close();
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html; charset=UTF-8");
PrintWriter out = response.getWriter();
out.print("<html>");
out.print("<body>");
out.print("<h1>");
out.print("서블릿으로 만든 페이지");
out.print("</h1>");
// doPost방식은 이동할 경로로 JSP파일을 원하는 이름으로 바꿔서 작성
// 단, web.xml에서 바뀐 것을 알려주어야 한다.
out.print("<a href='baby'>JSP로이동!</a>");
out.print("</body>");
out.print("</html>");
out.close();
}
}
<?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" version="4.0">
<display-name>day02</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
// 1. <servlet></servlet>태그 작성
<servlet>
// 2. servlet의 이름 작성
<servlet-name>Baby</servlet-name>
// 3. servlet로 바꿀 jsp파일 이름 작성
<jsp-file>/index.jsp</jsp-file>
</servlet>
// 4. <servlet-mapping>태그로 매핑시킬 서블릿과 경로 작성
<servlet-mapping>
// 5. WAS에서 요청한 url에 맞는 서블릿을 찾기위해 서블릿의 이름을 찾는다.
<servlet-name>Baby</servlet-name>
// 6. 요청한 url, 경로 , 사실 6번을 통해 요청한 경로를 찾고
// 5번으로가 경로에 맞는 서블릿이 실행되야하지만 문법상 이렇게 적음
<url-pattern>/baby</url-pattern>
</servlet-mapping>
</web-app>
doGet() doPost() 차이
1. Get 방식
- 주소창을 타고 데이터가 넘어간다.
- 데이터를 사용자가 그대로 볼 수 있으므로 보안에 취약
- 주소 입력란에 데이터를 전송하는데 글자수 제한에 있어 대량의 데이터가
get방식으로 요청했을 경우 데이터가 정상적으로 넘어가지 않는다.
2. Post방식
- 데이터가 html header를 타고 넘어간다.
- 주소창에는 데이터가 보여지지 않으므로 보안에 강함
3. 데이터 전달 방법
- 보통 <form> 태그를 통해 서버에 전달하거나 요청한다.
- <form action=""> 이 이분분에 요청할 서블릿 주소를 입력해준다.
입력하지 않으면 현재 페이지로 이동한다.
- <form method=""> 이 부분에 get, post 중 하나는 선택해서 입력한다.
method 속성을 기입하지않고 전송방식을 결정하지 않으면
기본값인 get방식으로 요청하게됨.
- <form> 태그 외에도 <a> href= " 서블릿 주소" </a> 태그를 사용하여
링크를 걸어주면 서블릿은 get방식으로 요청한것으로 인식.
여기서 doGet과 doPost의 차이
주소가 doGet으로 할 경우 index.jsp라고 끝난고
doPost로 할경우 /baby라고 끝난다.
그리고 doGet의 경우, 전달할 데이터가 없어서 그렇지 만약, 로그인 페이지라면
입력한 아이디와 비밀번호가 주소창에 그대로 적혀있어 보안에 취약하다