doGet / doPost : 함수오버라이딩
애너테이션(@) : 하나의 기능이 있는 함수와 동일한 기능을 한다.
Servlet : 서블릿은 웹 서버의 성능을 향상하기 위해 사용되는 자바 클래스의 일종
HttpServlet : Http 프로토콜을 캡슐화한 객체
・HttpServlet 클래스에서 사용자 요청을 처리하는 doGet/doPost 메서드는 모두 HttpServletRequest와 HttpServletResponse 객체를 매개변수로 가지고 있다.
・HttpServletRequest와 HttpServletResponse 객체는 서블릿과 클라이언트 사이를 연결해주는 중요한 객체들 이다.
[계산 : html] <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <form action="FormEx" method="get"> 이름 : <input type="text" name="name" size=10></br> ID : <input type="text" name="id" size=10></br> <input type="checkbox" name="hobby" value="cook">요리 <input type="checkbox" name="hobby" value="run">조깅 <input type="checkbox" name="hobby" value="swim">수영 <input type="checkbox" name="hobby" value="sleep">잠~~<br /> <input type="radio" name="major" value="kor">국어 <input type="radio" name="major" value="eng" checked="checked">영어 <input type="radio" name="major" value="mat" >수학 <input type="submit" value="전송"> <input type="reset" value="리셋"> </form> </body> </html> -------------------------------------------------------------------------- [계산 : java] package edu.global.ex; import java.io.IOException; import java.io.PrintWriter; import java.util.Arrays; 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을 상속받아서 Servlet 파일이라 부른다. /** * Servlet implementation class HelloWorld */ @WebServlet("/FormEx") // http://localhost:8282/servelt_example/formex public class formex extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public formex() { super(); } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // html에서 method가 get방식이면 해당 메소드 실행 System.out.println("doGet() .."); System.out.println(request.getRemoteAddr()); System.out.println(request.getRemoteHost()); request.setCharacterEncoding("UTF-8"); // 이름 : <input type="text" name="name" size=10></br> name에 적혀있는 데이터와 동일하게 써야한다. String name = request.getParameter("name"); String id = request.getParameter("id"); String[] hobbys = request.getParameterValues("hobby"); String major = request.getParameter("major"); System.out.println(name); System.out.println(id); response.setContentType("text/html; charset=EUC-KR"); // 한글 지원 PrintWriter out=response.getWriter(); out.print("<html><head></head><body>"); out.print("아이디:" + id + "<br/>"); out.print("전공:" + major + "<br/>"); out.print("취미들:" + Arrays.toString(hobbys) + "<br/>"); out.print("이름:" + name + "<br/>"); out.print("</body></html>"); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // html에서 method가 post방식이면 해당 메소드 실행 System.out.println("doPost() .."); System.out.println(request.getRemoteAddr()); System.out.println(request.getRemoteHost()); request.setCharacterEncoding("UTF-8"); // 이름 : <input type="text" name="name" size=10></br> name에 적혀있는 데이터와 동일하게 써야한다. String name = request.getParameter("name"); String id = request.getParameter("id"); System.out.println(name); System.out.println(id); response.setContentType("text/html; charset=EUC-KR"); // 한글 지원 PrintWriter writer=response.getWriter(); writer.print("<html><head></head><body>"); writer.print("아이디:" + id + "<br/>"); writer.print("이름:" + name + "<br/>"); writer.print("</body></html>"); } }
[결과값] doGet() .. 0:0:0:0:0:0:0:1 0:0:0:0:0:0:0:1 aa ㅂㅂ
[계산 : html] <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <form action="Circle" method="post"> 반지름 : <input type="text" name="radius" value="" size=10></br> <input type="submit" value="전송"> <input type="reset" value="리셋"> </form> </body> </html> -------------------------------------------------------------------------- [계산 : circle] package edu.global.ex; public class Circle{ private double radius; public Circle(double radius) { this.radius=radius; } public double getArea() { return radius * radius * Math.PI; } } -------------------------------------------------------------------------- [계산 : java] package edu.global.ex; 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("/Circle") // http://localhost:8282/servelt_example/formex public class CircleEx extends HttpServlet { private static final long serialVersionUID = 1L; public CircleEx() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // html에서 method가 get방식이면 해당 메소드 실행 System.out.println("doGet()"); request.setCharacterEncoding("UTF-8"); String radius = request.getParameter("radius"); Circle circle = new Circle(Double.valueOf(radius)); //================================================== response.setContentType("text/html; charset=UTF-8"); // 한글 지원 PrintWriter out=response.getWriter(); out.print("<html><head></head><body>"); out.print("반지름:" + radius + "<br/>"); out.print("원의 넓이:" + circle.getArea() + "<br/>"); out.print("</body></html>"); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // html에서 method가 post방식이면 해당 메소드 실행 System.out.println("doPost()"); request.setCharacterEncoding("UTF-8"); String radius = request.getParameter("radius"); Circle circle = new Circle(Double.valueOf(radius)); //================================================== response.setContentType("text/html; charset=UTF-8"); // 한글 지원 PrintWriter out=response.getWriter(); out.print("<html><head></head><body>"); out.print("반지름:" + radius + "<br/>"); out.print("원의 넓이:" + circle.getArea() + "<br/>"); out.print("</body></html>"); } }
[결과값]
[계산 : html] <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <form action="Grade" method="post"> 국어 점수 : <input type="text" name="kor" value="" size=10></br> 영어 점수 : <input type="text" name="eng" value="" size=10></br> 수학 점수 : <input type="text" name="math" value="" size=10></br> <input type="submit" value="전송"> <input type="reset" value="리셋"> </form> </body> </html> -------------------------------------------------------------------------- [계산 : grade] package edu.global.ex.grade; class Grade { public double kor, eng, math; public Grade(double kor, double eng, double math) { this.kor = kor; this.eng = eng; this.math = math; } public double getSum() { return (kor + eng + math); } public double getAvg() { return (kor + eng + math) / 3.0; } public double round(double n) { return Math.round(n * 100.0) / 100.0; } public char getGrade() { char grade = '가'; if (getAvg() >= 90) { grade = '수'; } else if (getAvg() >= 80) { grade = '우'; } else if (getAvg() >= 70) { grade = '미'; } else if (getAvg() >= 60) { grade = '양'; } else { grade = '가'; } return grade; } } -------------------------------------------------------------------------- [계산 : java] package edu.global.ex.grade; 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("/Grade") // http://localhost:8282/servelt_example/formex public class GradeEx extends HttpServlet { private static final long serialVersionUID = 1L; public GradeEx() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // html에서 method가 get방식이면 해당 메소드 실행 System.out.println("doGet()"); request.setCharacterEncoding("UTF-8"); double kor = Double.valueOf(request.getParameter("kor").trim()); // trim() : 의미 없는 공백 삭제 double eng = Double.valueOf(request.getParameter("eng").trim()); double math = Double.valueOf(request.getParameter("math").trim()); Grade grade = new Grade(kor, eng, math); // ================================================== response.setContentType("text/html; charset=UTF-8"); // 한글 지원 PrintWriter out = response.getWriter(); out.print("<html><head></head><body>"); out.print("국어 점수:" + grade.round(kor) + "<br/>"); out.print("영어 점수:" + grade.round(eng) + "<br/>"); out.print("수학 점수:" + grade.round(math) + "<br/>"); out.print("==================" + "<br/>"); out.print("총점:" + grade.round(grade.getSum()) + "<br/>"); out.print("평균:" + grade.round(grade.getAvg()) + "<br/>"); out.print("등급:" + grade.getGrade() + "<br/>"); out.print("</body></html>"); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // html에서 method가 post방식이면 해당 메소드 실행 System.out.println("doPost()"); request.setCharacterEncoding("UTF-8"); double kor = Double.valueOf(request.getParameter("kor").trim()); // trim() : 의미 없는 공백 삭제 double eng = Double.valueOf(request.getParameter("eng").trim()); double math = Double.valueOf(request.getParameter("math").trim()); Grade grade = new Grade(kor, eng, math); // ================================================== response.setContentType("text/html; charset=UTF-8"); // 한글 지원 PrintWriter out = response.getWriter(); out.print("<html><head></head><body>"); out.print("국어 점수:" + grade.round(kor) + "<br/>"); out.print("영어 점수:" + grade.round(eng) + "<br/>"); out.print("수학 점수:" + grade.round(math) + "<br/>"); out.print("==================" + "<br/>"); out.print("총점:" + grade.round(grade.getSum()) + "<br/>"); out.print("평균:" + grade.round(grade.getAvg()) + "<br/>"); out.print("등급:" + grade.getGrade() + "<br/>"); out.print("</body></html>"); } }
[결과값]
[계산 : html] <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <h1>로또 대왕</h1> <form action="Lotto" method="post"> <input type="submit" value="로또의 완성"> <input type="reset" value="리셋"> </form> </body> </html> -------------------------------------------------------------------------- [계산 : lotto] package edu.global.ex.grade; import java.util.*; public class Lotto { public HashSet<Integer> getLottoNum() { HashSet<Integer> set = new HashSet<Integer>(); while (set.size() < 6) { set.add((int) (Math.random() * 45) + 1); } System.out.println(set); return set; } } -------------------------------------------------------------------------- [계산 : java] package edu.global.ex.grade; 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("/Lotto") // http://localhost:8282/servelt_example/formex public class LottoEx extends HttpServlet { private static final long serialVersionUID = 1L; public LottoEx() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // html에서 method가 get방식이면 해당 메소드 실행 System.out.println("doGet()"); Lotto lotto = new Lotto(); request.setCharacterEncoding("UTF-8"); // ================================================== response.setContentType("text/html; charset=UTF-8"); // 한글 지원 PrintWriter out = response.getWriter(); out.print("<html><head></head><body>"); out.print("로또 번호:" + lotto.getLottoNum() + "<br/>"); out.print("</body></html>"); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // html에서 method가 post방식이면 해당 메소드 실행 System.out.println("doPost()"); Lotto lotto = new Lotto(); request.setCharacterEncoding("UTF-8"); // ================================================== response.setContentType("text/html; charset=UTF-8"); // 한글 지원 PrintWriter out = response.getWriter(); out.print("<html><head></head><body>"); out.print("로또 번호:" + lotto.getLottoNum() + "<br/>"); out.print("</body></html>"); } }
[결과값] doPost() [32, 18, 22, 41, 26, 30]
JSP : Java Server Page
HTML : 정적언어
JavaScript : HTML을 동적으로 만들기 위해 나온 언어
Servlet은 Java언어를 이용하여 문서를 작성하고, 출력객체를 이용하여 HTML 코드를 삽입함.
JSP는 Servlet과 반대로 HTML 코드에 JAVA언어를 삽입하여 동작 문서를 만들 수 있다.
HTML 코드안에 AVA코드를 삽입하기 위해서는 태그를 이용해야 함.
[JSP태그 종류]
지시자 : <%@ %> : 페이지 속성
주석 : <%-- --%>
선언 : <%! %> : 변수, 메소드 선언
표현식 : <%= %> : 결과값 출력
스크립트릿 : <% %> : JAVA 코드
액션태그 : <jsp:action> </jsp:action> : 자바빈 연결
클라이언트가 웹브라우저로 helloWorld.jsp를 요청하게 되면 JSP컨테이너가 JSP파일을 Servlet파일(.java)로 변환함.
Servlet파일(.java)은 컴파일 된 후 클래스 파일(.class)로 변환되고, 요청한 클라이언트한테 html파일 형태로 응답됨.
jsp >(servlet)> html 코드만 읽을 수 있고, java언어는 읽지 못한다.
servlet언어 : out.println()
jsp도 servlet파일이다.
C:\Users\USER\Documents\JSP\apache-tomcat-9.0.73\work\Catalina\localhost\servelt_example\org\apache\jsp
[계산 : jsp] <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <% // 스크립트릿 int i = 0; while (true) { i++; out.println("2 * " + i + " = " + (2 * i) + "<br/>"); out.println("============<br />"); if (i >= 9) break; } %> </body> </html>
[결과값]
[계산 : 구구단.jsp] <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <% // 스크립트릿 for (int i = 1; i <= 9; i++) { for (int j = 1; j <= 9; j++) { out.println(i + " * " + j + " = " + (i * j) + "<br/>"); } out.println("============<br/>"); } %> </body> </html>
[결과값]
[계산 : 구구단2.jsp] <% // 스크립트릿 out.print("<table border='1'>"); for (int i = 0; i <= 9; i++) { out.print("<tr>"); for (int j = 2; j <= 9; j++) { if (i == 0) { out.print("<td>" + j + "단" + "</td>"); } else { out.println("<td>" + j + " * " + i + " = " + (i * j) + "</td>"); } } out.print("</tr>"); } out.print("</table>"); %>
[결과값]
[계산 : 구구단3.jsp] <% for (int i = 1; i < 10; i++) { out.println(i + "단을 출력합니다." + "<br>"); //위에서 i의 값이 2라면 2*1 ~ 2*9까지 진행합니다. //이 반복문(j)이 종료되면 위의 반복문 변수 i가 1증가하여 다시 3*1 ~ 3*9까지 진행하는 식으로 9단까지 반복 for (int j = 1; j < 10; j++) { out.println(i + " * " + j + " = " + (i * j) + "<br>"); } out.println("<hr>"); } %>
[결과값]
[계산 : 변수선언.jsp] <%!// 변수 선언 int i = 10; String str = "abc"; private int sum(int a, int b) { return a + b; }%> <%out.println("<hr>");%> <%=i%><br /> <%=str%><br /> <%=sum(1, 5)%>
[결과값]