Coding 공부/IntelliJ
[IntelliJ_Servlet] Todo List#1 만들기
CBJH
2024. 4. 18. 18:12
728x90
반응형
1. 잡담
- 웹 브라우저는 기본적으로 쓰레드를 제공하므로 따로 thread 클래스를 상속받거나 run 함수를 구현할 필요가 없다.
- 페이지를 새로고침하면 여러 쓰레드가 동시에 실행된다.
- 새로고침하거나 페이지를 이동해도 서버에 저장한 값은 남아 있다.
- 공통으로 공유하는 자원(싱글톤) 같은 곳에 컬렉션을 사용하여 모두가 접근 가능한 자료를 축적할 수 있다.
System.out.println("this:" + this);
System.out.println("Thread.currentThread().getName():" + Thread.currentThread().getName());
- enum 복습
- enum은 생성자가 private 또는 default이므로 외부에서 생성하거나 필드값을 변경할 수 없다.
- 상수값을 선언하는 것이 생성자를 호출하는 것과 같은 역할을 한다.
- 객체를 새로 생성하여 따로 사용할 수 없으므로 공유된 자원을 사용하도록 강요해 싱글톤 같은 역할을 한다.
public enum YJ302 {
KT("기태", "지각생"),
CS("철수", "채찍남"),
DJ("동준", "앵그리버드"),
IH("일휘", "조퇴남");
private final String name;
private final String desc;
YJ302(String name, String desc) {
this.name = name;
this.desc = desc;
}
public String getName() {
return name;
}
public String getDesc() {
return desc;
}
}
2. 목적
- 자바에서 Cotroller로 톰캣 서버에 서블릿으로 제어한다.
- 각 기능을 Controller로 만들어본다.
- View를 jsp파일로 만든다.
- EL을 활용하여 Controller에서 값을 받아온다.
- 글 목록은 페이지가 바뀌어도 공유할 수 있도록 TodoService eum에서 싱글톤으로 컬렉션을 생성해 관리한다.
- 글 입력, 수정, 삭제, 불러오기 같은 기능들은 TodoService에서 구현한다.
- 각 페이지는 각각 자바에서 Controller로 구현하여 get 방식으로 jsp페이지를 열고, post 방식으로 수정한 값을 업데이트한다.
3. 기능 설명
4. 깃허브 링크
https://github.com/cbjh-4/TodoList_java
5. 캡처 화면
6. 느낀점과 추가사항
- 자바 서블릿 컨트롤러에서 doGet으로 jsp파일을 로드할 때, setAttribute메서드로 객체를 jsp에 보낼 수 있다.
-
req.setAttribute("todoDTO", todoDTO);
- jsp에선 TL문을 사용하여 객체안에 든 값들을 불러올 수 있다.(초기값 설정하는데 쓰인다)
- setAttribute하지 않고, getRequestDispatcher를 forward하면 컨트롤러에서 선언한 변수들에 접근이 가능한 줄 알았는데, 이 부분을 몰라서 오랜 시간이 걸렸다.
- jsp에서 체크 박스를 체크하면 true, 체크하지 않으면 컨트롤러에서 getParameter를 하면 false를 반환하는줄 알았는데, 아무것도 반환하지 않아서 이 부분을 확인하고 처리하는데 어려움을 겪었다.
<form action="/todo/register" method="post" onsubmit="return validateForm();">
~
<label for="finished">Finished:</label>
<input type="checkbox" id="finished" name="finished" value="true">
<input type="hidden" name="finished" value="false">
<button type="submit">등록</button>
</form>
- 글 인덱스를 글을 생성할 때 마다 1씩 증가시키는 방법을 어떤 식으로 구현할까 생각했다. DBMS에서 배운 seq를 착안해 private변수로 만들고, ArrayList에 TodoTDO 객체를 추가할 때마다 1씩 증가시켜 문제를 해결했다.
public enum TodoService {
INSTANCE(0);
private long seq;
TodoService(long seq) {
this.seq = seq;
}
public long getSeq() {
return seq;
}
}
- 글을 수정할 때, ArrayList에 저장된 값을 수정하므로 set함수를 사용하는데, 인덱스와 변경할 객체 정보가 필요했다. 어떻게 구현할지 고민하다가 인덱스를 post로 받아서 밑의 방식으로 수정하는 방법을 생각해냈다.
public void modify(TodoDTO todoDTO) {
TodoDTO todoDTO_temp = get(todoDTO.getTno());
int index = -1;
index = todoList.indexOf(todoDTO_temp);
if(index != -1){
todoList.set(index, todoDTO);
}
}