μΌ | μ | ν | μ | λͺ© | κΈ | ν |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- ComputerScience
- Java
- database
- Python
- css
- λ°μ΄ν°λ² μ΄μ€
- μλ°μ€ν¬λ¦½νΈ
- μν
- νλ‘κ·Έλλ°
- ν°μ€ν 리μ±λ¦°μ§
- html
- κΉλ―Έκ²½μλ§νμμ
- JavaScript
- μ±
- μ½λ©
- λ°°μμ λ°°μ
- Kλ°°ν°λ¦¬λ 볼루μ
- μνμ£Ό
- μΉνΌλΈλ¦¬μ±
- μλ°
- Kλ°°ν°λ¦¬
- λ°μν
- 리μ‘νΈ
- λΌνλΌμ€μλ§λ
- λ μ
- μ€λΌν΄
- κ°λ°
- μΉνμ΄μ§λ§λ€κΈ°
- μ€λΈμ
- νμ΄μ¬
- Today
- Total
JiYoung Dev π₯
[JSP/Servlet] Web MVC (2023.05.19) λ³Έλ¬Έ
π λμμΈ ν¨ν΄(Design Pattern)
μμ¬μν΅ μλ¨μ μΌμ’
μννΈμ¨μ΄ 곡νμ μννΈμ¨μ΄ λμμΈμμ νΉμ λ¬Έλ§₯μμ 곡ν΅μ μΌλ‘ λ°μνλ λ¬Έμ μ λν΄ μ¬μ¬μ© κ°λ₯ν ν΄κ²°μ±
μμ€λ κΈ°κ³ μ½λλ‘ λ°λ‘ μ νλ μ μλ μμ±λ λμμΈμ μλλ©° λ€λ₯Έ μν©μ λ§κ² μ¬μ©λ μ μλ λ¬Έμ λ€μ ν΄κ²°νλλ°μ μ°μ΄λ ν νλ¦Ώ
νλ‘κ·Έλλ¨Έκ° μ΄ν리μΌμ΄μ μ΄λ μμ€ν μ λμμΈν λ 곡ν΅λ λ¬Έμ λ€μ ν΄κ²°νλλ°μ μ°μ΄λ νμνλ κ΄ν
π μΉ λμμΈ ν¨ν΄
μ½λμ μ¬μ¬μ©κ³Ό μ μ§λ³΄μμ νΈλ¦¬μ±μ μν΄μ μ ν΄μ§ μ½μλλ‘ κ΅¬μ‘°λ₯Ό λμμΈ νλ κ²
Spring νλ μμν¬μμλ MVC ν¨ν΄μ΄ κΈ°λ³Έ
π MVCν¨ν΄
π μΉ MVC ν¨ν΄ 2κ°μ§
βοΈ Model1
view, controller λͺ¨λ jspμμ μμ±
βοΈ Model2
viewλ jsp (htmlμ΄ μ£Όμ΄κΈ° λλ¬Έμ)
λ‘μ§μ²λ¦¬λ servletμΌλ‘ μμ±νλ κ² (javaκ° μ£Όμ΄λ―λ‘)
λ°μ΄ν°λ² μ΄μ€μ μ°κ²°μ model2 servletμΌλ‘ μ²λ¦¬
π MVCν¨ν΄ μ€μ΅
π Model1 μ€μ΅
βοΈ λ°μ΄ν°λ² μ΄μ€ μ°λνκΈ°
βοΈ Model1 μ½λ μμ±
<%@page import="com.smhrd.model.Students"%>
<%@page import="java.sql.SQLException"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="com.smhrd.model.FullStack"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.Connection"%>
<%@ 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>
<!-- WEB MVC MODEL 1 : λΉμ¦λμ€ λ‘μ§(Controller), νλ©΄νν(view) >> JSPμ μμ±
νλ‘μ νΈμ κ·λͺ¨κ° μμ λ μ¬μ© -->
<!-- DB μ°λ -->
<!-- 0. JDBC κ΄λ ¨ λꡬ κ°μ Έμ€κΈ°
: λΌμ΄λΈλ¬λ¦¬ μΆκ° (WEBAPP > WEB-INF) -->
<%
//DB μ°λμ νμν κ°μ²΄ μ μΈ
Connection conn = null; //λ°μ΄ν°λ² μ΄μ€ μ°κ²°
PreparedStatement ps = null; //sql λ€λ£¨λ κ°μ²΄
ResultSet rs = null; //sql μ€ν κ΄λ ¨ κ°μ²΄
//λ°μ΄ν°λ² μ΄μ€μμ λΆλ¬μ¨ μ 보
Students stu = null;
try{
//1. μ€λΌν΄κ³Ό μ°κ²°ν λλΌμ΄λ² κ°μ§κ³ μ€κΈ°(λμ λ‘λ©)
//λμ λ‘λ© : νλ‘κ·Έλ¨ μ€ν ν μ½λλ₯Ό λ§λ¬μ λ μ€ν
//μ μ λ‘λ© : νλ‘κ·Έλ¨ μ€ννμλ§μ μ€ν
Class.forName("oracle.jdbc.OracleDriver");
//2. μ§μ ν λ°μ΄ν°λ² μ΄μ€μ μ°κ²°νκΈ° μν κ°μ²΄ μμ±(Connection)
//κ°μ²΄ μμ± ν λ°μ΄ν°λ² μ΄μ€μ μ°κ²°μ url, λ°μ΄ν°λ² μ΄μ€ κ³μ μ 보 νμ
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String user = "service";
String password = "12345";
conn = DriverManager.getConnection(url, user, password);
//3. sqlλ¬Έ μμ±
String sql = "select * from students where name=?";
//sql 쿼리문μ λ€λ£¨κΈ° μν κ°μ²΄ μμ± (PreparedStatement)
ps = conn.prepareStatement(sql);
//sqlλ¬Έ ? μ리 μ±μ°κΈ° : setString(μ리μ, κ°)
ps.setString(1, "μ§μ");
//4. sql μ€ν
//insert, delete, update => executeUpdate() - λ°ννμ
int(λͺ κ°μ νμ΄ μ
λ°μ΄νΈ λμλμ§)
//select => executeQuery() - λ°ννμ
ResultSet(μ½μ΄λ³Έ λ°μ΄ν° ν¬ν¨, 컀μμ κ°λ
)
//ResultSetμ nextμ ν¨κ» μ¬μ©
//μ? 첫λ²μ§Έ νμ μμ±λͺ
μ μλ―ΈνκΈ° λλ¬Έ
rs = ps.executeQuery();
if(rs.next()){
//next()λ°ννμ
μ true νΉμ false
//컀μκ° κ°λ¦¬ν€λ νμ λ°μ΄ν°κ° μμ λ true, μμΌλ©΄ false
String name = rs.getString("name");
String major = rs.getString("major");
String age = rs.getString("age");
//λ°μ΄ν°λ² μ΄μ€μμ κ°μ Έμ¨ μ 보λ₯Ό κ°μ²΄λ‘ μμ±
stu = new Students(name, major, age);
}
}catch(ClassNotFoundException e){
//ν΄λμ€(oracleDrive)μ κ²½λ‘κ° μλͺ»λμ κ²½μ°
System.out.println("OracleDriver ν΄λμ€μ κ²½λ‘κ° μλͺ»λμμ΅λλ€.");
}catch(SQLException e){
System.out.println("SQL μμΈκ° λ°μνμ΅λλ€.");
}catch(Exception e){ //λͺ¨λ μμΈμν© μμ ν΄λμ€)
System.out.println("λ€λ₯Έ μμΈμν©μ΄ λ°μνμ΅λλ€.");
e.printStackTrace(); //μμΈ, λ°μ μ μ°¨ μ½μμ°½μ μΆλ ₯
}finally{
//μμΈ μν©μ΄ λ°μνλ νμ§ μλ 무쑰건 μ€ν
//μ¬μ©ν μμ λ°ν(μμ±ν μμ λ°λλ‘ λ°ν)
try{
//μμ catchλ¬Έμμ μ€λ₯κ° λ°μνλ©΄ κ° κ°μ²΄λ null κ°μ κ°κ² λ¨
//null κ°μ closeκ° λΆκ°λ₯νλ―λ‘ μμΈμ²λ¦¬
rs.close();
ps.close();
conn.close();
}catch(Exception e){
System.out.println("finallyμμ μμΈμν© λ°μ!");
e.printStackTrace();
}
}
%>
μ΄λ¦ : <%= stu.getName() %><br>
μ 곡 : <%= stu.getMajor() %><br>
λμ΄ : <%= stu.getAge() %><br>
</body>
</html>
βοΈ Model2 μ½λ μμ±
servlet μ½λ
package com.smhrd.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
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 javax.servlet.http.HttpSession;
import com.smhrd.model.Students;
@WebServlet("/Model2")
public class Model2 extends HttpServlet {
//Model2.λ‘ μμ² λ¨Όμ
//1. DBμ°λ
//2. SQL μ€ν (Students ν
μ΄λΈμ λͺ¨λ κ° κ°μ Έμ€κΈ°)
//3. 3λͺ
μ νμμ 보 >> μΈμ
μ μ μ₯
//4. Ex02model.jspλ‘ μ΄λ
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//DB μ°λμ νμν κ°μ²΄ μ μΈ
Connection conn = null; //λ°μ΄ν°λ² μ΄μ€ μ°κ²°
PreparedStatement ps = null; //sql λ€λ£¨λ κ°μ²΄
ResultSet rs = null; //sql μ€ν κ΄λ ¨ κ°μ²΄
//λ°μ΄ν°λ² μ΄μ€μμ λΆλ¬μ¨ μ 보
Students stu = null;
List<Students> stuList = new ArrayList<Students>();
PrintWriter out = response.getWriter();
try{
//1. μ€λΌν΄κ³Ό μ°κ²°ν λλΌμ΄λ² κ°μ§κ³ μ€κΈ°(λμ λ‘λ©)
//λμ λ‘λ© : νλ‘κ·Έλ¨ μ€ν ν μ½λλ₯Ό λ§λ¬μ λ μ€ν
//μ μ λ‘λ© : νλ‘κ·Έλ¨ μ€ννμλ§μ μ€ν
Class.forName("oracle.jdbc.OracleDriver");
//2. μ§μ ν λ°μ΄ν°λ² μ΄μ€μ μ°κ²°νκΈ° μν κ°μ²΄ μμ±(Connection)
//κ°μ²΄ μμ± ν λ°μ΄ν°λ² μ΄μ€μ μ°κ²°μ url, λ°μ΄ν°λ² μ΄μ€ κ³μ μ 보 νμ
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String user = "service";
String password = "12345";
conn = DriverManager.getConnection(url, user, password);
//3. sqlλ¬Έ μμ±
String sql = "select * from students";
//sql 쿼리문μ λ€λ£¨κΈ° μν κ°μ²΄ μμ± (PreparedStatement)
ps = conn.prepareStatement(sql);
//4. sql μ€ν
//insert, delete, update => executeUpdate() - λ°ννμ
int(λͺ κ°μ νμ΄ μ
λ°μ΄νΈ λμλμ§)
//select => executeQuery() - λ°ννμ
ResultSet(μ½μ΄λ³Έ λ°μ΄ν° ν¬ν¨, 컀μμ κ°λ
)
//ResultSetμ nextμ ν¨κ» μ¬μ©
//μ? 첫λ²μ§Έ νμ μμ±λͺ
μ μλ―ΈνκΈ° λλ¬Έ
rs = ps.executeQuery();
HttpSession session = request.getSession();
session.setAttribute("stuList", stuList);
while(rs.next()){
//next()λ°ννμ
μ true νΉμ false
//컀μκ° κ°λ¦¬ν€λ νμ λ°μ΄ν°κ° μμ λ true, μμΌλ©΄ false
String name = rs.getString("name");
String major = rs.getString("major");
String age = rs.getString("age");
//λ°μ΄ν°λ² μ΄μ€μμ κ°μ Έμ¨ μ 보λ₯Ό κ°μ²΄λ‘ μμ±
stu = new Students(name, major, age);
//μμ±ν κ°μ²΄ λ°°μ΄μ μ μ₯
stuList.add(stu);
}
}catch(ClassNotFoundException e){
//ν΄λμ€(oracleDrive)μ κ²½λ‘κ° μλͺ»λμ κ²½μ°
System.out.println("OracleDriver ν΄λμ€μ κ²½λ‘κ° μλͺ»λμμ΅λλ€.");
}catch(SQLException e){
System.out.println("SQL μμΈκ° λ°μνμ΅λλ€.");
}catch(Exception e){ //λͺ¨λ μμΈμν© μμ ν΄λμ€)
System.out.println("λ€λ₯Έ μμΈμν©μ΄ λ°μνμ΅λλ€.");
e.printStackTrace(); //μμΈ, λ°μ μ μ°¨ μ½μμ°½μ μΆλ ₯
}finally{
//μμΈ μν©μ΄ λ°μνλ νμ§ μλ 무쑰건 μ€ν
//μ¬μ©ν μμ λ°ν(μμ±ν μμ λ°λλ‘ λ°ν)
try{
//μμ catchλ¬Έμμ μ€λ₯κ° λ°μνλ©΄ κ° κ°μ²΄λ null κ°μ κ°κ² λ¨
//null κ°μ closeκ° λΆκ°λ₯νλ―λ‘ μμΈμ²λ¦¬
rs.close();
ps.close();
conn.close();
}catch(Exception e){
System.out.println("finallyμμ μμΈμν© λ°μ!");
e.printStackTrace();
}
}
response.sendRedirect("Ex02model2.jsp");
}
}
jsp μ½λ
<%@page import="com.smhrd.model.Students"%>
<%@page import="java.util.ArrayList"%>
<%@ 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>
<!-- μΈμ
μμ μ μ₯λμ΄ μλ νμ μ 보(3λͺ
) ν
μ΄λΈλ‘ μΆλ ₯νκΈ° -->
<table border=1>
<tr>
<td>μ΄λ¦</td>
<td>μ 곡</td>
<td>λμ΄</td>
</tr>
<%
ArrayList<Students> stu = (ArrayList)session.getAttribute("stuList");
for(int i = 0 ; i < stu.size() ; i++){
out.print("<tr>");
out.print("<td>" + stu.get(i).getName() + "</td>");
out.print("<td>" + stu.get(i).getMajor() + "</td>");
out.print("<td>" + stu.get(i).getAge() + "</td>");
out.print("</tr>");
}
%>
</table>
</body>
</html>
< μμ ν μ μλ νμ΄ μ½λ >
Model2.servlet
μ°¨μ΄μ : Listλ‘ λ°κ³ , μΈμ μμ± λ° μ μ₯ μμΉλ₯Ό whileλ¬Έ μλμμ μμ±!
package com.smhrd.servlet;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
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 javax.servlet.http.HttpSession;
import com.smhrd.model.FullStack;
@WebServlet("/Model2")
public class Model2 extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Model2λ‘ μμ² λ¨Όμ !
// 1. DB μ°λ
// 2. SQL μ€ν (FullStack ν
μ΄λΈ μμ λͺ¨λ κ° κ°μ Έμ€κΈ°, 쑰건 X)
// 3. 3λͺ
μ νμ μ 보 >> μΈμ
μ μ μ₯
// 4. Ex02model2.jspλ‘ μ΄λ
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
FullStack fs = null;
//FullStack κ°μ²΄μ λν λ°°μ΄ μμ±
//Tip. Listλ‘ μ
μΊμ€ν
νμ¬ μ¬μ©
List<FullStack> stuList = new ArrayList<FullStack>();
//μ
μΊμ€ν
νλ μ΄μ : νμμ λ°λΌ λ€λ₯Έ 리μ€νΈ νμ
μΌλ‘ λ°κΎΈμ΄ μ¬μ©νλλ‘
//Listλ μΈν°νμ΄μ€λ‘ κ°μ²΄ μμ±ν μ μμ. λ°λΌμ new Listλ λΆκ°ν¨!
//λ°λΌμ ꡬνν λλ ArrayList νΉμ LinkedListλ‘ κ΅¬νν΄μΌ ν¨.
//-ArrayListλ λ°μ΄ν°λ₯Ό κ²μνλλ° μ©μ΄ν νμ
//-LinkedListλ μ€κ° λ°μ΄ν°λ₯Ό μμ νκ±°λ μΆκ°νλλ° μ©μ΄
try{
//0. JDBCκ΄λ ¨ λꡬ κ°μ Έμ€κΈ° - λΌμ΄λΈλ¬λ¦¬ μΆκ° (webapp > WEB-INFμ λ£μ΄μ£ΌκΈ°)
//1. μ€λΌν΄κ³Ό μ°κ²°ν λλΌμ΄λ² κ°μ§κ³ μ€κΈ°(λμ λ‘λ©)
// λμ λ‘λ© : μ½λλ₯Ό λ§λ¬μ λ μ€ν (μ μ λ‘λ© : νλ‘κ·Έλ¨ μ€ννμλ§μ μ€ν)
Class.forName("oracle.jdbc.OracleDriver");
//2. μ§μ ν λ°μ΄ν°λ² μ΄μ€μ μ°κ²°νκΈ° μν κ°μ²΄ μμ± : Connection
// - url, μμ€ν
κ³μ μ§μ νμ¬ λ°μ΄ν°λ² μ΄μ€ μ μ
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String user = "service";
String password = "12345";
conn = DriverManager.getConnection(url, user, password);
//sql ν
String sql = "select * from fullstack";
//sql 쿼리문μ λ€λ£¨κΈ° μν κ°μ²΄ μμ± : PreparedStatement - μμ±, μ€ν λ±
ps = conn.prepareStatement(sql);
//? μ리 μ±μ°κΈ° : setString(μ리μ(1λΆν° μμ),κ°)
// ps.setString(1, "μ μν");
//INSERT, DELETE, UPDATE → executeUpdate() : λ°ννμ
int (λͺκ°μ νμ΄ μ
λ°μ΄νΈ λμλμ§)
//SELECT(read) → executeQuery() : λ°ννμ
ResultSet (μ½μ΄μ¨ λ°μ΄ν° ν¬ν¨, 컀μμ κ°λ
)
//Resultset μ next μ ν¨κ» μ¬μ© (κ·Έ λ€μνμΌλ‘ 컀μ μ΄λ)
//sql μ€ν
rs = ps.executeQuery();
while(rs.next()){ //next() : true/false
// → true : 컀μκ° κ°λ¦¬ν€λ νμ λ°μ΄ν°κ° μμ λ
// → false : 컀μκ° κ°λ¦¬ν€λ νμ λ°μ΄ν°κ° μμ λ
String name = rs.getString("name"); //맀κ°μΈμ : μ»¬λΌ - 컬λΌμ΄λ¦
String major = rs.getString(2); // νΉμ 컬λΌλ²νΈ(1λΆν° μμ) μ¬μ© κ°λ₯
String phone = rs.getString("phone");
//λ°μ΄ν°λ² μ΄μ€μμ κ°μ Έμ¨ μ 보λ₯Ό κ°μ²΄λ‘ μμ±
//νμ νλͺ
μ μ λ³΄λ§ μ μ₯
fs = new FullStack(name, major, phone);
//λ°μ΄ν°λ² μ΄μ€μμ κ°μ Έμ¨ μ 보λ₯Ό ν΅ν΄ λ§λ FullStack κ°μ²΄λ₯Ό λ°°μ΄μ μΆκ°
stuList.add(fs);
}
}catch(ClassNotFoundException e){
//Exception : λͺ¨λ μμΈμν©μ μμ ν΄λμ€
//ClassNotFoundException : ν΄λμ€μ κ²½λ‘κ° μλͺ»λμ κ²½μ°(OracleDrive κ°μ§κ³ μ¬ λ κ²½λ‘κ° μλͺ»λμ κ²½μ°)
System.out.println("OracleDriver ν΄λμ€ λͺ»μ°Ύμ!");
}catch(SQLException e){
System.out.println("sql μμΈ λ°μ!");
}catch(Exception e){
System.out.println("λ€λ₯Έ μμΈ λ°μ!");
e.printStackTrace(); //μμΈ, λ°μ μ μ°¨ μ½μμ°½μ μΆλ ₯
}finally{ //μμΈμν©μ΄ λ°μνλμ§, νμ§ μλμ§κ°μ 무쑰건 μ€ν!
//μ¬μ©ν μμ λ°ν(μμ±ν μμ λ°λλ‘ λ°ν)
try{ //catchλ¬Έ μ€λ₯ λ°μλλ©΄ rs, ps, connμ nullκ°
//nullκ°μ closeλΆκ°νλ―λ‘ try~catchλ¬Έ μ¬μ©νμ¬ μμΈμ²λ¦¬
rs.close();
ps.close();
conn.close();
}catch(Exception e){
System.out.println("finallyμμ μμΈμν© λ°μ!");
e.printStackTrace();
}
}
//stuListλ₯Ό μΈμ
μ μ μ₯
//μΈμ
κ°μ²΄ μμ±
HttpSession session = request.getSession();
//λ°°μ΄μ μΈμ
μ μ μ₯
session.setAttribute("student", stuList);
//μ΄λ
response.sendRedirect("Ex02model2.jsp");
}
}
Model2.jsp
μ°¨μ΄μ : for eachλ¬Έ μ¬μ© !
<%@page import="java.util.List"%>
<%@page import="com.smhrd.model.FullStack"%>
<%@page import="java.util.ArrayList"%>
<%@ 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>
<!-- μΈμ
μμ μ μ₯λμ΄ μλ νμμ 보(3λͺ
) ν
μ΄λΈλ‘ μΆλ ₯νκΈ° -->
<%
//μΈμ
μ μ μ₯λ FullStack κ°μ²΄(student)μ λν κ° λΆλ¬μμ μ΄λ μ΄λ¦¬μ€νΈμ μ μ₯!
List<FullStack> stuList = (ArrayList)session.getAttribute("student");
%>
<table border=1>
<tr>
<th>μ΄λ¦</th>
<th>μ 곡</th>
<th>μ νλ²νΈ</th>
</tr>
<%
for(FullStack stu:stuList){ %>
<tr>
<td><%=stu.getName() %></td>
<td><%=stu.getMajor() %></td>
<td><%=stu.getPhone() %></td>
</tr>
<% }%>
</table>
</body>
</html>
'Study > Back-End' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[JSP&Servlet] FrontController (2023.05.23~24) (0) | 2023.05.24 |
---|---|
[JSP/Servlet] Maven (2023.05.22) (0) | 2023.05.22 |
[JSP/Servlet] JSP λ΄μ₯κ°μ²΄(HttpServletResponse) & μΏ ν€(Cookie) (2023.05.17) (0) | 2023.05.19 |
[JSP/Servlet] μΈμ (session) (2023.05.18) (0) | 2023.05.19 |
[JSP/Servlet] Scope (2023.05.18~19) (0) | 2023.05.19 |