- ๊ด๋ จ ๊ธ
- [IntelliJ] ํ์๊ฐ์ ์์ (JAVA + MySQL) - (1) ํ์ ๋ชฉ๋ก ์กฐํ
- [IntelliJ] ํ์๊ฐ์ ์์ (JAVA + MySQL) - (2) ํ์ ๊ฐ์
- [IntelliJ] ํ์๊ฐ์ ์์ (JAVA + MySQL) - (3) ํ์ ์ ๋ณด ์์
- [IntelliJ] ํ์๊ฐ์ ์์ (MVC) - (4) ๋ทฐ(JSP) ๋ถ๋ฆฌํ๊ธฐ
[IntelliJ] JAVA ์๋ธ๋ฆฟ + MySQL ํ์๊ฐ์ ์์ - (2) ํ์ ๊ฐ์
StudentListServlet.java์ ์ ๊ท ํ์ ๋งํฌ๋ฅผ ์ถ๊ฐํ๋ค.
out.println("<p><a href='add'>์ ๊ท ํ์</a></p>");
<a href='add'>์ ๊ฐ์ด <a> ํ๊ทธ์ ๋งํฌ URL์ ์๋ ๊ฒฝ๋ก๋ก ์ง์ ํ๋ค.
์ ๋ ๊ฒฝ๋ก๋ ์น ์๋ฒ ๋ฃจํธ๋ฅผ ๊ธฐ์ค์ผ๋ก ํ๊ณ ์๋ ๊ฒฝ๋ก๋ ํ์ฌ ๊ฒฝ๋ก๋ฅผ ๊ธฐ์ค์ผ๋ก ํ๋ค.
์๋ ํ๋ฅผ ๋ณด๋ฉด ์ดํดํ๊ธฐ ์ฌ์ธ ๊ฒ์ด๋ค.
ํ - ํ์ฌ URL์ด http://127.0.0.1:8080/web04/student/list ์ผ ๋ ์ง์ ๋ URL์ ๋ฐ๋ฅธ ์ค์ URL
์ง์ URL | ์ค์ URL |
add (์๋ ๊ฒฝ๋ก) | http://127.0.0.1:8080/web04/student/add |
/add (์ ๋ ๊ฒฝ๋ก) |
http://127.0.0.1:8080/add |
/web04/student/add (์ ๋ ๊ฒฝ๋ก) |
http://127.0.0.1:8080/web04/student/add |
1. ์ ๊ท ํ์ ๋ฑ๋ก ํผ
์ ๊ท ํ์ ๋ฑ๋ก์ ์ฒ๋ฆฌํ StudentAddServlet ํด๋์ค๋ฅผ ์๋ก ๋ง๋ ๋ค.
@WebServlet("/student/add")
public class StudentAddServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html; charset=UTF-8");
PrintWriter out = resp.getWriter();
out.println("<html><head><title>์ ๊ท ํ์ ๋ฑ๋ก</title></head>");
out.println("<body><h1>์ ๊ท ํ์ ๋ฑ๋ก</h1>");
out.println("<form action='add' method='post'>");
out.println("ํ๋ฒ : <input type='text' name='student_no'><br>");
out.println("์ด๋ฆ : <input type='text' name='student_name'><br>");
out.println("์ฑ๋ณ : <input type='text' name='gender'><br>");
out.println("ํ๊ณผ : <input type='text' name='department'><br>");
out.println("ํ๋
: <input type='text' name='grade'><br>");
out.println("๋์ด : <input type='text' name='age'><br>");
out.println("์ ํ๋ฒํธ : <input type='text' name='phone_number'><br>");
out.println("์ฃผ์ : <input type='text' name='address'><br>");
out.println("<input type='submit' value='๋ฑ๋ก'>");
out.println("<input type='reset' value='์ทจ์'>");
out.println("</form></body></html>");
}
}
HttpServlet์ ์์๋ฐ๊ณ doGet()์ overrideํ์ฌ ํ์๊ฐ์ ํผ์ ์ถ๋ ฅํ๋ ์ฝ๋๋ฅผ ์์ฑํ๋ค.
HttpServlet์ GenericServlet์ ํ์ ํด๋์ค์ด๊ธฐ ๋๋ฌธ์ HttpServlet์ ์์๋ฐ์ StudentAddServlet ํด๋์ค๋ javax.servlet.Servlet ์ธํฐํ์ด์ค์ ๊ตฌํ์ฒด๊ฐ ๋๋ค. ์๋ธ๋ฆฟ ์ปจํ ์ด๋๋ Servlet ๊ท์น์ ์ ์๋ ๋ฉ์๋๋ฅผ ํธ์ถํ๊ธฐ ๋๋ฌธ์ ์๋ธ๋ฆฟ ๊ฐ์ฒด๋ ๋ฐ๋์ Servlet ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํด์ผ ํ๋ค.
ํด๋ผ์ด์ธํธ ์์ฒญ์ด ๋ค์ด์ค๋ฉด HttpServlet์ service()๊ฐ ํธ์ถ๋๊ณ service()๋ ํด๋ผ์ด์ธํธ ์์ฒญ method์ ๋ฐ๋ผ doGet(), doPost(), doPut() ๋ฑ์ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค. ๋ฐ๋ผ์ HttpServlet์ ์์๋ฐ์ ๋๋ servce()๊ฐ ์๋ doXXX() ๋ฉ์๋๋ฅผ overrideํ๋ค.
์ฌ๊ธฐ์๋ ์ฐ์ '์ ๊ท ํ์' ๋งํฌ๋ฅผ ํด๋ฆญํ์๋ ์์ฒญ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด doGet() ๋ฉ์๋๋ฅผ override ํ์๋ค.
ํ์ ๋ชฉ๋ก ํ์ด์ง์์ URL์ด 'add'๋ก ์ง์ ๋ '์ ๊ท ํ์' ๋งํฌ๋ฅผ ํด๋ฆญํ๋ฉด http://127.0.0.1:8080/web04_war_exploded/student/add๋ก ์ด๋ํ๋ฉฐ ๋ฑ๋ก ํผ์ด ์ถ๋ ฅ๋๋ค.
<form action='add' method='post'>์ action์ form์ด submit๋์ ๋ ์คํํ ์๋ธ๋ฆฟ์ URL์ด๋ค. ์ด๋ ๊ฒ ์์ฑํ๋ฉด http://127.0.0.1:8080/web04_war_exploded/student/add์ POST ์์ฒญ์ด ์ ์ก๋๋ค.
๋ค์์ผ๋ก ์ด๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด doPost() ๋ฉ์๋๋ฅผ overrideํ๋ค.
2. ์ ๊ท ํ์ DB INSERT
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
Connection conn = null;
PreparedStatement pstmt = null;
Properties jdbcProperties = new Properties();
jdbcProperties.setProperty("user", "username");
jdbcProperties.setProperty("password", "****");
try {
DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver());
conn = DriverManager.getConnection("jdbc:mysql://localhost:3307/knou", jdbcProperties);
pstmt = conn.prepareStatement(
"INSERT INTO STUDENT(STUDENT_NO, DEPARTMENT, STUDENT_NAME, GRADE, GENDER, AGE, PHONE_NUMBER, ADDRESS)" +
" VALUES (?, ?, ?, ?, ?, ?, ?, ?)"
);
pstmt.setString(1, req.getParameter("student_no"));
pstmt.setString(2, req.getParameter("department"));
pstmt.setString(3, req.getParameter("student_name"));
pstmt.setInt(4, Integer.parseInt(req.getParameter("grade")));
pstmt.setString(5, req.getParameter("gender"));
pstmt.setInt(6, Integer.parseInt(req.getParameter("age")));
pstmt.setString(7, req.getParameter("phone_number"));
pstmt.setString(8, req.getParameter("address"));
pstmt.executeUpdate();
resp.setContentType("text/html; charset=UTF-8");
PrintWriter out = resp.getWriter();
out.println("<html><head>");
out.println("<title>ํ์ ๋ฑ๋ก</title></head>");
out.println("<body><p> " + req.getParameter("student_name") + " - ์ ๊ท ํ์ ๋ฑ๋ก ์ฑ๊ณต</p></body><html>");
} catch (SQLException e) {
throw new ServletException(e);
} finally {
try {
if (pstmt != null) pstmt.close();
if (conn != null) conn.close();
} catch (SQLException e) {
}
}
}
setCharacterEncoding("UTF-8")๋ก POST ์์ฒญ์ ๋งค๊ฐ๋ณ์์ ์ธ์ฝ๋ฉ์ ์ง์ ํด์ผ ํ๋ค.
๊ทธ๋ ์ง ์์ผ๋ฉด getParameter() ๋ฉ์๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก ISO-8859-1(ISO-Latin-1)๋ก ์ธ์ฝ๋ฉ๋์๋ค๊ณ ๊ฐ์ ํ๊ธฐ ๋๋ฌธ์ ํ๊ธ์ด ๊นจ์ง๋ค.
SQL๋ฌธ์์ '?'๋ ์ ๋ ฅ ๋งค๊ฐ๋ณ์๋ก executeUpdate()๋ฅผ ํธ์ถํ๊ธฐ ์ ์ setXXX() ๋ฉ์๋๋ก ๊ฐ์ ์ค์ ํ๋ค.
setXXX() ๋ฉ์๋์ ์ฒซ๋ฒ์งธ ์ธ์๊ฐ์ ์ธ๋ฑ์ค, ๋๋ฒ์งธ ์ธ์๊ฐ์ ์ค์ ์ ๋ ฅ๊ฐ์ด๋ค.
์ธ๋ฑ์ค๋ 1๋ถํฐ ์์ํ๋ค.
๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ SELECT ๋ฌธ์ ์คํํ ๋๋ executeQuery()๋ฅผ, ๊ฒฐ๊ณผ ๋ ์ฝ๋๋ฅผ ๋ง๋ค์ง ์๋ DDL/DML SQL๋ฌธ์ ์คํํ ๋๋ executeUpdate()๋ฅผ ํธ์ถํ๋ค. ์ฌ๊ธฐ์๋ ์ ๊ท ํ์์ DB์ Insert ํ ๊ฒ์ด๋ฏ๋ก executeUpdate()๋ฅผ ํธ์ถํ๋ค.
์ฌ๊ธฐ๊น์ง ์คํ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ๋ค.
3. Refresh / Redirect
Refresh์ Redirect๋ฅผ ์ด์ฉํด์ ํ์ ๊ฐ์ (์ ๊ท ํ์ ๋ฑ๋ก) ํ ํ์ ๋ชฉ๋ก ๋ฆฌ์คํธ ํ์ด์ง๋ก ์ด๋ํ๋๋ก ํ๋ค. Refresh๋ ์ผ์ ์๊ฐ์ด ์ง๋ ํ, Redirect๋ ์ฆ์ ํ์ด์ง๊ฐ ์ด๋๋๋ค.
Refresh
Refresh๋ ์์ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๊ณ ์ผ์ ์๊ฐ์ด ์ง๋ ํ ํ์ด์ง๋ฅผ ์ด๋ํ๋ค.
โ ์น ๋ธ๋ผ์ฐ์ ์์ '์ ๊ท ํ์' ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ 'ํ์ ๋ฑ๋กํผ'์ ์์ฒญํ๋ค.
โก StudentAddServlet์ ํ์ ๋ฑ๋กํผ์ ํด๋ผ์ด์ธํธ๋ก ๋ณด๋ธ๋ค.
โข ์น ๋ธ๋ผ์ฐ์ ๋ ํ์ ๋ฑ๋กํผ์ ํ๋ฉด์ ์ถ๋ ฅํ๊ณ ์ฌ์ฉ์๊ฐ ํ์ ์ ๋ณด๋ฅผ ์ ๋ ฅํ๊ณ submitํ๋ฉด ์๋ฒ์ ๋ฑ๋ก์ ์์ฒญํ๋ค.
โฃ StudentAddServlet์ ๋ฑ๋ก ๊ฒฐ๊ณผ๋ฅผ ํด๋ผ์ด์ธํธ๋ก ๋ณด๋ด๋ฉด์ Refresh ์ ๋ณด๋ฅผ ํจ๊ป ๋ณด๋ธ๋ค.
โค ์น ๋ธ๋ผ์ฐ์ ๋ ๋ฑ๋ก ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๊ณ ๋ฐ์ Refresh ์ ๋ณด์ ๋ฐ๋ผ n์ด ํ ์๋ฒ์ 'ํ์ ๋ชฉ๋ก ํ์ด์ง'๋ฅผ ์์ฒญํ๋ค. (Refresh)
โฅ StudentListServlet์ ํ์ ๋ชฉ๋ก์ ํด๋ผ์ด์ธํธ๋ก ๋ณด๋ธ๋ค.
Refresh๋ฅผ ๊ตฌํํ๋ ค๋ฉด โฃ StudentAddServlet์ด ๋ฑ๋ก ๊ฒฐ๊ณผ๋ฅผ ํด๋ผ์ด์ธํธ๋ก ๋ณด๋ผ๋ Refresh ์ ๋ณด๋ฅผ ํจ๊ป ๋ณด๋ด๋ฉด ๋๋ค. Refresh ์ ๋ณด๋ฅผ ๋ณด๋ด๋ ๋ฐฉ๋ฒ์๋ ์๋ต ํค๋๋ฅผ ์ด์ฉํ๋ ๋ฐฉ๋ฒ๊ณผ HTML meta ํ๊ทธ๋ฅผ ์ด์ฉํ๋ ๋ฐฉ๋ฒ์ด ์๋ค.
1) ์๋ต ํค๋์ ๋ฆฌํ๋ ์ ์ ๋ณด ๋ณด๋ด๊ธฐ
1
2
3
4
5
6
7
8
|
out.println("<body><p> " + req.getParameter("student_name") + " - ์ ๊ท ํ์ ๋ฑ๋ก ์ฑ๊ณต</p></body><html>");
// ๋ฆฌํ๋ ์ ์ ๋ณด๋ฅผ ์๋ต ํค๋์ ์ถ๊ฐ
// Refresh : ํ๋๋ช
// 2;url=list : 2์ด ํ 'list'๋ก ์๋น์ค ์ฌ์์ฒญ
resp.addHeader("Refresh", "2;url=list");
} catch (SQLException e) {
throw new ServletException(e);
|
cs |
HttpServletResponse์ addHeader()๋ HTTP ์๋ต ์ ๋ณด์ ํค๋๋ฅผ ์ถ๊ฐํ๋ ๋ฉ์๋์ด๋ค.
2) meta ํ๊ทธ์ ๋ฆฌํ๋ ์ ์ ๋ณด ๋ณด๋ด๊ธฐ
1
2
3
4
5
6
7
|
out.println("<html><head>");
// ๋ฆฌํ๋ ์ ์ ๋ณด๋ฅผ ๋ฉํ ํ๊ทธ์ ์ถ๊ฐ
out.println("<meta http-equiv='Refresh' content='2; url=list'>");
out.println("<title>ํ์ ๋ฑ๋ก</title></head>");
out.println("<body><p> " + req.getParameter("student_name") + " - ์ ๊ท ํ์ ๋ฑ๋ก ์ฑ๊ณต</p></body><html>");
} catch (SQLException e) {
throw new ServletException(e);
|
cs |
<meta http-equiv='Refresh' content='2; url=list'>์ ๊ฐ์ด HTML ๋ณธ๋ฌธ์ ํฌํจ์์ผ ๋ณด๋ผ ์ ์๋ค.
๋ ์ค ํ๋์ ๋ฐฉ๋ฒ์ ํํ์ฌ ์ ์ฉํ๊ณ ์คํํด๋ณด๋ฉด ์ ๊ท ํ์ ๋ฑ๋ก ํ 2์ด ๋ค ๋ค์ ํ์ ๋ชฉ๋ก ํ์ด์ง๋ก ์ด๋๋๋ค.
Redirect
Redirect๋ ์์ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ์ง ์๊ณ ์ฆ์ ํ์ด์ง๋ฅผ ์ด๋ํ๋ค.
โ ์น ๋ธ๋ผ์ฐ์ ์์ '์ ๊ท ํ์' ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ 'ํ์ ๋ฑ๋กํผ'์ ์์ฒญํ๋ค.
โก StudentAddServlet์ ํ์ ๋ฑ๋กํผ์ ํด๋ผ์ด์ธํธ๋ก ๋ณด๋ธ๋ค.
โข ์น ๋ธ๋ผ์ฐ์ ๋ ํ์ ๋ฑ๋กํผ์ ํ๋ฉด์ ์ถ๋ ฅํ๊ณ ์ฌ์ฉ์๊ฐ ํ์ ์ ๋ณด๋ฅผ ์ ๋ ฅํ๊ณ submitํ๋ฉด ์๋ฒ์ ๋ฑ๋ก์ ์์ฒญํ๋ค.
โฃ StudentAddServlet์ ๋ฆฌ๋ค์ด๋ ํธํ ํ์ ๋ชฉ๋ก ํ์ด์ง์ URL ์ ๋ณด๋ฅผ ๋ณด๋ธ๋ค.
โค ์น ๋ธ๋ผ์ฐ์ ๋ ์ฆ์ ๋ฐ์ URL ์ ๋ณด์ ๋ฐ๋ผ ์๋ฒ์ 'ํ์ ๋ชฉ๋ก ํ์ด์ง'๋ฅผ ์ฌ์์ฒญํ๋ค. (Redirect)
โฅ StudentListServlet์ ํ์ ๋ชฉ๋ก์ ํด๋ผ์ด์ธํธ๋ก ๋ณด๋ธ๋ค.
์ด๋ํ ํ์ด์ง์ URL ์ ๋ณด์ธ ๋ฆฌ๋ค์ด๋ ํธ ์ ๋ณด๋ ์๋ต ํค๋์ ์ค์ ํ๋ค.
1
2
3
4
5
6
7
|
pstmt.setInt(6, Integer.parseInt(req.getParameter("age")));
pstmt.setString(7, req.getParameter("phone_number"));
pstmt.setString(8, req.getParameter("address"));
pstmt.executeUpdate();
// ๋ฆฌ๋ค์ด๋ ํธ
resp.sendRedirect("list");
|
cs |
ํ์ฌ ์๋น์ค์ ์์ ์ด ์๋ฃ๋ ํ HttpServletResponse์ sendRedirect()๋ฅผ ํธ์ถํด์ ๋ฆฌ๋ค์ด๋ ํธ ์ ๋ณด๋ฅผ ๋ณด๋ธ๋ค. ํด๋น URL๋ก ์ฆ์ ์ด๋๋๋ฏ๋ก ์์ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ ์๋ต ๋ณธ๋ฌธ์ด ํ์ํ์ง ์๋ค.
HTTP ์๋ต ์ฝ๋ 302๋ ์์ฒญํ ์์์ Location ํค๋์ ์๋ ์ฃผ์์ ์์ผ๋ ๋ค์ ์์ฒญํ๋ผ๋ ์๋ฏธ์ด๋ค.
์น ๋ธ๋ผ์ฐ์ ๊ฐ ์ด ์๋ต์ ๋ฐ์ผ๋ฉด ์ฆ์ Location ํค๋์ ์ฃผ์๋ก ์ฌ์์ฒญํ๋ค.
- ๊ด๋ จ ๊ธ
- [IntelliJ] ํ์๊ฐ์ ์์ (JAVA + MySQL) - (1) ํ์ ๋ชฉ๋ก ์กฐํ
- [IntelliJ] ํ์๊ฐ์ ์์ (JAVA + MySQL) - (2) ํ์ ๊ฐ์
- [IntelliJ] ํ์๊ฐ์ ์์ (JAVA + MySQL) - (3) ํ์ ์ ๋ณด ์์
- [IntelliJ] ํ์๊ฐ์ ์์ (MVC) - (4) ๋ทฐ(JSP) ๋ถ๋ฆฌํ๊ธฐ
#JAVA MySQL INSERT
#Refresh์ Redirect
References
์ดํ๊ฐ์ ์๋ฐ ์น ๊ฐ๋ฐ ์ํฌ๋ถ(ํ๋ฆฌ๋ , 2016, ์์ง์)
๋๊ธ