- Servlet (Server + Applet)
JAVA๋ฅผ ์ฌ์ฉํ์ฌ ์นํ์ด์ง๋ฅผ ๋์ ์ผ๋ก ์์ฑํ๋ ์๋ฒ ์ธก ํ๋ก๊ทธ๋จ
JSP๋ HTML ๋ฌธ์ ์์ Java
Servlet์ Java ์ฝ๋ ์์ HTML
- Web Server
์ฌ์ฉ์๋ ํด๋ผ์ด์ธํธ URL์ ์ฝ์ ์นํ์ด์ง์ ์ฃผ์๋ฅผ ์ ๋ ฅํ๊ณ ๊ฐ์ ธ์จ๋ค. ๊ทธ ๋ ์๋ฒ์์ ํด๋ผ์ด์ธํธ์๊ฒ ์นํ์ด์ง๋ฅผ ๋ณด๋ด๋ ๋ฐฉ์.
- WAS (Web Application Server)
(Web Server(์ ์ ) + Web Container(๋์ ))
DB ์กฐํ๋ ๋ค์ํ ๋ก์ง ์ฒ๋ฆฌ๋ฅผ ์๊ตฌํ๋ ๋์ ์ธ ์ปจํ ์ธ ๋ฅผ ์ ๊ณตํ๊ธฐ ์ํด ๋ง๋ค์ด์ง ์ดํ๋ฆฌ์ผ์ด์ ์๋ฒ.
- Servlet ๋์ ๋ฐฉ์
- GET
์ ์กํ ๋ URL๋ก Parameter๊ฐ ์ ์ก๋์ด ๋๋ฉ์ธ์ ํ์๊ฐ ๋๋ค.
๋ณด์์ ์ทจ์ฝํ๋ค.
(ex : search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=1&ie=utf8&query=Hello
' &์๋ฃ๋ช =Value'์ด ๋๋ฉ์ธ ๋ค์ ์ฐ์ํด์ ๋ถ๋๋ค. )
- POST
์ ์กํ ๋ TCP/IP ํ๋กํ ์ฝ ๋ฐ์ดํฐ์ Head ์์ญ์ผ๋ก ์ ์ก๋๊ธฐ์ URL์ Parameter๊ฐ ํ์๋์ง ์๋๋ค.
๋ณด์์ ๊ฐํ๋ค.
GET ๋ฐฉ์๋ณด๋ค ์ฒ๋ฆฌ์๋๊ฐ ๋๋ฆฌ๋ค.
- Servlet ๊ธฐ๋ณธ ์ค์ ๋ฐฉ๋ฒ
1. ์์ ํด๋ - WebContent - WEB_INF ํด๋ ์์ web.xml ํ์ผ์ ์์ฑ
- web.xml :
- web application์ ์ค์ ์ ์ํ deployment descriptor
- ์น ์ดํ๋ฆฌ์ผ์ด์ ๋๋ ํ ๋ฆฌ๋ง๋ค ํ๋์ฉ๋ง ์กด์ฌ
- web.xml ํ์ผ์ ์ค์ ๋ค์ Web Application ์์์ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ฉ.
- (์์ ์ ํ ๊ฒฝ์ฐ web application์ ์ฌ์์ ํด์ผํ๋ค.)
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
</web-app>
- web.xml ์ดํด๋ฆฝ์ค ์์ฑ ๋ฐฉ๋ฒ
์์ ํด๋ - ์ค๋ฅธ์ชฝ ๋ง์ฐ์ค ํด๋ฆญ - Java EE Tools - Generate Deployment Descriptor Stub ํด๋ฆญ
*** web.xml ๋์ Classํ์ผ์์ ์๋ธ๋ฆฟ ์ฐ๋ํ๊ธฐ
๊ธฐ์กด web.xml์์๋ ์๋ธ๋ฆฟ ๋งตํ์ ์ํด ๋ค์๊ณผ ๊ฐ์ ํ๊ทธ๋ฅผ ์ฝ์ ํด์ผ ํ๋ค.
<servlet>
<servlet-name>servlet_1</servlet-name>
<servlet-class>servlet.Servlet_1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>servlet_1</servlet-name>
<url-pattern>/servlet_1</url-pattern>
</servlet-mapping>
์ด ๊ณผ์ ์ ๊ฑฐ์น์ง ์๊ณ ๋ฐ๋ก ์๋ธ๋ฆฟ java ํ์ผ์์ ํ ๋ฌธ์ฅ๋ง ์ถ๊ฐํด์ฃผ๋ฉด ์ฐ๋์ด ๊ฐ๋ฅํ๋ค.
@WebServlet(urlPatterns = "/servlet_1") // ๋ค์ ํ์ค ์ฝ๋๋ฅผ ์์ฑํด์ฃผ๋ฉด ๋ฐ๋ก ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
public class Servlet_1 extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("Servlet_1 doGet");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("Servlet_1 doPost");
}
}
2. Html ํ์ผ์ Servlet ์๋ฐ ํ์ผ๋ก ์ด๋ํ ๋งํฌ ์์ฑ
- <a href> ๋ location.href๋ GET์ผ๋ก ๋ฐ์ ๋ณด๋ด์ง ๋ชปํ์ง๋ง, form ํ์์ GET, POST ๋ ๋ฐฉ์์ผ๋ก ๋ชจ๋ ์ ๊ทผ ๊ฐ๋ฅํ๋ค.
<form action="loc" method="get"> <!-- ๊ธฐ๋ณธ ๋ฉ์๋๋ get์ด๋ค. -->
<input type="submit" value="get">
</form>
<form action="loc" method="post">
<input type="submit" value="post">
</form>
3. ์์ ํด๋ - Java Resources - src ์์ ํจํค์ง์ ํด๋์ค ์์ฑ
HttpServlet ํด๋์ค์ ์์์ ๋ฐ์ ์ฌ์ฉํ๋ค.
์๋จ ๋ฉ๋ด - Source - Override/Implement Methods ๋ฅผ ๋๋ฌ doGet๊ณผ doPost๋ฅผ ์ฒดํฌํ ํ OK
package sam;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class SampleServlet extends HttpServlet{
@Override // GET์ผ๋ก ๋ฐ์์ ๋ ๋ฉ์๋
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("SampleServlet doGet");
}
@Override // POST๋ก ๋ฐ์์ ๋ ๋ฉ์๋
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("SampleServlet doPost");
}
}
- ์ํ ์ฝ๋
sendError() ํจ์๋ฅผ ํตํด ์๋ฌ์ฐฝ์ ๋์ธ ์ ์๋ค.
์ํ ์ฝ๋ | ์ฌ์ |
200 | OK |
404 | Not Found |
500 | Internal Server Error |
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>์ํ ์ฝ๋ ํ์ธ</h1>
<form action="hello" method="get">
<table>
<tr>
<td>์ํ์ฝ๋</td>
<td>
<select name="code">
<option value="200">SC_OK</option>
<option value="404">SC_NOT_FOUND</option>
<option value="500">SC_INTERNAL_SERVER_ERROR</option>
</select>
</td>
</tr>
</table>
<input type="submit" value="์ด๋">
</form>
</body>
</html>
package hello;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html; charset=utf-8");
PrintWriter pw = resp.getWriter();
pw.println("<html>");
pw.println("<head>");
pw.println("<title>์ ๋ชฉ</title>");
pw.println("</head>");
pw.println("<body>");
pw.println("<h3>HelloServlet</h3>");
String code = req.getParameter("code");
if(code.equals("200")) {
pw.println("<p>200:SC_OK</p>");
} else {
if(code.equals("404")) {
resp.sendError(HttpServletResponse.SC_NOT_FOUND, "์ฐพ์ ์ ์์ต๋๋ค.");
}
else if(code.equals("500")) {
resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "์๋ฒ ์๋ฌ.");
}
}
pw.println("</body>");
pw.println("</html>");
pw.close();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
}
- sendRedirect()
์ง์ ํ ํ์ด์ง๋ก ์ด๋ํ ๋ ์ฐ๋ ํจ์
์๋ก์ด ํ์ด์ง๋ก ์์ ํ ์ด๋ํด์ ๊ธฐ์กด ๋ฐ์ดํฐ๋ฅผ ํ๋๋ ์ฌ์ฉํ ์ ์๋ค.
package hello;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String url = req.getParameter("url")
if(url.equals("naver")) {
//java sendRedirect
resp.sendRedirect("http://www.naver.com"); // sendRedirect(): ๋งํฌ ์ด๋
} else {
resp.sendRedirect("http://www.daum.net");
};
}
}
- getRequestDispatcher().forward()
sendRedirect()์ ๊ฐ์ ํ์ด์ง ์ด๋ ํจ์.
ํด๋ผ์ด์ธํธ๊ฐ ์ ์กํ ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋๋ก ์ ์งํ๋ค.
req.setAttribute("mem", name); // setAttribute() : ์๋ฃ๋ฅผ ๋ด์๋๊ณ ,
req.getRequestDispatcher("world").forward(req, resp); // getRequestDispatcher().forward() : world๋ก ์ด๋
//////////////////////////////////////////////////////
MemberDto dto = (MemberDto)req.getAttribute("mem"); //์ด๋ํ ํ์ด์ง์์ ๋ฐ์ดํฐ๋ค์ ํผ๋ค.
<์์>
1 .form ํ๊ทธ ์์ ์ด๋ฆ(text), ๋์ด(select 10๋~ 50๋), ์ฑ๋ณ(radio), ์ทจ๋ฏธ(checkbox) ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋๋ค.
2. servlet์ submitํ์ฌ ์ด๋ฆ, ๋์ด, ์ฑ๋ณ, ์ทจ๋ฏธ๋ฅผ ์ฝ์๊ณผ ์น์ ์ถ๋ ฅํ๋ค.
3. ๋๋ฒ์งธ servlet์ ๋ฐ์ดํฐ๋ฅผ ๋๊ฒจ Dto์ ์ ์ฅํ๊ณ , forward ๋ฉ์๋๋ก ์ธ๋ฒ์งธ servlet์ ๋ณด๋ธ๋ค.
3. ์ธ๋ฒ์งธ servlet์์ ๋๊ฒจ๋ฐ์ Dto๋ฅผ ์ฝ์๊ณผ ์น์ ์ถ๋ ฅํ๋ค.
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>work</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>
<!--
servlet ํ๊ทธ์ servlet-mapping ํ๊ทธ๊ฐ ํ ๋ฉ์ด๋ฆฌ.
๊ฐ ํ๊ทธ์ <servlet-name> ํ๊ทธ ์ด๋ฆ์ ์๋ก ๊ฐ๊ฒ ์ค์ ํ๊ณ ,
<servlet-class>๋ ํจํค์ง๋ช
.ํด๋์ค์ด๋ฆ
<url-pattern>์๋ ์ฌ๋์ ํ ๋งํฌ ์ด๋ฆ์ ์์ฑํ๋ค.
-->
<servlet>
<servlet-name>servlet_1</servlet-name>
<servlet-class>servlet.Servlet_1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>servlet_1</servlet-name>
<url-pattern>/servlet_1</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>servlet_2</servlet-name>
<servlet-class>servlet.Servlet_2</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>servlet_2</servlet-name>
<url-pattern>/servlet_2</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>servlet_3</servlet-name>
<servlet-class>servlet.Servlet_3</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>servlet_3</servlet-name>
<url-pattern>/servlet_3</url-pattern>
</servlet-mapping>
</web-app>
index.html
submit์ ์ ์ด์ฟผ๋ฆฌ์์ ํ๋๊ฒ ์ข๋ค. ์ด์ ๋ ์ฃผ์ ์ฐธ๊ณ .
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
</head>
<body>
<pre>
1. form
์ด๋ฆ text
์ฐ๋ น๋ select 10๋~50๋
์ฑ๋ณ radio
์ทจ๋ฏธ checkbox 3๊ฐ
2. servlet
form -> submit
์ด๋ฆ ์ฐ๋ น๋ ์ฑ๋ณ ์ทจ๋ฏธ ๋ณด์ด๊ฒ
3. servlet
forward
dto
4. result(servlet)
ํญ๋ชฉ ์ถ๋ ฅ - > console
</pre>
<br><br><br>
<form id="frm" method="post">
<table>
<tr>
<td>์ด๋ฆ</td>
<td>
<input type="text" id="_name" name="name">
</td>
</tr>
<tr>
<td>์ฐ๋ น๋</td>
<td>
<select name="age">
<option value="10๋">10๋</option>
<option value="20๋">20๋</option>
<option value="30๋">30๋</option>
<option value="40๋">40๋</option>
<option value="50๋">50๋</option>
</select>
</td>
</tr>
<tr>
<td>์ฑ๋ณ</td>
<td>
<input type="radio" name="gender" value="๋จ" checked>๋จ
<input type="radio" name="gender" value="์ฌ">์ฌ
</td>
</tr>
<tr>
<td>์ทจ๋ฏธ</td>
<td>
<input type="checkbox" value="์ด๋" name="hobby">์ด๋
<input type="checkbox" value="์ํ" name="hobby">์ํ
<input type="checkbox" value="๊ฒ์" name="hobby">๊ฒ์
</td>
</tr>
</table>
<br>
<button type="button" id="btn">์ ์ก</button>
</form>
<script type="text/javascript">
$(document).ready(function() {
$("#btn").click(function() { <!-- ๋ฒํผ์ ํด๋ฆญํ์ ๋ -->
if($('#_name').val() == "") { <!-- ์ด๋ฆ์ ์๋ฌด๊ฒ๋ ์
๋ ฅ์ด ์๋์ ๋ -->
alert("์ด๋ฆ์ ์
๋ ฅํด์ฃผ์ธ์.");
return;
};
$('#frm').attr('action', 'servlet_1'); <!-- form ํ๊ทธ์ ํด๋น ์์ฑ ๋ถ์ฌํ๋ค. -->
$('#frm').submit(); <!-- formํ๊ทธ๋ฅผ submit ํ๋ค-->
<!-- ***** submit์ input submit์ผ๋ก ํ๋ ๊ฒ๋ณด๋ค ์ ์ด์ฟผ๋ฆฌ๋ก ํ๋ฉด ์กฐ๊ฑด์ ๋ถ์ฌํ ์ ์์ด์
์
๋ ฅ๊ฐ์ด ์๋์ง ์๋์ง ๋ณผ ์๊ฐ ์์ด ์ข๋ค.-->
});
});
</script>
</body>
</html>
Servlet_1.java
package servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Servlet_1 extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("Servlet_1 doGet");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("Servlet_1 doPost");
req.setCharacterEncoding("utf-8");
String name = req.getParameter("name");
String age = req.getParameter("age");
String gender = req.getParameter("gender");
String hobby[] = req.getParameterValues("hobby");
System.out.println(name + " " + age + " " + gender);
for (int i = 0; i < hobby.length; i++) {
System.out.println(hobby[i]);
}
//--------------------------------------------------------------
resp.setContentType("text/html; charset=utf-8");
PrintWriter pw = resp.getWriter();
pw.println("<html>");
pw.println("<head>");
pw.println("<title>Servlet_1</title>");
pw.println("</head>");
pw.println("<body>");
pw.println("<p>์ด๋ฆ : " +name+ "</p>");
pw.println("<p>๋์ด : " +age+ "</p>");
pw.println("<p>์ฑ๋ณ : " +gender+ "</p>");
pw.println("์ทจ๋ฏธ : ");
if(hobby != null) {
for (int i = 0; i < hobby.length; i++) {
pw.println(hobby[i]+ " ");
}
}
pw.println("<br><a href='servlet_2?name=" +name+ "&age=" +age+ "&gender=" +gender+ "&hobby=");
for (int i = 0; i < hobby.length; i++) {
pw.println(hobby[i]+" ");
}
pw.println("'>Servlet_2๋ก ์ด๋</a>"); //GET์ผ๋ก ์ด๋ํ๋ค. POST๋ก ๊ฐ๋ ค๋ฉด form ์ฌ์ฉํด์ ๊ฐ.
pw.println("</body>");
pw.println("</html>");
pw.close();
}
}
Servlet_2.java
package servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import dto.MemberDto;
public class Servlet_2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("Servlet_2 doGet");
String name = req.getParameter("name");
String age = req.getParameter("age");
String gender = req.getParameter("gender");
String hobby[] = req.getParameterValues("hobby");
System.out.println(name + " " + age + " " + gender);
for (int i = 0; i < hobby.length; i++) {
System.out.println(hobby[i]);
};
MemberDto dto = new MemberDto(name, age, gender, hobby);
req.setAttribute("memData", dto);
req.getRequestDispatcher("servlet_3").forward(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("Servlet_2 doPost");
}
}
Servlet_3.java
package servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import dto.MemberDto;
public class Servlet_3 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("Servlet_3 doGet");
resp.setContentType("text/html; charset=utf-8");
PrintWriter pw = resp.getWriter();
pw.println("<html>");
pw.println("<head>");
pw.println("<title>Servlet_3</title>");
pw.println("</head>");
pw.println("<body>");
pw.println("<h3>์ ๋ณด</h3>");
MemberDto dto = (MemberDto)req.getAttribute("memData");
pw.println("<p>์ด๋ฆ : " +dto.getName()+"</p>");
pw.println("<p>๋์ด : " +dto.getAge()+"</p>");
pw.println("<p>์ฑ๋ณ : " +dto.getGender()+ "</p>");
pw.println("์ทจ๋ฏธ : ");
if(dto.getHobby() != null) {
for (int i = 0; i < dto.getHobby().length; i++) {
pw.println(dto.getHobby()[i]);
}
}
pw.println("</body>");
pw.println("</html>");
pw.close();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("Servlet_3 doPost");
}
}
MemberDto.java
package dto;
public class MemberDto {
private String name;
private String age;
private String gender;
private String[] hobby;
public MemberDto() {
}
public MemberDto(String name, String age, String gender, String[] hobby) {
super();
this.name = name;
this.age = age;
this.gender = gender;
this.hobby = hobby;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String[] getHobby() {
return hobby;
}
public void setHobby(String[] hobby) {
this.hobby = hobby;
}
}
์ถ์ฒ : gmlwjd9405.github.io/2018/10/27/webserver-vs-was.html, dzone.com/articles/what-servlet-container
'๐ป ๊ฐ๋ฐ > ๐ TIL (Today I Learned)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
210323 TIL(JSP EL ํ๊ทธ, JSTL ํ๊ทธ, JSP Action ํ๊ทธ) (0) | 2021.03.23 |
---|---|
21.03.12 TIL(D+42 ์๋ธ๋ฆฟ Cookie and Session, JSP, Ajax) (0) | 2021.03.12 |
21.03.09 TIL(D+39 XML, JSON) (0) | 2021.03.09 |
21.03.05 TIL(D+37 jQuery) (0) | 2021.03.05 |
21.03.04 TIL(D+36 JavaScript) (0) | 2021.03.04 |