controller.txt
0.01MB
message.jsp
0.00MB

 

DB.java
0.02MB

 

요 파일 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는 반드시 포함되어 있어야 한다.

+ Recent posts