자바 서블릿(Java Servlet)은 자바를 사용하여 웹페이지를 동적으로 생성하는 서버측 프로그램 혹은 그 사양을 말하며, 흔히 "서블릿"이라 불린다. 자바 서블릿은 웹 서버의 성능을 향상하기 위해 사용되는 자바 클래스의 일종이다. 서블릿은 JSP와 비슷한 점이 있지만, JSP가 HTML 문서 안에 Java 코드를 포함하고 있는 반면, 서블릿은 자바 코드 안에 HTML을 포함하고 있다는 차이점이 있다.
HTTP 프로토콜을 캡슐화 시켜놓은 객체
response.setContentType("text/html; charset=UTF-8");
PrintWriter writer = response.getWriter();
writer.println("<html><head></head><body>");
writer.println("id = " + id + "<br>");
writer.println("name = " + name + "<br>");
writer.println("</body></html>");
<input type="checkbox" name="hobby" value="cook">cook
<input type="checkbox" name="hobby" value="run">run
<input type="checkbox" name="hobby" value="swim">swim
<input type="checkbox" name="hobby" value="sleep">sleep<br/>
String[] hobbys = request.getParameterValues("hobby");
writer.println("hobbys = " + Arrays.toString(hobbys) + "<br>");
<input type="radio" name="major" value="kor">국어
<input type="radio" name="major" value="eng" checked="checked">영어
<input type="radio" name="major" value="mat" >수학
String major = request.getParameter("major");
writer.println("major = " + major + "<br>");
getarea.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Input Radius</title>
</head>
<body>
<form action="GetArea" method="get">
반지름 : <input type="text" name="radius" size="10"/><br />
<input type="submit" value="전송" />
<input type="reset" value="재입력" />
</form>
</body>
</html>
(Servlet) GetArea.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 implementation class GetArea
*/
@WebServlet("/GetArea")
public class GetArea extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public GetArea() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("doGet()");
request.setCharacterEncoding("UTF-8");
String radius = request.getParameter("radius");
double area = Double.parseDouble(radius) * Double.parseDouble(radius) * Math.PI;
response.setContentType("text/html; charset=UTF-8");
PrintWriter writer = response.getWriter();
writer.println("<html><head></head><body>");
writer.println("입력한 반지름 : " + radius + "<br>");
writer.println("원의 넓이 : " + area + "<br>");
writer.println("</body></html>");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("doPost()");
request.setCharacterEncoding("UTF-8");
String radius = request.getParameter("radius");
double area = Double.parseDouble(radius) * Double.parseDouble(radius) * Math.PI;
response.setContentType("text/html; charset=UTF-8");
PrintWriter writer = response.getWriter();
writer.println("<html><head></head><body>");
writer.println("입력한 반지름 : " + radius + "<br>");
writer.println("원의 넓이 : " + area + "<br>");
writer.println("</body></html>");
}
}
Circle.java
package edu.global.ex.shape;
public class Circle {
private double radius;
public Circle(double radius) {
this.radius = radius;
}
public double getArea() {
return radius * radius * Math.PI;
}
}
GetArea.java
String radius = request.getParameter("radius");
Circle circle = new Circle(Double.valueOf(radius));
response.setContentType("text/html; charset=UTF-8");
PrintWriter writer = response.getWriter();
writer.println("<html><head></head><body>");
writer.println("입력한 반지름 : " + radius + "<br>");
writer.println("원의 넓이 : " + circle.getArea() + "<br>");
writer.println("</body></html>");
Grade.java
package edu.global.ex.grade;
public class Grade {
private int kor;
private int eng;
private int math;
public Grade(int kor, int eng, int math) {
this.kor = kor;
this.eng = eng;
this.math = math;
}
public int getSum() {
return kor + eng + math;
}
public double getAvg() {
return getSum() / 3.0;
}
public char getGrade() {
char ch = '가';
if (getAvg() >= 90) {
ch = '수';
} else if (getAvg() >= 80) {
ch = '우';
} else if (getAvg() >= 70) {
ch = '미';
} else if (getAvg() >= 60) {
ch = '양';
} else {
ch = '가';
}
return ch;
}
}
getgrade.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Score</title>
</head>
<body>
<form action="GetGrade" method="get">
국어 : <input type="text" name="kor" size="10"/><br />
영어 : <input type="text" name="eng" size="10"/><br />
수학 : <input type="text" name="mat" size="10"/><br />
<input type="submit" value="전송" />
<input type="reset" value="재입력" />
</form>
</body>
</html>
(Servlet) GetGrade.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;
import edu.global.ex.grade.Grade;
import edu.global.ex.shape.Circle;
/**
* Servlet implementation class GetGrade
*/
@WebServlet("/GetGrade")
public class GetGrade extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public GetGrade() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("doGet()");
request.setCharacterEncoding("UTF-8");
String kor = request.getParameter("kor");
String eng = request.getParameter("eng");
String mat = request.getParameter("mat");
Grade grade = new Grade(Integer.valueOf(kor), Integer.valueOf(mat), Integer.valueOf(eng));
response.setContentType("text/html; charset=UTF-8");
PrintWriter writer = response.getWriter();
writer.println("<html><head></head><body>");
writer.println("국어 점수 : " + kor + "<br>");
writer.println("영어 점수 : " + eng + "<br>");
writer.println("수학 점수 : " + mat + "<br>");
writer.println("총점 : " + grade.getSum() + "<br>");
writer.println("평균 : " + grade.getAvg() + "<br>");
writer.println("학점 : " + grade.getGrade() + "<br>" );
writer.println("</body></html>");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("doPost()");
request.setCharacterEncoding("UTF-8");
String kor = request.getParameter("kor");
String eng = request.getParameter("eng");
String mat = request.getParameter("mat");
Grade grade = new Grade(Integer.valueOf(kor), Integer.valueOf(mat), Integer.valueOf(eng));
response.setContentType("text/html; charset=UTF-8");
PrintWriter writer = response.getWriter();
writer.println("<html><head></head><body>");
writer.println("국어 점수 : " + kor + "<br>");
writer.println("영어 점수 : " + eng + "<br>");
writer.println("수학 점수 : " + mat + "<br>");
writer.println("총점 : " + grade.getSum() + "<br>");
writer.println("평균 : " + grade.getAvg() + "<br>");
writer.println("학점 : " + grade.getGrade() + "<br>" );
writer.println("</body></html>");
}
}
Lotto.java (내가 만든 로또 파일)
package edu.global.ex.lotto;
public class Lotto {
private int[] lotto;
public Lotto(){
lotto = new int[6];
for (int i = 0; i < lotto.length; i++) {
lotto[i] = (int) ((Math.random() * 45) + 1);
for (int j = 0; j < i; j++) {
if (lotto[i] == lotto[j]) {
i--;
}
}
}
}
public int[] getLotto() {
return lotto;
}
}
LottoNum.java (강사님이 만든 파일)
public class LottoNum {
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;
}
}
lotto.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Lotto Number</title>
</head>
<body>
<form action="GetLotto" method="post">
<input type="submit" value="로또 번호" />
</form>
</body>
</html>
(Servlet) GetLotto.java
- 내가 만든 것 : doGet에서 출력 / form method="get"
- 선생님이 만든 것 : doPost에서 출력 / form method="post"
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;
import edu.global.ex.lotto.Lotto;
import edu.global.ex.lotto.LottoNum;
/**
* Servlet implementation class GetLotto
*/
@WebServlet("/GetLotto")
public class GetLotto extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public GetLotto() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("doGet()");
request.setCharacterEncoding("UTF-8");
Lotto num = new Lotto();
response.setContentType("text/html; charset=UTF-8");
PrintWriter writer = response.getWriter();
writer.println("<html><head></head><body>");
writer.println("번호 : " + Arrays.toString(num.getLotto()));
writer.println("</body></html>");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("doPost()");
request.setCharacterEncoding("UTF-8");
LottoNum nums = new LottoNum();
response.setContentType("text/html; charset=UTF-8");
PrintWriter writer = response.getWriter();
writer.println("<html><head></head><body>");
writer.println("번호 : " + nums.getLottoNum());
writer.println("</body></html>");
}
}
C:\Users\USER\Desktop\apache-tomcat-9.0.73-windows-x64\apache-tomcat-9.0.73\work\Catalina\localhost\servlet_yjy_echo\org\apache\jsp
class와 jsp가 만들어져 있다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>2단 출력하기</title>
</head>
<body>
<%
int i = 0;
while(true){
i++;
out.println("2 * " + i + " = " + (2 * i) + "<br />");
%>
======= <br>
<% if(i>=9)
break;
}
%>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>구구단 출력하기</title>
</head>
<body>
<%
for(int i=1; i<=9; i++){
for(int j=2; j<=9; j++){
out.println(j + "x" + i + " = " + i*j);
}
out.println("<br>");
}
%>
</body>
</html>
<%!
int i = 10;
String str = "abc";
private int sum(int a, int b){
return a+b;
}
%>
<%= i %><br>
<%= str %><br>
<%= sum(1,5) %><br>
getarea.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Input Radius</title>
</head>
<body>
<!-- <form action="GetArea" method="get">
반지름 : <input type="text" name="radius" size="10"/><br />
<input type="submit" value="전송" />
<input type="reset" value="재입력" />
</form> -->
<form action="circle_result.jsp" method="get">
반지름 : <input type="text" name="radius" size="10"/><br />
<input type="submit" value="전송" />
<input type="reset" value="재입력" />
</form>
</body>
</html>
circle_result.jsp
<%@page import="edu.global.ex.shape.Circle"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>circle 결과</title>
</head>
<body>
<%
String radius = request.getParameter("radius");
Circle circle = new Circle(Double.valueOf(radius));
%>
반지름 : <%= radius %><br />
넓이 : <%= circle.getArea() %><br />
</body>
</html>