내가 보려고 만드는 54

서버/클라이언트/웹의 동작 개념

우리가 보는 웹 페이지는 원본의 복사본이며, 원본을 가지고 있는 곳은 서버이다. 서버가 자신이 가지고 있는 웹 페이지 원본을 복사해서 요청이 들어오면, 클라이언트가 이 복사본을 받아와서 복사본을 사용자에게 보여준다. 즉, 크롬 등과 같은 웹 브라우저가 클라이언트의 역할을 하는 것이다. 그렇다면 클라이언트는 어떻게 요청을 보내는것일까? 서버는 모든 약속들을 정해놓았다. 약속에 맞는 화면을 HTML, CSS, JavaScript로 이루어져 있는 원본 파일을 복사해서 클라이언트한테 넘겨주는데, 이러한 약속들을 API라고 부른다. 서버가 만들어 놓은 "API"라는 창구에 미리 정해진 약속대로 요청을 보내는 것이다. ex) https://naver.com/ → 이것은 "naver.com"이라는 이름의 서버에 있는..

[Tomcat] stopped 상태가 지속될 경우

Spring에서 보통 포트를 죽이고 서버를 다시 실행하는데, 갑자기! 몇 분 전까지만 해도! 잘되던 톰캣이!! 실행조차 안됐다. 내 톰캣이 무슨 문제인지 시간은 오래 걸려도 실행은 해줬는데 아무리 포트를 죽이고 재시작을 해도 stopped 상태였다. 구글링으로 catalina.properties도 수정해보고 server.xml도 수정해보고.. 진짜 온갖 파일을 다 수정해봐도 실행이 안됐는데, 다음과 같은 방법으로 톰캣을 다시 실행할 수 있게 되었다.... 요 두개를 체크해주면 해결! 참고 링크: m.blog.naver.com/PostView.nhn?blogId=vivacarla&logNo=221530801892&proxyReferer=https:%2F%2Fwww.google.com%2F [해결]Serve..

[Spring MyBatis] Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException:

이 에러가 발생했다면 원인이 다양한데, 주된 원인은 다음과 같다. mapper id가 틀린 경우 Parameter bean의 field 명이 틀린 경우 sql.xml에서 정의된 namespace와 DAO에서 호출하는 namespace가 다를 경우 mapper가 정의되어 있지 않거나 스펠링이 틀린 경우 mapper에 정의된 namespace 명칭이 같은 application 내에 중복 될 경우 나는 mpper.xml 파일의 id와 DAOImp.java 파일에서 사용된 id가 대소문자가 일치하지 않아 발생했었다.

[jsp] alert 창을 띄운 뒤 다음 페이지로 넘어가기

BookManagement 프로젝트에서 도서를 추가하면 성공적으로 도서를 추가했다는 alert 창을 띄운 뒤, book list 페이지로 넘어가도록 만들고 싶었지만 쉽지 않았다. 결론적으로 말하자면 Response.Write() 안에 "); Response.Write(""); 아래는 내가 다양하게 시도했던 방법들이다. 여러 가지 방법을 시도해보았는데, 첫 번째로는 jsp 페이지 하단에 두번째 방법은 다음과 같다. 그런데 이 방법을 사용했더니 alert 창은 떴지만, 그 다음 페이지인 viewbooks.jsp로 넘어가지 않았다. 그러면 자바 스크립트 코드 말고 response.sendRedirect 을 쓰면 안되는지 의문이 들 수 있는데, 이걸 써버리면 이 코드 위에 alert 창을 띄우는 자바 스크립트 ..

[jsp] 웹 페이지를 새로고침 할 때마다 변수 값 초기화시키기

테이블을 이용하여 각 행마다 번호를 매기는데, 문제는 다음과 같이 코드를 작성했더니 페이지를 로딩할 때마다 1부터 테이블이 시작되어야 하는데, 새로고침할 때마다 값이 증가했다. no++ ${b.getTitle()} ${b.getAuthor()} ${b.getComment()} ${b.getRegdate()} Edit Delete 이런 경우에는 변수를 선언하는 것이 아니라 태그의 varStatus 속성을 사용해야 의도한대로 번호를 증가시킬 수 있다. ${status.count} ${b.getTitle()} ${b.getAuthor()} ${b.getComment()} ${b.getRegdate()} Edit Delete varStatus를 이용하여 변수를 선언한 다음, 변수이름.count 를 이용하여 번호..

[500 에러] The server encountered an internal error () that prevented it from fulfilling this request. (taglib 오류)

Spring CRUD 프로젝트를 만들어보는데, 에러가 하도 많이 떠서 이젠 이 에러가 왜 발생했는지 잘 기억이 나지 않는다.. 아마 아래의 form 태그를 사용했는데 서버가 이 태그의 uri를 찾지 못하면서 발생한 에러인 것 같다. 어쨌거나 제목과 같은 에러 메세지와 함께 500 에러가 떴다면, 아래의 링크를 참고하여 해결하면 된다. 참고로 아래의 링크는 pom.xml에 dependency를 추가했는데, 만약 이 WEB-INF/lib 상에 spring-webmvc-*.jar 파일이 존재한다면 이 파일이 저장되어 있는 폴더로 가서 jar 파일을 복사한 다음에 Tomcat이 설치된 폴더의 lib 폴더로 가서 복사한 파일을 붙여넣기 해주면 된다. 보통, Tomcat lib 폴더는 C->Program Files..

[500 에러] Handler processing failed; nested exception is java.lang.NoClassDefFoundError: org/springframework/http/converter/json/MappingJackson2HttpMessageConverter

Spring으로 CRUD 프로젝트를 만드는데, 분명히 소스 파일을 복붙했는데도!! 500 에러가 떴다. 한참을 찾아보다가 spring framework와 spring-jdbc의 버전이 호환이 안돼서 그렇다는 것을 알아냈다. 원래 내가 Spring에서 쓰고 있는 버전은 3.1.1인데 붙여넣기한 소스의 jdbc의 버전은 5.1.1.이었다. 그래서 이 둘의 버전을 맞춰주었다. 먼저, 프로젝트 내에 있는 pom.xml을 열어준다. 여러 번 시도해봤는데 두 버전이 조금이라도 다르면 에러가 발생하는 것 같다. 이렇게 두 버전을 똑같이 맞춰주면 500 에러가 사라진다.

[controller] 파일이 실행되지 않는 경우

Spring으로 프로젝트를 만들었는데 패키지에도 파일에도 아무 문제가 없지만 파일이 실행되지 않는 경우가 있다. 파일 내에 에러가 있을 수도 있지만, 잘못된 패키지를 찾아가서 파일이 실행되지 않을 수도 있기 때문에 이런 경우에는 먼저 controller의 패키지 이름을 확인한다. 그 다음 프로젝트 하위의 src->main->webapp->WEB-INF->spring->appServlet 폴더에 있는 servlet-context.xml 파일을 열어서 하단에 있는 와 controller의 패키지의 이름과 일치하는지 확인한다. 만약 다를 경우 servlet-context.xml 파일의 패키지 이름을 바꿔주면 정상적으로 파일이 실행된다.

[500 에러] 절대 URI인 [http://java.sun.com/jsp/jstl/core]을(를), web.xml 또는 이 애플리케이션과 함께 배치된 JAR 파일 내에서 찾을 수 없습니다.

처음 Spring 프로젝트를 생성하고 어떠한 파일에도 손을 대지 않았는데 에러가 발생했다. 그 이유를 찾아보니 라이브러리에 jstl이 없어서 발생하는 문제라 jstl을 다운 받으라고 하는데, 라이브러리를 찾아보니 jstl.jar 파일이 있었다. 만약 jstl.jar 파일이 라이브러리에 있다면 이 파일을 복사하여 Tomcat이 설치된 폴더의 lib 폴더로 가서 복사한 파일을 붙여넣기 해주면 해결된다. 보통, Tomcat lib 폴더는 C->Program Files->Apache Software Foundation->Tomcat 9.0->lib 경로를 통해 찾을 수 있다.