Servlet
Servelet / JSP
Servlet
SQL์ ํตํด์ DB์ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๊ณ , ์์ ํ๊ณ , ์ฝ๊ณ ์ฐ๋๊ฒ ๊ฐ๋ฅํ๋ค.
๋ DB์ JAVA๋ฅผ ์ ๊ทผ์์ผ ์๋ฐ๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ด์ฉํ๋ ๋ฐฉ๋ฒ์ผ๋ก JDBC๋ฅผ ๋ฐฐ์ ๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์๋ ์ฐ๋ฆฌ๊ฐ ์๊ฐ์ ์ผ๋ก ์ด์ฉํ๊ณ ์ฌ์ฉํ๋ WEB์๋ Servlet๊ณผ JSP๋ฅผ ํตํด ์ ๊ทผ์ด ๊ฐ๋ฅํด์ง๋ค.
Servlet๊ณผ JSP ๋ํ ์ธํฐํ์ด์ค ๋ฐฉ์์ ์ง์ํ๋ฉฐ HTML์ WEB์ผ๋ก ๋ณด๋ด๋ ์ญํ ์ ํ๋ฉฐ
JAVA์ WEB๊ณผ์ ์ฐ๊ฒฐ์ ๊ด๋ฆฌํ๋ ๊ฒ์ด๋ผ๊ณ ๋ณผ ์ ์๋ค.
๊ฐ๋ฐํ๊ฒฝ์ผ๋ก WEB Server์ sevlet , JSP๋ฅผ ํฌํจํ๋ WAS๋ผ ๋ถ๋ฆฌ๋ TOMCAT์ ๋ง์ด ์ฌ์ฉํ๋ค.
๊ฐ๋ฐ์๋ ์ด๊ฒ์ ์ฌ์ฉํ๊ธฐ ์ํ ํ๊ฐ์ง ์ฝ์์ ๊ฐ์ง๊ณ ์๋๋ฐ
HTML / JSP ํ์ผ์ TOMCAT => wepapps => ํ์ผ๋ช
JAVA ํ์ผ์ TOMCAT => wepapps => ํ์ผ๋ช
=> WEB-INF => classes ํด๋์์ ๋ฃ๋๋ค.
โป Class Path๋ฅผ ์ํํ ํ์
servlet ์ด๋?
JAVA๋ WEB์ ์ํด Servlet์ด๋ผ๋ Beans์ ์ ๊ณตํด์ค๋ค.
- ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ Servlet ํด๋์ค์ ๊ตฌํ ๊ท์น์ ์งํจ ์๋ฐ ์น ํ๋ก๊ทธ๋๋ฐ ๊ธฐ์ ์ด๋ค
JAVA์ Main์ ํตํด ์ดํ๋ฆฌ์ผ์ด์ ์ ์ด์ ๋ ๊ทธ๋ด ํ์ ์์ด HTML์ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ธํด Beans์ ์คํ ํ๊ฒ ๋๋ค.
- ์น ๊ธฐ๋ฐ์ ์์ฒญ์ ๋ํ ๋์ ์ธ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ Server Side์์ ๋์๊ฐ๋ Java Program
- Java ์ฝ๋ ์์ HTML ์ฝ๋ (ํ๋์ ํด๋์ค)
- ์น ๊ฐ๋ฐ์ ์ํด ๋ง๋ ํ์ค
Servlet์ ๋์ ๋ฐฉ์
Client -> Servlet Contatiner๋ก HTTP Request -> HttpServletRequest, HttpServletResponse ๊ฐ์ฒด ์์ฑ -> thread ์์ฑ / run()์ ํตํด init()์คํ(์์ฑ์์๊ฐ์ด ํ๋ฒ๋ง ์ฌ์ฉ)
-> ์๋ธ๋ฆฟ ๋ถ์(Web.xml) -> ์ฐพ์ ์๋ธ๋ฆฟ -> service() ๋ฉ์๋ ํธ์ถ -> doGet(), doPost() ํธ์ถ -> HttpServletRequest, HttpServletResponse ๋ ๊ฐ์ฒด ์๋ฉธ (thread ์ข
๋ฃ)
- ์ฌ์ฉ์(ํด๋ผ์ด์ธํธ)๊ฐ URL์ ์ ๋ ฅํ๋ฉด HTTP Request๊ฐ Servlet Container๋ก ์ ์กํฉ๋๋ค.
- ์์ฒญ์ ์ ์ก๋ฐ์ Servlet Container๋ thread๋ฅผ ์์ฑํ๊ณ HttpServletRequest, HttpServletResponse ๊ฐ์ฒด๋ฅผ ์์ฑํฉ๋๋ค.
- web.xml์ ๊ธฐ๋ฐ์ผ๋ก ์ฌ์ฉ์๊ฐ ์์ฒญํ URL์ด ์ด๋ ์๋ธ๋ฆฟ์ ๋ํ ์์ฒญ์ธ์ง ์ฐพ์ต๋๋ค.
- run()์ ํตํด ํด๋น method์ init()์ ํธ์ถ (์์ฑ์์ ๊ฐ์ด ํ๋ฒ๋ง ํธ์ถ๊ฐ๋ฅ)
- ํด๋น ์๋ธ๋ฆฟ์์ service๋ฉ์๋๋ฅผ ํธ์ถํ ํ ํด๋ฆฌ์์ธํธ์ GET, POST์ฌ๋ถ์ ๋ฐ๋ผ doGet() ๋๋ doPost()๋ฅผ ํธ์ถํฉ๋๋ค.
- doGet() or doPost() ๋ฉ์๋๋ ๋์ ํ์ด์ง๋ฅผ ์์ฑํ ํ HttpServletResponse๊ฐ์ฒด์ ์๋ต์ ๋ณด๋ ๋๋ค.
- ์๋ต์ด ๋๋๋ฉด HttpServletRequest, HttpServletResponse ๋ ๊ฐ์ฒด๋ฅผ ์๋ฉธ์ํต๋๋ค.(thread ์ข ๋ฃ)
Servlet Class๋ init()๊ณผ service() destroy()๋ฅผ ๊ฐ์ง๋ค.
request๋ฅผ ๋ฐ์ผ๋ฉด thread๋ฅผ ์์ฑํ๋ฉฐ run()์ ํตํด ํด๋น ์๋ธ๋ฆฟ์ ์คํ์ํจ๋ค.
init()์ ์คํํ๊ณ service()๋ฅผ ์คํํ๊ณ thread๋ ์ข
๋ฃ๊ฐ ๋๋ค.
์๋ฐ์์๋ ์ด๋ฌํ ํน์ดํ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋ค, ์ฌ๋ฌ๊ณณ์์ ๋์ ์ ์์์๋ ํ๋ก์ธ์ค ์์ฑ์ด ์๋ thread๋ฅผ ์์ฑํ๋ฉฐ ๊ณผ๋ถํ๋ฅผ ๋ฐฉ์ง ํ ์ ์๋ค.
์ฌ๊ธฐ์ ์ค์ฌ์ ์ผ๋ก ๋ค๋ค์ผ ํ๋ ๋ถ๋ถ์ html์ ์
๋ ฅํ๊ณ responeํ๋ ๋ถ๋ถ์ธ service()๋ถ๋ถ์ด๋ค.
์๋ฐ๋ init, service, destroy๋ฅผ ์ง์ ์ ์ผ๋ก ์ค๋ฒ๋ผ์ด๋ฉํ๋๊ฒ์ ์ข์ํ์ง ์๋๋ค.
๊ทธ๋์ html์ ๋ณด๋ด๊ธฐ ์ํด์ ๊ตฌ์กฐ๋ฅผ ์์์ ์๋ service()๋ฅผ ํ๋ฒ๋ณด๋ฉด getType๊ณผ postType์ ๋ฐ์ doGet(), doPost()๋ฅผ ํธ์ถํ๋๋ฐ ๋ํ์
๋ชจ๋ ์๋ฌ๋ฅผ ํธ์ถํ๋ค.
service๋ฅผ ์ฌ์ฉ ํ ์ ์์ง๋ง ๋ช
ํ์ฑ์ ์ํด doGet()๊ณผ doPost()๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉํ์ฌ ์ฌ์ฉํ๊ฒ ๋๋ค.
GET type์ด๋ ์ฐ๋ฆฌ๊ฐ ์์ผ๋ก ์ง์ ์ ๋ ฅํ๋ url์ ๋งํ๋ค. HEAD ๋ถ๋ถ์ ์ ์ฅ๋์ด request๋๋ค.
ex) https://www.google.co.kr/search?q=get+type&ei
url ๋ค์ uri๊ฐ ๋ถ๋๋ค. ( ์
๋ ฅ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ url๊ณผ ๊ฐ์ด ๋ณด์ฌ์ค๋ค.)
Post type์ด๋ ๋งํฌ๋ ์ด๋ ํ ํ๋์ผ๋ก ์ ๊ทผํ๋ ๋ฐฉ์์ ๋งํ๋ค. BODY ๋ถ๋ถ์ ์ ์ฅ๋์ด request ๋๋ค.
ex) ๋ก๊ทธ์ธ์ id์ pwd๊ฐ url์ ๋ํ๋์ง ์๋๊ฒ
๋ ํ์
์ ์ด๊ฒ ๋ง๊ณ ๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋ฐฉ์์ ๋ฐ๋ผ ๋๋๊ฒ ๋๋๋ฐ get์ ์
๋ ฅ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ url์ ์ ๋ถ ๋ณด์ฌ์ฃผ๊ธฐ์๋ ํ๊ณ๊ฐ ์๋ค.
ํ์ง๋ง post๊ฐ ์กด์ฌํ๋ body๋ ํ๊ณ๊ฐ ์กด์ฌํ์ง ์๋๋ค. ๊ทธ๋ ๊ธฐ์ ์ฌ์ง์ด๋, ๋ง์ ๋ฐ์ดํฐ๋ฅผ ๋๊ธธ๋๋ ์ฌ์ฉ๋๋ค.
โป ์น์ด๋ ์ดํ์ ์ด์ฉํ๋ค ๋ณด๋ฉด ์ฌ์ง์ด๋ ๋ฐ์ดํฐ ์ ์ก์ ์ ํ์ ๊ฑธ์ด๋ ์ด์ ์ด๋ค.
servlet ํ๊ฒฝ์ค์
class path๋ผ๋ ๋ง์ ๋ง์ด ๋ค์ด๋ดค์ ๊ฒ์ด๋ค. path๋ฅผ ํตํด ํจ์จ์ ์ผ๋ก ์ฝ๋๋ฅผ ์์ฑ ํ ์ ์๊ฒ๋๋ค.
servlet๊ณผ html์ ์ ๊ทผ์ Mapping์ ํตํด ์ฝ๊ฒ ์ ๊ทผ ํ ์ ์๊ฒ ๋๋ค.
was ํด๋ ๊ตฌ์กฐ๋ฅผ ๋ณด๋ฉด

์์ ๊ฐ์ ํ์ผ์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์๋๋ฐ WEB-INF ์ web.xml ํ์ผ๋ก mapping์ ํ ์ ์๋ค.
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0"
metadata-complete="true">
<servlet>
<servlet-name>FirstServlet</servlet-name>
<servlet-class>FirstServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FirstServlet</servlet-name>
<url-pattern>/FirstServlet</url-pattern>
</servlet-mapping>
</web-app>
web.xml์ ํฐ์ผ์ ์ฌ์ฉ ๋ฒ์ ๊ณผ ์ฌ๋ฌ๊ฐ์ง ์ ๋ณด๋ฅผ ์ป์ ์ ์๋๋ฐ ์ ์ฒด์ ์ธ ์ค์ ์ผ๋ก conf์ server.xml์ผ๋ก๋ ์ค์ ์ด ๊ฐ๋ฅํ๋ค.
ํ์ง๋ง ๋
๋ฆฝ์ ์ธ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ธฐ ์ํด web.xml์ ์ค์ ํ๊ธฐ๋ก ํ์
java์ map๊ตฌ์กฐ๋ฅผ ์๋ค๋ฉด key์ value๊ฐ ์กด์ฌํ๋ ๊ฒ์ ์ ์ ์์ ๊ฒ์ด๋ค. value๋ก servlet์ ์ก์์ฃผ๊ณ
ํต์์ ์ผ๋ก key์ ๋ค์ด๋ฐ์ servlet๊ณผ ๋์ผ์ ํ๋ ๊ฒ์ด ๋ณดํธ์ ์ด๋ค.
์์ ๊ฐ์ด ํค๊ฐ์ ์ ํด ์ฃผ๊ณ mapping์ ํตํด ๋ค์ํ๋ฒ ์ง์ ํด ์ค๋ค.
์ด๋ ๊ฒ ๋งตํ์ด ๋๋๋ฉด html์์ ํ์ผ ๊ฒฝ๋ก๋ฅผ ๋ฐ๋ผ ์ง์ ํด ์ฃผ๋ ๊ฒ์ด ์๋๋ผ ๋งตํ๊ฐ์ผ๋ก ์ฝ๊ฒ ์ ๊ทผ ํ ์ ์๋ค.
๋ง์ฝ ํฐ์ผ์ด๋ ์ํ์น๋ฅผ Eclipse์ ๊ฐ์ IDE์ ์ฐ๋ํ์ฌ ์ฌ์ฉ ํ๋ค๋ฉด lib๋ผ๋ ํด๋๋ฅผ ๋ง๋๊ฒ ๋๋ค.
์ด ํด๋์๋ ๊ฐ ๊ณ๋ฐ์ ๋ง๋ ~ .jarํ์ผ์ ๋ฃ๊ฒ ๋๋๋ฐ ์ด๋ฌํ ์ด์ ๋ ๋
๋ฆฝ์ ์ธ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ธฐ ์ํด์์ด๋ค.
Warํ์ผ
๋ง์ฝ ์์
์ ํ๋ค๊ฐ ๋ค๋ฅธ ๊ณณ์์ ์์
์ ํด์ผํ๋ ์ํฉ์ด ๋ฐ์ํ๋ฉด ์์
์ ํ๋ ํ์ผ์ ํ๋์ฉ ์ด๊ธฐ๋ ์์
์ ๋ ํ๊ณ ๋ ํ๊ฒฝ์ ๋ง๋ค์ด ์ค์ผ ํ ๊ฒ์ด๋ค.
ํ์ง๋ง was ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋ ์์
์ ํ๊ณ ์๋ค๋ฉด ์์ฝ๊ฒ warํ์ผ๋ก ์์ถํ์ฌ ์์
์ ์์ํ๊ฒ ํ ์ ์๋ค.
์น ์์นด์ด๋ธWeb Archive ํ์ผ์ธ WAR ํ์ผ์ ์๋ฐ์ JAR ํ์ผ๊ณผ ๊ฐ์ ์ญํ ์ ํ๋ฉฐ, ์ฃผ๋ก ์น ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ฌถ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
ํ์ผ ์์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ๊ธฐ ์ํด ์ปดํ์ผ๋ ๋ชจ๋ ํด๋์ค ํ์ผ๋ค๋ฟ๋ง ์๋๋ผ ์ ๊ณต๋์ด์ผ ํ๋ ๋ชจ๋ ํ๋กํผํฐ ํ์ผ๊ณผ ๋ค๋ฅธ ์ค์ ํ์ผ๋ค๋ ํฌํจ๋๋ค.
WAR ํ์ผ์ ๊ฐ์ฅ ์ค์ํ ์ ์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด๋ป๊ฒ ์ค์ ํ ์ง ์ ์ํ ๋ฐฐํฌ ๋ช ์ธ์(web.xml ํ์ผ)๊ฐ ์๋ค๋ ๊ฒ์ด๋ค. ์ด ํ์ผ์ ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ์๊ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด๋ป๊ฒ ๋ฐฐํฌํ๊ณ ์ ๊ณตํ ์ง์ ๊ดํ ๋ด์ฉ์ ๋ช ๋ น์ผ๋ก ์ ๊ณตํ๋ค.
- command line ์์์ WARํ์ผ์ ๋ง๋ค๊ณ ์ ํ๋ ํด๋๋ก ์ด๋
- jar cvf
.war . ์ ๋ ฅ (์ : jar cvf test.war . ) - ํด๋น ํด๋๋ด์ warํ์ผ ์์ฑ์๋ฃ
IntelliJ IDEA๋ ์ดํด๋ฆฝ์ค ๊ฐ์ IDE ๋๋ถ๋ถ์ ํ๋ก์ ํธ์์ ํด๋ฆญ ๋ช ๋ฒ์ผ๋ก WARํ์ผ์ ์์ฑํ ์ ์๋ค. ๋ฉ์ด๋ธ ์๋จ์ packagingํ๊ทธ๋ฅผ ์ฌ์ฉํด ์ฝ๊ฒ WARํ์ผ์ ์์ฑํ ์ ์๋ค.
์์ฑ๋ WARํ์ผ์ wasํ์ผ์ด ์กด์ฌํ๋ dir์ ๋ฃ๋๋ค๋ฉด ์๋์ผ๋ก was๊ฐ ์์ฑ๋ ๊ฒ์ด๋ค.
์ฑ๊ธ Thread
โป Servlet์ thread๋ฅผ ์ฌ์ฉํ์ฌ ๊ณผ๋ถํ๋ฅผ ์ค์ด๋ ์ฅ์ ์ ๊ฐ์ง๊ณ ์๋ค๊ณ ํ๋ค.
ํ์ง๋ง ์ผํ๋ชฐ๊ฐ์ด ์ฌ๋ฌ์ฌ๋๋ค์ด ๋ค์ด์ ๋ฌผ๊ฑด์ ๋ด๊ณ ๊ฐ๊ฒฉ์ ์ ์ฅํด๋๋ ค๋ ํ๋์ ํ๋ค๋ฉด Servlet์ Field ๋ณ์์ ์ ์ฅ์ ํ์ฌ์ผ
์๋ก์ด thread๊ฐ ์คํ๋๋๋ผ๊ณ ์ ์ ์ฉ์ด ๋ ๊ฒ์ด๋ค.
ํ์ง๋ง ํ๋์ ๋ณ์๋ฅผ ๊ฐ์ง๊ธฐ์ ๋ค๋ฅธ์ฌ๋๋ค ๋ํ ์ ๊ทผํ์ฌ ๊ฐ์ ์์ ํ ๊ฒ์ด๋ค.
๊ทธ๋ ๊ธฐ์ Synchronized๋ฅผ ์ฌ์ฉ ํ๋๋ฐ ์ด๊ฒ์ ์ฌ์ฉํ๋ค๋ฉด ์ด์ฉ์์ ๋ถํธ ๋ํ ์์ ๊ฒ์ด๊ณ thread์ ์กด์ฌ ์์ฒด๊ฐ ์๋ฏธ๊ฐ ์์ด์ง๋ค.
๊ทธ๋ ๊ธฐ์ Field๋ ์ ์ธํ์ง ์๊ณ IO๋ฅผ ํตํ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ก ์ ์ฅํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ค.
Leave a comment