요 파일 3개를 받아다 만드는거 해보기... 내가 한거는 내가 보기 좋게 변수명도 바꾸고 해서... 다른 파일 받아다 연습해보자.
C 태그는 가장 아래에 포함
파일 그대로 가져다 수정해서 아래와 같이 작동하도록 빠르게 만든다.
DB생성(create), 데이터 삽입(insert), 조회(select), 수정(update) 만들어보기
삽입
조회
수정
HomeController
package com.kopo.memo;
import java.io.UnsupportedEncodingException;
import java.text.DateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Locale;
import javax.servlet.http.HttpServletRequest;
import javax.swing.text.html.HTMLDocument.HTMLReader.IsindexAction;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
/**
* Handles requests for the application home page.
*/
@Controller
public class HomeController {
private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
@RequestMapping(value = "/", method = RequestMethod.GET)
public String home(Locale locale, Model model) {
DB db = new DB<Memo>("/Users/saebyul/SqliteDB/0916memo.db", "memo");
model.addAttribute("test", new Memo());
Memo memo = new Memo();
memo.setIdx(10);
System.out.println(memo.getIdx());
if (db.open()) {
ArrayList<Memo> list = db.selectData(new Memo());
model.addAttribute("list", list);
db.close();
}
return "home";
}
@RequestMapping(value = "/create", method = RequestMethod.GET)
public String create(Locale locale, Model model) {
DB db = new DB<Memo>("/Users/saebyul/SqliteDB/0916memo.db", "memo");
if (db.open()) {
if (db.createTable(new Memo())) {
model.addAttribute("message", "테이블이 생성되었습니다.");
} else {
model.addAttribute("message", "테이블 생성에 실패하였습니다.");
}
db.close();
} else {
model.addAttribute("message", "DB파일을 사용할 수 없습니다.");
}
return "message";
}
// insert를 위해 사용
@RequestMapping(value = "/i1", method = RequestMethod.GET)
public String i1(Locale locale, Model model) {
return "i1";
}
// insert
@RequestMapping(value = "/insert", method = RequestMethod.GET)
public String insert(Locale locale, Model model, HttpServletRequest request) {
try {
request.setCharacterEncoding("UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
DB db = new DB<Memo>("/Users/saebyul/SqliteDB/0916memo.db", "memo");
if (db.open()) {
if (request.getParameter("title") != null
&& request.getParameter("memo") != null
&& db.insertData(new Memo(request.getParameter("title"), request.getParameter("memo")))) {
model.addAttribute("message", "새 데이터를 추가했습니다.");
} else {
model.addAttribute("message", "데이터 추가에 실패했습니다.");
}
db.close();
} else {
model.addAttribute("message", "DB파일을 사용할 수 없습니다.");
}
return "message";
}
// select
@RequestMapping(value = "/list", method = RequestMethod.GET)
public String select(Locale locale, Model model) {
DB db = new DB<Memo>("/Users/saebyul/SqliteDB/0916memo.db", "memo");
if (db.open()) {
String htmlString = db.selectStringData(new Memo());
model.addAttribute("list", htmlString);
db.close();
}
return "list";
}
// update를 위해 사용
@RequestMapping(value = "/u1", method = RequestMethod.GET)
public String u1(Locale locale, Model model, HttpServletRequest request) {
try {
request.setCharacterEncoding("UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
DB db = new DB<Memo>("/Users/saebyul/SqliteDB/0916memo.db", "memo");
if (db.open()) {
if (request.getParameter("idx") != null && DB.isIntegerString(request.getParameter("idx"))) {
Memo memo = (Memo) db.selectData(Integer.parseInt(request.getParameter("idx")), new Memo());
model.addAttribute("idx", memo.idx);
model.addAttribute("title", memo.title);
model.addAttribute("memo", memo.memo);
} else {
model.addAttribute("message", "데이터 추가에 실패했습니다.");
}
db.close();
} else {
model.addAttribute("message", "DB파일을 사용할 수 없습니다.");
}
return "u1";
}
@RequestMapping(value = "/update", method = RequestMethod.GET)
public String update(Locale locale, Model model, HttpServletRequest request) {
try {
request.setCharacterEncoding("UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
// if (request.getParameter("idx") == null) {
// model.addAttribute("message", "입력 데이터가 잘못 되었습니다.");
// return "message";
// }
DB db = new DB<Memo>("/Users/saebyul/SqliteDB/0916memo.db", "memo");
if (db.open()) {
if (request.getParameter("idx") != null && DB.isIntegerString(request.getParameter("idx"))
&& request.getParameter("title") != null
&& request.getParameter("memo") != null
&& db.updateData(new Memo(Integer.parseInt(request.getParameter("idx"))
, request.getParameter("title"), request.getParameter("memo")))) {
model.addAttribute("message", "데이터를 수정했습니다.");
} else {
model.addAttribute("message", "데이터 수정에 실패했습니다.");
}
db.close();
} else {
model.addAttribute("message", "DB파일을 사용할 수 없습니다.");
}
return "message";
}
}
DB
package com.kopo.memo;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import org.sqlite.SQLiteConfig;
public class DB<T> {
private String dbFileName;
private String tableName;
private Connection connection;
static {
try {
Class.forName("org.sqlite.JDBC");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public DB(String dbFileName, String tableName) {
this.dbFileName = dbFileName;
this.tableName = tableName;
}
public boolean open() {
SQLiteConfig config = new SQLiteConfig();
try {
this.connection = DriverManager.getConnection("jdbc:sqlite:/" + this.dbFileName, config.toProperties());
return true;
} catch (SQLException e) {
e.printStackTrace();
}
return false;
}
public void close() {
if (this.connection != null) {
try {
this.connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
// public void createTable() {
// String fieldString = "";
// fieldString = fieldString + "idx INT PRIMARY KEY AUTOINCREMENT";
// fieldString = fieldString + ", name TEXT";
// fieldString = fieldString + ", middleScore INT";
// fieldString = fieldString + ", finalScore INT";
// String query = "CREATE TABLE " + this.tableName + " (" + fieldString + ")";
// try {
// Statement statement = this.connection.createStatement();
// statement.executeUpdate(query);
// statement.close();
// } catch (SQLException e) {
// e.printStackTrace();
// }
// }
public boolean createTable(T t) {
Class<?> dataClass = t.getClass();
Field[] dataClassFields = dataClass.getDeclaredFields();
String fieldString = "";
for (Field field: dataClassFields) {
if (!fieldString.isEmpty()) {
fieldString = fieldString + ",";
}
String fieldName = field.getName();
String fieldType = field.getType().toString();
fieldString = fieldString + fieldName;
if (fieldName.matches("idx")) {
fieldString = fieldString + " INTEGER PRIMARY KEY AUTOINCREMENT";
} else if (fieldType.matches("(int|long|short)")) {
fieldString = fieldString + " INTEGER";
} else if (fieldType.matches("(float|double)")) {
fieldString = fieldString + " REAL";
} else if (fieldType.matches(".*String")) {
fieldString = fieldString + " TEXT";
}
}
String query = "CREATE TABLE " + this.tableName + " (" + fieldString + ")";
try {
Statement statement = this.connection.createStatement();
statement.executeUpdate(query);
statement.close();
return true;
} catch (SQLException e) {
e.printStackTrace();
}
return false;
}
// public void insertData(Student student) {
// String fieldString = "";
// fieldString = fieldString + "name";
// fieldString = fieldString + ", middleScore";
// fieldString = fieldString + ", finalScore";
// String valueString = "";
// valueString = valueString + "'" + student.name + "'";
// valueString = valueString + ", " + student.middleScore;
// valueString = valueString + ", " + student.finalScore;
// String query = "INSERT INTO " + this.tableName + " (" + fieldString + ") VALUES(" + valueString + ")";
// try {
// Statement statement = this.connection.createStatement();
// statement.executeUpdate(query);
// statement.close();
// } catch (SQLException e) {
// e.printStackTrace();
// }
// }
// public boolean insertData(T t) {
// Class<?> dataClass = t.getClass();
// Field[] dataClassFields = dataClass.getDeclaredFields();
//
// String fieldString = "";
// String valueString = "";
//
// for (Field field: dataClassFields) {
// String fieldName = field.getName();
// String fieldType = field.getType().toString();
// if (fieldName.matches("idx")) {
// continue;
// }
// if (!fieldString.isEmpty()) {
// fieldString = fieldString + ",";
// }
// if (!valueString.isEmpty()) {
// valueString = valueString + ",";
// }
// fieldString = fieldString + fieldName;
// try {
// if (fieldType.matches(".*String")) {
// valueString = valueString + "'" + field.get(t) + "'";
// } else {
// valueString = valueString + field.get(t);
// }
// } catch (IllegalArgumentException e) {
// e.printStackTrace();
// } catch (IllegalAccessException e) {
// e.printStackTrace();
// }
// }
//
// String query = "INSERT INTO " + this.tableName + " (" + fieldString + ") VALUES(" + valueString + ")";
// try {
// Statement statement = this.connection.createStatement();
// statement.executeUpdate(query);
// statement.close();
// return true;
// } catch (SQLException e) {
// e.printStackTrace();
// }
// return false;
// }
public boolean insertData(T t) {
Class<?> dataClass = t.getClass();
Field[] dataClassFields = dataClass.getDeclaredFields();
String fieldString = "";
String valueString = "";
class PreparedValue {
int type = 0;
int intValue = 0;
double floatValue = 0;
String stringValue = "";
PreparedValue(int intValue) {
this.type = 1;
this.intValue = intValue;
}
PreparedValue(double floatValue) {
this.type = 2;
this.floatValue = floatValue;
}
PreparedValue(String stringValue) {
this.type = 3;
this.stringValue = stringValue;
}
}
ArrayList<PreparedValue> preparedValue = new ArrayList<PreparedValue>();
for (Field field: dataClassFields) {
String fieldName = field.getName();
String fieldType = field.getType().toString();
if (fieldName.matches("idx")) {
continue;
}
if (!fieldString.isEmpty()) {
fieldString = fieldString + ",";
}
if (!valueString.isEmpty()) {
valueString = valueString + ",";
}
fieldString = fieldString + fieldName;
try {
if (fieldType.matches("(int|long|short)")) {
preparedValue.add(new PreparedValue(field.getInt(t)));
valueString = valueString + "?";
} else if (fieldType.matches("(float|double)")) {
preparedValue.add(new PreparedValue(field.getDouble(t)));
valueString = valueString + "?";
} else if (fieldType.matches(".*String")) {
preparedValue.add(new PreparedValue(field.get(t).toString()));
valueString = valueString + "?";
}
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
String query = "INSERT INTO " + this.tableName + " (" + fieldString + ") VALUES(" + valueString + ")";
try {
PreparedStatement statement = this.connection.prepareStatement(query);
for (int i = 0; i < preparedValue.size(); i++) {
if (preparedValue.get(i).type == 1) {
statement.setInt(i + 1, preparedValue.get(i).intValue);
} else if (preparedValue.get(i).type == 2) {
statement.setDouble(i + 1, preparedValue.get(i).floatValue);
} else if (preparedValue.get(i).type == 3) {
statement.setString(i + 1, preparedValue.get(i).stringValue);
}
}
statement.executeUpdate();
statement.close();
return true;
} catch (SQLException e) {
e.printStackTrace();
}
return false;
}
// public void updateData(int idx, String memo) {
// String setString = "memo='" + memo + "'";
// String whereString = "idx=" + idx;
// String query = "UPDATE " + this.tableName + " SET " + setString + " WHERE " + whereString;
// try {
// Statement statement = this.connection.createStatement();
// statement.executeUpdate(query);
// statement.close();
// } catch (SQLException e) {
// e.printStackTrace();
// }
// }
// public boolean updateData(T t) {
// Class<?> dataClass = t.getClass();
// Field[] dataClassFields = dataClass.getDeclaredFields();
// String setString = "";
// String whereString = "";
// for (Field field : dataClassFields) {
// if (!setString.isEmpty()) {
// setString = setString + ",";
// }
// String fieldName = field.getName();
// String fieldType = field.getType().toString();
// try {
// if (fieldName.matches("idx")) {
// whereString = "idx=" + field.get(t);
// } else if (fieldType.matches(".*String")) {
// setString = setString + fieldName + "=" + "'" + field.get(t) + "'";
// } else {
// setString = setString + fieldName + "=" + field.get(t);
// }
// } catch (IllegalArgumentException e) {
// e.printStackTrace();
// } catch (IllegalAccessException e) {
// e.printStackTrace();
// } catch (Exception e) {
// e.printStackTrace();
// }
// }
//
// String query = "UPDATE " + this.tableName + " SET " + setString + " WHERE " + whereString;
// try {
// Statement statement = this.connection.createStatement();
// statement.executeUpdate(query);
// statement.close();
// return true;
// } catch (SQLException e) {
// e.printStackTrace();
// }
// return false;
// }
public boolean updateData(T t) {
Class<?> dataClass = t.getClass();
Field[] dataClassFields = dataClass.getDeclaredFields();
String setString = "";
String whereString = "";
ArrayList<Object> preparedValue = new ArrayList<Object>();
for (Field field : dataClassFields) {
if (!setString.isEmpty()) {
setString = setString + ",";
}
String fieldName = field.getName();
String fieldType = field.getType().toString();
try {
if (fieldName.matches("idx")) {
whereString = "idx=" + field.get(t);
} else {
preparedValue.add(field.get(t));
setString = setString + fieldName + "=?";
}
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
String query = "UPDATE " + this.tableName + " SET " + setString + " WHERE " + whereString;
try {
PreparedStatement statement = this.connection.prepareStatement(query);
for (int i = 0; i < preparedValue.size(); i++) {
statement.setObject(i + 1, preparedValue.get(i));
}
statement.executeUpdate();
statement.close();
return true;
} catch (SQLException e) {
e.printStackTrace();
}
return false;
}
// public String selectData() {
// String query = "SELECT * FROM " + this.tableName;
// String htmlTxt = "";
// try {
// Statement statement = this.connection.createStatement();
// ResultSet result = statement.executeQuery(query);
// while(result.next()) {
// htmlTxt = htmlTxt + "<tr>";
// htmlTxt = htmlTxt + "<td>" + result.getInt("idx") + "</td>";
// htmlTxt = htmlTxt + "<td>" + result.getString("name") + "</td>";
// htmlTxt = htmlTxt + "<td>" + result.getInt("middleScore") + "</td>";
// htmlTxt = htmlTxt + "<td>" + result.getInt("finalScore") + "</td>";
// htmlTxt = htmlTxt + "</tr>";
// }
// result.close();
// statement.close();
// } catch (SQLException e) {
// e.printStackTrace();
// }
// return htmlTxt;
// }
public String selectStringData(T t) {
Class<?> dataClass = t.getClass();
Field[] dataClassFields = dataClass.getDeclaredFields();
String query = "SELECT * FROM " + this.tableName;
ArrayList<T> resultDataSet = new ArrayList<T>();
try {
Statement statement = this.connection.createStatement();
ResultSet result = statement.executeQuery(query);
while(result.next()) {
T rowData = (T)dataClass.getDeclaredConstructor().newInstance();
for(Field field : dataClassFields) {
String fieldName = field.getName();
String fieldType = field.getType().toString();
if (fieldType.matches("(int)")) {
field.setInt(rowData, result.getInt(fieldName));
} else if (fieldType.matches("(long)")) {
field.setLong(rowData, result.getLong(fieldName));
} else if (fieldType.matches("(float|double)")) {
field.setDouble(rowData, result.getDouble(fieldName));
} else if (fieldType.matches(".*String")) {
field.set(rowData, result.getString(fieldName));
}
}
resultDataSet.add(rowData);
}
result.close();
statement.close();
Method toHtmlStringMethod = dataClass.getDeclaredMethod("toHtmlString");
StringBuffer htmlString = new StringBuffer();
for (T row : resultDataSet) {
htmlString.append((String) toHtmlStringMethod.invoke(row));
}
return htmlString.toString();
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return "";
}
public ArrayList<T> selectData(T t) {
Class<?> dataClass = t.getClass();
Field[] dataClassFields = dataClass.getDeclaredFields();
String query = "SELECT * FROM " + this.tableName;
ArrayList<T> resultDataSet = new ArrayList<T>();
try {
Statement statement = this.connection.createStatement();
ResultSet result = statement.executeQuery(query);
while(result.next()) {
T rowData = (T)dataClass.getDeclaredConstructor().newInstance();
for(Field field : dataClassFields) {
String fieldName = field.getName();
String fieldType = field.getType().toString();
if (fieldType.matches("(int)")) {
field.setInt(rowData, result.getInt(fieldName));
} else if (fieldType.matches("(long)")) {
field.setLong(rowData, result.getLong(fieldName));
} else if (fieldType.matches("(float|double)")) {
field.setDouble(rowData, result.getDouble(fieldName));
} else if (fieldType.matches(".*String")) {
field.set(rowData, result.getString(fieldName));
}
}
resultDataSet.add(rowData);
}
result.close();
statement.close();
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return resultDataSet;
}
public T selectData(int idx, T t) {
Class<?> dataClass = t.getClass();
Field[] dataClassFields = dataClass.getDeclaredFields();
String query = "SELECT * FROM " + this.tableName + " WHERE idx=" + idx;
try {
Statement statement = this.connection.createStatement();
ResultSet result = statement.executeQuery(query);
T rowData = (T)dataClass.getDeclaredConstructor().newInstance();
if(result.next()) {
for(Field field : dataClassFields) {
String fieldName = field.getName();
String fieldType = field.getType().toString();
if (fieldType.matches("(int)")) {
field.setInt(rowData, result.getInt(fieldName));
} else if (fieldType.matches("(long)")) {
field.setLong(rowData, result.getLong(fieldName));
} else if (fieldType.matches("(float|double)")) {
field.setDouble(rowData, result.getDouble(fieldName));
} else if (fieldType.matches(".*String")) {
field.set(rowData, result.getString(fieldName));
}
}
}
result.close();
statement.close();
return rowData;
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return (T)(new Object());
}
public static boolean isIntegerString(String numericString) {
try {
int result = Integer.parseInt(numericString);
return true;
} catch (Exception e) {
}
return false;
}
public static boolean isFloatString(String numericString) {
try {
double result = Double.parseDouble(numericString);
return true;
} catch (Exception e) {
}
return false;
}
}
Memo.class
package com.kopo.memo;
public class Memo {
// private int idx;
// private String title;
// private String memo;
int idx;
String title;
String memo;
Memo() {
}
public Memo(String title, String memo) {
this.title = title;
this.memo = memo;
}
public Memo(int idx, String title, String memo) {
this.idx = idx;
this.title = title;
this.memo = memo;
}
public String toHtmlString() {
StringBuffer htmlString = new StringBuffer();
htmlString.append("<tr>");
htmlString.append("<td>" + this.idx + "</td>");
htmlString.append("<td>" + this.title + "</td>");
htmlString.append("<td>" + this.memo + "</td>");
htmlString.append("<td>" + "<a href=u1?idx=" + this.idx + ">상세보기</a>" + "</td>");
htmlString.append("</tr>");
return htmlString.toString();
}
public int getIdx() {
return idx;
}
public void setIdx(int idx) {
this.idx = idx;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getMemo() {
return memo;
}
public void setMemo(String memo) {
this.memo = memo;
}
}
message.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<head>
<title>Message</title>
</head>
<body>
<P>${message}</P>
</body>
</html>
i1.jsp
<%@ 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>
<form action="insert">
<input type="text" placeholder="title" name="title" />
<textarea name="memo" style="width: 100%;"></textarea>
<input type="submit" value="입력 완료" />
</form>
<br /><br />
<a href="list" style="padding: 10px 20px; background: #eee;">리스트로</a>
</body>
</html>
list.jsp
<%@ 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>
<table style="width: 100%;">
<thead>
<tr>
<th>idx</th>
<th>title</th>
<th>memo</th>
<th></th>
</thead>
${list }
</table>
<a href="i1" style="padding: 10px 20px; background: #eee;">글쓰기</a>
</body>
</html>
u1.jsp
<%@ 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>
<form action="update">
<input type="hidden" name="idx" value="${idx }" />
<input type="text" placeholder="title" name="title" value="${title }"/>
<textarea name="memo" style="width: 100%;">${memo }</textarea>
<input type="submit" value="수정 완료" />
</form>
<br /><br />
<a href="list" style="padding: 10px 20px; background: #eee;">리스트로</a>
</body>
</html>
JSP 파일 안에 자바코드
<!DOCTYPE html>
<head>
<title>Home</title>
</head>
<body>
<h1>
Hello world!
</h1>
<%
int a = 10;
int b = 5;
int c = a + b;
// jsp 안에 java코드 사용(이제는 하지 말 것)
// jstl : jsp에서 태그 <> 형태로 제공하는 기능 (jsp 기반)(한국은 아직 여기...)
// thymeleaf (<html> 기반) (spring boot 기본 방식 가장 최신이고 표준이다.)
%>
<P> axb+c=<%=a*b+c %>. </P> <!-- 대문자로 써도 되긴 하지만 html 표준은 태그를 소문자로 사용한다. <p> 이런식으로 사용 -->
</body>
</html>
이렇게 <% %> 사이에 자바 코드를 넣을 수 있다. (<!-- --> 사이에 주석을 넣을 수 있는 것처럼...)
하지만 매우매우 옛날 방식이다. 20~15년 전 사용되던 방식이라고 한다. HTML은 코드에 모든게 다 드러나기 때문에 자바 코드를 그대로 사용하면 보안에 치명적이기 때문이다. 다만... 외국 기준이고.... IT 기술에 뒤쳐진 한국에서는 5년 전 까지도 이대로 유지보수 되는 곳이 있었다고... 지금도 있을지 모른다고 한다 -_-;;
절대 사용하지는 말되 혹시 이런게 나오면 아... 자바코드구나... 하고 사용하진 말라고...
C 태그
우선 C 태그를 사용하려면 다음을 임포트 해야한다.
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
HomeController
@RequestMapping(value = "/", method = RequestMethod.GET)
public String home(Locale locale, Model model) {
DB db = new DB<Memo>("/Users/saebyul/SqliteDB/0916memo.db", "memo");
model.addAttribute("test", new Memo()); // jsp파일. 즉, HTML에서 객체를 사용하기 위해 test라는 변수에 담아 넘겨준다.
if (db.open()) {
ArrayList<Memo> list = db.selectData(new Memo());
model.addAttribute("list", list);
db.close();
}
return "home";
}
home.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page session="false" %>
<!DOCTYPE html>
<head>
<title>Home</title>
</head>
<body>
<!-- test라는 변수가 HomeController에게 Memo라는 객체를 넘겨 받아 그 객체의 title, memo 안에 원하는 value를 넣는다. -->
<c:set target="${test }" property="title" value="야호호호"></c:set>
<c:set target="${test }" property="memo" value="코로나야끝나라아아아"></c:set>
<p> title : <c:out value="${test.title }"></c:out> </p>
<p> memo : <c:out value="${test.memo }"></c:out> </p>
<table style="width: 100%;">
<tbody>
<c:forEach var="each" items="${list }">
<tr>
<td>${each.getIdx() }</td> <!-- getter를 쓸 수도 있고, -->
<td>${each.title }</td> <!-- c:out 태그를 생략하고 사용할 수도 있다. (편리!) -->
<td><c:out value="${each.memo }"></c:out></td> <!-- Full로 쓰면 c:out 태그를 넣어야 한다. -->
<td><a href="u1?idx=${each.idx }">수정하기</a>
</tr>
</c:forEach>
</tbody>
</table>
</body>
</html>
지금 여기 2가지가 있는데,
<!-- test라는 변수가 HomeController에게 Memo라는 객체를 넘겨 받아 그 객체의 title, memo 안에 원하는 value를 넣는다. -->
<c:set target="${test }" property="title" value="야호호호"></c:set>
<c:set target="${test }" property="memo" value="코로나야끝나라아아아"></c:set>
<p> title : <c:out value="${test.title }"></c:out> </p>
<p> memo : <c:out value="${test.memo }"></c:out> </p>
이 부분은 홈컨트롤러로부터 Memo라는 객체를 test라는 변수로 넘겨 받아, setter, getter를 이용해 객체를 활용하는 것이다. 이때 C 태그를 이용했다.
주의 : new Memo()라는 객체를 넘겨받았다. 값이 들어 있는 객체를 받은 것이 아니다.
<table style="width: 100%;">
<tbody>
<c:forEach var="each" items="${list }">
<tr>
<td>${each.getIdx() }</td> <!-- getter를 쓸 수도 있고, -->
<td>${each.title }</td> <!-- c:out 태그를 생략하고 사용할 수도 있다. (편리!) -->
<td><c:out value="${each.memo }"></c:out></td> <!-- Full로 쓰면 c:out 태그를 넣어야 한다. -->
<td><a href="u1?idx=${each.idx }">수정하기</a>
</tr>
</c:forEach>
</tbody>
</table>
이 부분은 홈컨트롤러가 DB한테 selectData 메소드를 실행시켜 데이터베이스로부터 쿼리를 받아 ArrayList 안에 Memo 객체를 넣어 list라는 변수로 넘겨 받아 for each를 이용해 테이블을 출력하는 것이다.
<c:out value="${each.memo }"></c:out> 이렇게 C태그 getter를 이용할 수도 있고,
${each.title } 그냥 이렇게 C태그를 생략할 수도 있으며
${each.getIdx() } 이렇게 넘겨 받은 객체에 포함된 getter를 이용할 수도 있다.
물론... 자바 내에서 실행되는게 아니라 객체 내에 getter는 반드시 포함되어 있어야 한다.
'개발자 > Java' 카테고리의 다른 글
Java (자바) CRUD 정리 8 기존 반응형 파일 활용하기 (홈컨 -> DB 옮기기) (0) | 2020.09.23 |
---|---|
Java (자바) TreeSet Object 정렬 (0) | 2020.09.18 |
Java (자바) CRUD 정리 7 기존 반응형 파일 활용하기 (09.09 People) (0) | 2020.09.12 |
Java (자바) CRUD 정리 5 Select (0) | 2020.09.12 |
IntelliJ (인텔리제이) Run/Debug Configurations 실행 환경 (0) | 2020.09.11 |