오늘은 서블렛과 쿠키에 대해 배우고 실습해보았다.
package pack;
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("/HelloServlet")
@WebServlet( name = "ServletGo", urlPatterns = { "/HelloServlet", "/good.kor", "/wj" }, loadOnStartup = 1 )
public class HelloServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println("get 요청 성공");
// 서블릿(웹용 자바)으로 클라이언트 브라우저에 데이터 전송
response.setContentType("text/html;charset=utf-8"); // Mime type과 문자 코드
PrintWriter out = response.getWriter();
out.println("<html><body>");
out.println("<h1>서블릿 문서</h1>");
out.println("안녕 반가워");
out.println("</body></html>");
out.close();
}
}
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>서블릿 연습</h2>
<a href="HelloServlet">HelloServlet 보여줘1</a><br>
<a href="good.kor">HelloServlet 보여줘2</a><br>
<a href="wj">HelloServlet 보여줘3</a><br>
<br>
<a href="ServletEx02">ServletEx02 보여줘</a><br>
<br>
<a href="ServletEx03">Servlet lifeCycle</a><br>
<form action="ServletEx03" method="get">
<input type="submit" value="Servlet lifeCycle 테스트">
</form>
<form action="ServletEx03" method="post">
<input type="submit" value="Servlet lifeCycle 테스트">
</form>
<hr>
<a href="getdata.html">get 요청 처리</a><br>
<a href="postdata.html">post 요청 처리</a><br>
<hr>
<a href="ServletEx06Cookie">쿠키 처리</a><br>
<a href="ServletEx07Session">session 처리</a><br>
</body>
</html>
<?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>wproject1</display-name>
<welcome-file-list>
<welcome-file>main.html</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.htm</welcome-file>
</welcome-file-list>
<!-- servlet 생성 후 등록 -->
<!--
<servlet>
<servlet-name>abc</servlet-name>
<servlet-class>pack.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>abc</servlet-name>
<url-pattern>/HelloServlet</url-pattern>
<url-pattern>/good.kor</url-pattern>
<url-pattern>/wj</url-pattern>
</servlet-mapping>
-->
</web-app>
package pack;
import java.io.IOException;
import java.io.PrintWriter;
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;
import pack.other.ServletEx02Other;
/**
* Servlet implementation class ServletEx02
*/
@WebServlet("/ServletEx02")
public class ServletEx02 extends HttpServlet {
private static final long serialVersionUID = 1L;
ServletEx02Other other;
public void init(ServletConfig config) throws ServletException {
// 서버는 init() 메소드를 호출해서 Servlet을 초기화 합니다.
other = new ServletEx02Other("고길동");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8"); // Mime type과 문자 코드
PrintWriter out = response.getWriter();
out.println("<html><body>");
out.println("<h1>서블릿 문서 Ex2</h1>");
// 지역 변수 출력
int a = 10, b = 20;
out.println("a : " + a + ", b : " + b);
// 현재 클래스의 메소드 호출
int tot = calcData(a, b);
out.println("<br>두 수의 합은? " + tot);
// 클래스 호출
//ServletEx02Other other = new ServletEx02Other("홍길동");
String ir = other.getIrum();
out.println("<br>이름은 : " + ir);
out.println("</body></html>");
out.close();
}
private int calcData(int a, int b) {
int imsi = a + b;
return imsi;
}
}
package pack.other;
public class ServletEx02Other {
private String irum;
public ServletEx02Other(String irum) {
this.irum = irum;
}
public String getIrum() {
return irum;
}
}
package pack;
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;
/**
* Servlet implementation class ServletEx03
*/
@WebServlet("/ServletEx03")
public class ServletEx03 extends HttpServlet {
private static final long serialVersionUID = 1L;
int num = 0;
public void init(ServletConfig config) throws ServletException {
// 웹 서버 서비스가 시작되면 자동 호출.
// 현재 서블릿 클래스의 초기화를 담당 (1회만 수행)
num = 1;
System.out.println("init 수행 : num = " + num);
}
/*
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// get, post 요청 시 매번 수행. (doGet, doPost보다 우선순위가 높다)
// doGet, doPost를 호출 가능
// 참고 : jsp 파일은 service 메소드만을 가진 파일
num += 1;
System.out.println("service 수행 : num = " + num);
//doGet(request, response);
}
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// get 요청 시 매번 수행
num += 1;
System.out.println("doGet 수행 : num = " + num);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// post 요청 시 매번 수행
num += 1;
System.out.println("doPost 수행 : num = " + num);
}
public void destroy() {
// 웹 서버 서비스가 종료되면 자동 호출
// 마무리 작업 담당
System.out.println("destroy 수행");
}
}
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
window.onload = () => {
let btnOk = document.querySelector("#btnOk").addEventListener("click", func);
}
function func(){
if(frm.name.value === "" || frm.addr.value === "" || frm.age.value === "" ){
alert("자료 입력");
return;
}else frm.submit();
}
</script>
</head>
<body>
<h2>get 요청</h2>
<a href="ServletEx04Get?name=james&addr=jeju&age22">ServletEx04Get 요청(get)</a>
<br>
form tag로 get 요청
<form action="ServletEx04Get" method="get" name="frm">
이름 : <input type="text" name="name" size="10" value="tom"><br>
주소 : <input type="text" name="addr" size="50" value="seoul"><br>
나이 : <input type="text" name="age" size="3" value="23"><br>
<input type="button" id="btnOk" value="자료전송">
<input type="reset" id="btnCancel" value="입력취소">
</form>
</body>
</html>
package pack;
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("/ServletEx04Get")
public class ServletEx04Get extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String name = request.getParameter("name");
String addr = request.getParameter("addr");
String age = request.getParameter("age");
// 받은 자료로 Business Logic, DB에 등록, ... 등을 할 수 있다.
// 클라이언트로 출력
response.setContentType("text/html;charset=utf-8"); // Mime type과 문자 코드
PrintWriter out = response.getWriter();
out.println("<html><body>");
out.println("<h2>get 요청 결과</h2>");
out.println("이름 " + name + "의 주소 : " + addr + "의 나이는 : " + age);
out.println( "<br>" + calcAge(age));
out.println( "<br><br><a href='getdata.html'>자료 다시 입력</a>");
out.println("</body></html>");
out.close();
}
private String calcAge(String age) {
int imsi = Integer.parseInt(age) / 10 * 10;
String result = "기타";
switch (imsi) {
case 20:
result = "20대";
break;
case 30:
result = "30대";
break;
case 40:
result = "아저";
break;
}
return result;
}
}
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>post 요청</h2>
<form action="post.do" method="post">
이름 : <input type="text" name="name" value="한국인"><br>
주소1 : <input type="text" name="addr" value="서울시"><br>
주소2 : <input type="text" name="addr" value="서대문구"><br>
<br>
좋아하는 스포츠는? <br>
<input type="checkbox" name="sports" value="축구">축구
<input type="checkbox" name="sports" value="농구">농구
<input type="checkbox" name="sports" value="롤" checked="checked">롤<br>
<br>
자신있는 언어는? <br>
<input type="radio" name="lan" value="자바" checked="checked">자바
<input type="radio" name="lan" value="자바스크립트">자바스크립트
<input type="radio" name="lan" value="파이썬">파이썬<br>
<br>
교통수단은? <br>
<select name="tr">
<option>전철</option>
<option>버스</option>
<option>도보</option>
</select>
<input type="hidden" name="edu" value="에이콘">
<br><br>
<input type="submit" value="자료전송">
</form>
</body>
</html>
package pack;
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("/post.do")
public class ServletEx05post extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8"); // 수신자료 한글 깨짐 방지
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("<html><body>");
out.println("<h2>post 요청 결과</h2>");
String irum = request.getParameter("name");
String[] juso = request.getParameterValues("addr"); // 매개변수 중복인 경우 배열 처리
out.println("이름 : " + irum + ", 주소1 : " + juso[0] + ", 주소2 : " + juso[1]);
// checkbox
try {
String[] sports = request.getParameterValues("sports");
out.println("선택한 종목은 ");
for(String s:sports) {
out.println(s + " ");
}
} catch (Exception e) {
out.println("<br>종목 하나 이상을 선택하시죠??");
return;
}
// radio
String language = request.getParameter("lan");
out.println("<br>자신있는 언어는 : " + language);
// select
String tr = request.getParameter("tr");
out.println("<br>교통수단은 : " + tr);
// hidden
String edu = request.getParameter("edu");
out.println("<br>교육센터는 : " + edu);
out.println( "<br><br><a href='postdata.html'>자료 다시 입력</a>");
out.println("</body></html>");
out.close();
}
}
package pack;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLDecoder;
import java.net.URLEncoder;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/ServletEx06Cookie")
public class ServletEx06Cookie extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("<html><body>");
// 쿠키가 있는 경우 로그인한 상태를 알리고 없다면 로그인 창 띄우기
String id = null;
String pwd = null;
try {
Cookie[] cookies = request.getCookies(); // 클라이언트의 모든 쿠키 읽기
for(int i=0; i<cookies.length; i++) {
// 쿠키는 키 : 값 형태로 구성됨
String name = cookies[i].getName();
System.out.println("name : " + name);
if(name.equalsIgnoreCase("id")) {
// 쿠키값 디코딩(암호 해제)
id = URLDecoder.decode(cookies[i].getValue(), "utf-8");
}
if(name.equals("pwd")) {
// 쿠키값 디코딩(암호 해제)
pwd = URLDecoder.decode(cookies[i].getValue(), "utf-8");
}
}
} catch (Exception e) {
// TODO: handle exception
}
if(id != null && pwd != null) {
out.println(id + "님 쿠키를 통해 로그인한 상태입니다.");
out.println("</body></html>");
out.close();
return;
}
// id, pwd가 없는 경우
out.println("<h2>로그인</h2>");
out.println("<form method='post'>");
out.println("id : <input type='text' name='id'><br>");
out.println("pwd : <input type='text' name='pwd'><br>");
out.println("<input type='submit' value='로그인'><br>");
out.println("</form>");
out.println("</body></html>");
out.close();
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("<html><body>");
String id = request.getParameter("id");
String pwd = request.getParameter("pwd");
//System.out.println(id + " " + pwd);
if(id.equals("aaa") && pwd.equals("111")) {
//쿠키 생성
try {
id = URLEncoder.encode(id, "utf-8"); // 암호화
Cookie idCookie = new Cookie("id", id);
idCookie.setMaxAge(60 * 60 * 24 * 365); // 쿠키 유효기간
pwd = URLEncoder.encode(pwd, "utf-8"); // 암호화
Cookie pwdCookie = new Cookie("pwd", pwd);
pwdCookie.setMaxAge(60 * 60 * 24 * 365);
response.addCookie(idCookie);
response.addCookie(pwdCookie); // 클라이언트 컴퓨터에 쿠키를 저장
out.println("로그인 성공 - 쿠키가 설정되었습둥~~~");
} catch (Exception e) {
// TODO: handle exception
}
}else {
out.println("로그인 실패");
}
out.println("</body></html>");
out.close();
}
}
'Java' 카테고리의 다른 글
mvc 패턴 (0) | 2024.07.30 |
---|---|
html과 jsp 맛보기 (10) | 2024.07.24 |
웹 서버 만들기 기초 (1) | 2024.07.24 |
네트워크, URL, 서버 (0) | 2024.07.24 |
Stream, 람다식 DB 연동 활용 (1) | 2024.07.24 |