Java๋ก Servlet๊ธฐ๋ฐ Web Server๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ํ ๊ธ์ด๋ค.
๋ก๊ทธ์ธ ์๋น์ค ์ ๊ณต ์๋ฒ ์ ์์ ๋ชฉํ๋ก ์์ฑํจ
Spring framework๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋๋ฐ ์ ๊ตณ์ด ์ฐ์ง๋ ์๋ Servlet์ ์ฌ์ฉํด์ผํ๋์ง ์๋ฌธ์ด ๋ค ์ ์๋ค.
ํ์ง๋ง Spring framework๋ Servlet์ ๊ธฐ๋ฐ์ผ๋ก ํ(frame)์ ์ ๊ณตํด์ค๋ฟ์ด๊ธฐ ๋๋ฌธ์ ๊ณต๋ถํ๋ค๋ณด๋ฉด ์ธ์ ๊ฐ Servlet์ด๋ผ๋ ๊ฐ๋ ์ ๋ง์ฃผํ๊ฒ ๋ ๊ฒ์ด๋ค. ๋ค์ ๋์์ ๊ณต๋ถํ๊ธฐ ๋ณด๋ค ํผํผํ ๊ธฐ์ด๋ฅผ ์๊ณ framework๋ฅผ ๊ณต๋ถํ์.
ํ๋ก์ ํธ ํ๊ฒฝ
๋ณธ๊ฒฉ์ ์ผ๋ก ํ๋ก์ ํธ๋ฅผ ์์ฑํ๊ธฐ ์์ ๊ฐ๋ฐ ํ๊ฒฝ๊ณผ ์ธํ ๊ฐ, ํจํค์ง ๊ตฌ์กฐ์ ๋ํด์ ์ดํด๋ณด์.
ํ๋ก์ ํธ ์ค์ ์ด ์ต์ํ์ง ์๋ค๋ฉด ๋ค์ํ ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํ๋ฉด์ ๋์ผํ ํ๊ฒฝ ์ํ๋ฅผ ์ค์ ํด๋๋ ๊ฒ์ด ์ข๋ค.
https://suyeonchoi.tistory.com/33
- OS : mac m2
- IDE : Intellij
- Package ๊ตฌ์กฐ
- context(ํ๋ก์ ํธ ์ด๋ฆ) : bananaShop
๐ src : WAS, ์ฆ javaํ์ผ๋ค์ด ๋ชจ์ฌ์๋ค.
๐ web : .html, .js, .jsp ๋ฑ ํ๋ฉด ๊ด๋ จ ์ ์ ํ์ผ๋ค์ด ๋ชจ์ฌ์๋ค.
โ context์ด๋ฆ์ 'Run/Debug Configurations'์์ 'Deployment' ํญ์์ 'Application context'๋ฅผ ๋ณด๋ฉด ์ ์ ์๋ค.
Database
- DBMS : Oracle
- Database : xe
- userid : hr
- userpass : hr
--------------------------------------------------------
-- DDL for Table MEMBERS
--------------------------------------------------------
CREATE TABLE "HR"."MEMBERS"
( "MEMBER_ID" VARCHAR2(20 BYTE),
"MEMBER_PASS" VARCHAR2(20 BYTE),
"MEMBER_NAME" VARCHAR2(50 BYTE),
"MEMBER_EMAIL" VARCHAR2(50 BYTE)
) SEGMENT CREATION IMMEDIATE
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "SYSTEM" ;
--------------------------------------------------------
-- DDL for Index MEMBERS_PK
--------------------------------------------------------
CREATE UNIQUE INDEX "HR"."MEMBERS_PK" ON "HR"."MEMBERS" ("MEMBER_ID")
PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "SYSTEM" ;
--------------------------------------------------------
-- Constraints for Table MEMBERS
--------------------------------------------------------
ALTER TABLE "HR"."MEMBERS" MODIFY ("MEMBER_ID" NOT NULL ENABLE);
ALTER TABLE "HR"."MEMBERS" ADD CONSTRAINT "MEMBERS_PK" PRIMARY KEY ("MEMBER_ID")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "SYSTEM" ENABLE;
๋ค๋ฃจ๊ฒ ๋ server ๊ตฌ์กฐ๋ MVC2 model์ด๋ค.
MVC2 model์ ๋ค์๊ณผ ๊ฐ์ ๊ตฌ์กฐ๋ฅผ ๊ฐ๋๋ค
(MVC2 model ์ด๋ฏธ์ง)
[MVC1, MVC2 ๋ชจ๋ธ](MVC1, 2 model ๊ธ)
์ฆ, Java Web server๋ฅผ ๊ตฌ์ฑํ๊ธฐ ์ํ ์์๋ ๋ค์๊ณผ ๊ฐ๋ค.
1. Servlet (Controller)
2. Model
3. JSP (View)
Servlet (Controller)
๋์ ์น ํ์ด์ง๋ฅผ ๋ง๋ค ๋ ์ฌ์ฉ๋๋ ์๋ฐ ๊ธฐ๋ฐ์ ์น ์ ํ๋ฆฌ์ผ์ด์ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ์
๊ฑฐ์ฐฝํ ํํ๊ฐ์ง๋ง ํ์ด์ ์ค๋ช ํ์๋ฉด 'web server๊ฐ ์ฒ๋ฆฌํ ์ ์๋ ์์ฒญ์ Java๋ก ๋์ก์ ๋ ์ฒ๋ฆฌํ ๋ฅ๋ ฅ์ด ์๋ ํด๋์ค'์ด๋ค.
web server๋ HTML, CSS, JS์ฒ๋ผ ์ ์ ์ธ ํ์ผ๋ง ์ธ์ํ ์ ์๋ค.
์ ํ์ผ๋ค์ด ์๋ ์์ฒญ๋ค์ web server์ ์ฅ์์๋ ํด์ํ ์ ์์ผ๋ฏ๋ก WAS๋ก ํด๋น ์์ฒญ์ ๋ณด๋ธ๋ค.
์ด ์์ฒญ์ ๋ฐ์ ์ฒ๋ฆฌํ๋ ์ญํ ์ Servlet์ด ํ๋ค.
Servlet์ ๋ ์์ธํ ๋ด์ฉ์ ๋ค์ ๊ธ์์ ์ดํด๋ณด๋๋ก ํ๊ณ ๊ฐ๋จํ ๊ตฌ์กฐ๋ง ์ดํด๋ณด๋๋ก ํ๊ฒ ๋ค.
class ์์ @WebServlet("/auth/login.do")์ ํตํด ํด๋น ๊ฒฝ๋ก๋ก ๋ค์ด์ฌ ์ ์์์ ๋ฑ๋กํ๋ค.
doGet : http://<ip>:<port>/<context path>/auth/login.do ๊ฒฝ๋ก์ Get์์ฒญ์ผ๋ก ๋ค์ด์ค๋ฉด ์ํํ๋ ํจ์
doPost : http://<ip>:<port>/<context path>/auth/login.do ๊ฒฝ๋ก์ Post์์ฒญ์ผ๋ก ๋ค์ด์ค๋ฉด ์ํํ๋ ํจ์
package main.java.com.shinhan4.controller;
import java.util.Arrays;
import java.util.Map;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;
import main.java.com.firstzone.member.MemberDTO;
import main.java.com.firstzone.member.MemberService;
@WebServlet("/auth/login.do")
public class LoginServlet extends HttpServlet {
MemberService memberService = new MemberService();
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("GET");
// ์์ (๋ฐ์ ์์ฒญ์ ์ ๋ฌ)
// RequestDispatcher rd = request.getRequestDispatcher("/auth/login.jsp"); // ์ ๋
RequestDispatcher rd = request.getRequestDispatcher("login.jsp"); // ์๋ : 'servlet' path(auth/) == 'context' web/auth
rd.forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
request.setCharacterEncoding("utf-8");
String uid = request.getParameter("userid");
String upass = request.getParameter("userpass");
MemberDTO memberDTO = new MemberDTO().builder().memberId(uid).memberPass(upass).build();
MemberDTO login = memberService.login(memberDTO);
String message = "";
if(login == null){
message = "ID ์กด์ฌํ์ง ์์ต๋๋ค.";
} else if (login.getMemberId().equals("-1")){
message = "Password๊ฐ ์๋ชป๋์์ต๋๋ค.";
} else{
message = login.getMemberName() + "๋ ํ์ ๐";
}
// 1. ๊ฐ๊ฐ์ ํ๋ผ๋ฉํฐ ์ฝ๊ธฐ
String food = request.getParameter("food");
String[] food2 = request.getParameterValues("food2");
Map<String, String[]> map = request.getParameterMap();
for(String key:map.keySet()){
System.out.println(Arrays.toString(map.get(key)));
}
request.setAttribute("resultMessage", message);
RequestDispatcher rd = request.getRequestDispatcher("result.jsp");
rd.forward(request, response);
}
}
Model
์์ฒญ์ ๋ฐ๋ ๊ฒ(servlet ์ญํ )์ ์ ์ธํ ์์คํ ์ ๋น์ฆ๋์ค ๋ก์ง ๊ตฌ๊ฐ
Service, DAO(Repositoty)๊ฐ ์๋ค.
Service
Service๋ ์์ฒญ์ ๋ฐ๋ ๊ฒ (servlet)๊ณผ Database์ฐ๊ฒฐ(DAO) ๋ก์ง์ ์ ์ธํ ๋ชจ๋ ๋ก์ง์ ๋ด๋นํ๋ค
src>main>java>com>firstzone>member ํด๋์ MemberService.java ํ์ผ
package main.java.com.firstzone.member;
// DAO : ์
๋ฌด๋ก์ง, DB์ CRUD
// service : DB ๋ฌด๊ดํ ์
๋ฌด๋ก์ง ex. ๋น๋ฐ๋ฒํธ ์ํธํ
public class MemberService {
MemberDAO memberDAO = new MemberDAO();
public MemberDTO login(MemberDTO memberDTO){
return memberDAO.login(memberDTO);
}
}
DAO (Repository)
Database๋ฅผ ์ฐ๊ฒฐํ๋ ์ญํ ์ ํ๋ค.
src>main>java>com>firstzone>member ํด๋์ MemberDAO.java ํ์ผ
package main.java.com.firstzone.member;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import main.java.com.shinhan4.util.DBUtil;
public class MemberDAO {
Connection conn;
PreparedStatement statement;
ResultSet rs;
String sql ="";
public MemberDTO login(MemberDTO memberDTO){
System.out.println("memberDTO : " + memberDTO);
sql = "select * from members where member_id=?";
MemberDTO result = null;
conn = DBUtil.getConnection();
try {
statement = conn.prepareStatement(sql);
statement.setString(1, memberDTO.getMemberId());
rs = statement.executeQuery();
if(rs.next()){
// ์์ด๋ ์์
String resultUserPass = rs.getString("member_pass");
if(memberDTO.getMemberPass().equals(resultUserPass)){
// ๋น๋ฐ๋ฒํธ ๋ง์
result = MemberDTO.builder()
.memberId(memberDTO.getMemberId())
.memberPass(memberDTO.getMemberPass())
.memberName(rs.getString("member_name"))
.mamberEmail(rs.getString("member_email"))
.build();
} else{
result = MemberDTO.builder().memberId("-1").build();
}
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
return result;
}
}
JSP (View)
Servlet์์ HTML์ ๋์ ์ผ๋ก ๋ฐํํ๋ servlet
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<title>Title</title>
<title>Login</title>
</head>
<body>
<main>
<h1>๋ก๊ทธ์ธ</h1>
<c:set var="path" value="${pageContext.request.contextPath}"></c:set>
<form action="${path}/auth/login.do" method="post">
<%--<form action="login.do" method="post">--%>
<label>์์ด๋</label>
<input type="text" name="userid" value="kseenyoung">
<br>
<label>๋น๋ฐ๋ฒํธ</label>
<input type="password" name="userpass" value="1234">
<input type="submit" value="๋ก๊ทธ์ธ">
</form>
</main>
</body>
</html>
๊ฒฐ๊ณผ ํ๋ฉด
Web Server / WAS (Web Application Server)
์์ ์ธ๊ธํ MVC2 model์ server ๋ด๋ถ ๊ตฌ์กฐ์ ๋ํ ๊ฐ๋ ์ด์๋ค.
์กฐ๊ธ ๋ ๋ฉ๋ฆฌ์ client์ server์ ๊ด๊ณ๋ฅผ ๋ณธ๋ค๋ฉด ์๋์ ๊ฐ์ ๋ชจ์ต์ด๋ค.
server์ Database๋ฅผ ๋ถ์ธ๋ค๋ฉด ์๋์ ๊ฐ์ ๊ฒ์ด๋ค.
server๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ๋ถ์ฌ์ ์ ์ฒด ๊ตฌ์กฐ๋ฅผ ๋ณธ๋ค๋ฉด ์๋์ ๊ฐ์ ๊ฒ์ด๋ค.
'๐ปBackend > ์ ํDS ๊ธ์ตSW ์์นด๋ฐ๋ฏธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java Web] Servlet Binding | Local/ Session Storage (0) | 2024.11.19 |
---|