Web9 특수문자 +나 &가 공백으로 서버에 전달되는 원인 회사에서 프로젝트를 하던 도중 어떤 변수의 이름에 +가 들어갔었는데 데이터를 아무리 서버에 전달해도 +가 공백으로 바뀌어서 전달되었었다. 이유는 +나 &는 GET 방식일때 웹에서 쓰이는 지정된 문자이기 때문에 전달되지 않는 것이다. 그래서 POST 방식을 이용하여 문제를 해결하였다. POST 방식일때는 문자 그대로 전달된다. Web 2023. 10. 29. [Web] ".do" 확장자 왜 쓰는 걸까? 웹개발을 하거나 웹사이트를 서핑하다보면 가끔 ".do"로 url 매핑이 된 화면들이 꽤 발견할 수 있다. 왜 .do를 쓰는건지 의문이 들때가 있다. 결론부터 말하자면 관행때문이다. 현재야 워낙 스프링이 막강해져서 다른 서블릿은 따로 안쓰지만 과거에는 스트럿츠라는 프레임워크를 함께 사용하는 경우가 있었다. 그 스트럿츠의 가이드에 확장자를 do로 하라고 지시하고 있었기때문이다. action *.do 이와 같은 가이드가 나온 이유는 다른 서블릿과 URL 충돌을 막기위해서라고 한다. 정부표준 기본 세팅에서도 URL 확장자가 .do로 끝나도록 매핑된 이유로 2000년대 초창기 자바 웹개발자들에게는 .do 확장자는 필수였을지도 모르겠다. 하지만 요즘은 검색, 경량화 등의 이유로 REST URL이 대부분의 사이트에서.. Web 2021. 7. 6. [JSP] a태그의 href="#"에 관하여 웹페이지에서 흔히 볼수 있는 형태이다. 1. 클릭 이벤트 발생시 페이지 전환을 하지않게 만드는 방식이다. #으로 의미없는 링크를 주어 페이징 되지 않게 하기 위함인데 클릭시에 최상단으로 이동하게 되므로 를 추천하는 곳도 보았다. 그렇다면 위의 코드와 #의 차이는 무엇일까? #은 최상단으로 이동하지만 위의코드는 이동하지 않는다. #이던 javascript:던 뒤에 ;(세미콜론)을 붙이면 최상단으로 이동하지 않는다. 그리고 클릭시 #은 url주소 뒤에 #이 붙게되지만 javascript:는 붙지 않는다. 그리고 종종 #none이 붙는 경우도 보았는데, #none은 #;과 동일한 방식이다. 만약 화면 최상단으로 이동하는 것을 목적으로 사용한다면, 다음과 같은 코드가 더 좋은 방식이다. Web 2021. 6. 25. [Image] SVG와 PNG의 차이 웹 개발을 하다보면 이미지를 많이 쓰게 된다. 어떤 한 프로젝트에서 SVG와 PNG를 같이 쓰는 걸 보고 차이가 궁금해서 찾아보았다. SVG (Scalable Vector Graphics) : 2차원 벡터 그래픽을 표현하기 위한 XML기반의 파일 형식이다. Vector로 되어있다. PNG(Portable Network Graphics) : 비손실 그래픽 파일 포맷의 하나로 GIF의 문제점을 해결하기 위해 고안된 파일 형식이다. Bitmap으로 되어있다. 이 둘의 가장 큰 차이점은 확대할 때 SVG는 그대로 확대되지만 PNG는 aliasing 현상이 일어난다. 즉, 이미지가 깨진다. 위와 같이 이미지의 확대에서 차이가 있다. 또한 SVG가 PNG보다 용량도 적으며 출력도 빠르다. 그런데 왜 PNG를 쓰고있.. Web 2021. 6. 22. [Spring] Controller로 요청이 두 번 오는 오류 나는 분명히 submit을 한번만 했는데 요청이 두번 오는 오류가 발생했다. 당연히 두번 눌러서 그런건 아니고 찾아보니 이런 기이한 현상을 겪는 개발자들이 많았다. request 헤더를 찍어보니 파일 업로드와 관련한 웹페이지에서 전송을 하면 한번은 정상적으로, 한번은 비정상적으로 요청하였다. 그래서 구글링해보니 그 페이지의 url과 관련된 태그의 문제였다. 어떤사람은 다음과 같이 url값을 빈값으로 넣어 두번 요청하였고 나의 경우에는 #container { background-image: url(''); background-size: cover; background-position: center; } 다음과 같이 css에 url을 빈값으로 넣어 요청이 두번갔다. 요청이 두 번가는 오류는 JSP단에서 ur.. Web 2021. 6. 10. [Spring] 서버의 물리적 경로 가져오기(TO 업로드) 파일을 업로드 하기위해서 서버의 물리적 경로가 필요할 때가 있다. String defaultfilepath = request.getSession().getServletContext().getRealPath(""); 이런식으로 경로를 가져오면 된다. 보통은 ROOT폴더를 가져올텐데 만약 하위에 저장해야 한다면 문자열 추가하듯이 뒤에 추가하면 된다. Web 2021. 4. 16. [JSP] 수정한 canvas를 file 타입의 input태그에 넣기 프로젝트를 진행하다가 차트를 DB에 저장하는 업무를 맡았다. 1. Local에 있는 사진을 저장하기 2. Local에 있는 사진을 업로드해서 펜으로 그리고 저장하기(펜차트) 펜차트는 의사선생님들이나 병원 실장님들이 차트를 보고 막 펜으로 특이사항 등등을 적는 그런걸 의미한다. 위 두가지 기능을 구현해야 했다. 첫번째 기능은 input을 이용해서 손쉽게 구현했는데 두번째 기능이 문제였다. 그래서 차트를 업로드해서 펜으로 표시를하고 저장을 한 후에 DB에 저장해야 했는데 이미지를 업로드하고 펜으로 휙휙 그리는 기능까지는 여차저차해서 쉽게 구현했지만 이 이미지를 다시 저장해서 파일화하여 input 태그에 넣는 작업이 시간이 꽤 걸렸다. 처음에는 Blob을 이용하여 구현하였다. Canvas -> Action(펜.. Web 2021. 3. 30. [JSP] input으로 데이터를 넘겼는데 왜 자꾸 ,(콤마)가 붙어서 오는지 웹 개발을 하다보면 input으로 데이터값을 받아서 서버로 넘길 경우가 허다하게 있다. 최근에 어떤 프로젝트에 중간에 투입되었는데 소스가 엉망이었다. 그래서 수정하고 input값으로 데이터를 넘겨받았는데 어떤 값이 계속 ,(콤마)가 붙어서 들어오는 것이었다.. 구글링해봐도 숫자 세글자 마다 콤마 넣어주기 밖에 없고.. 문제를 해결할 수 없었다. 그러다가 지인에게 물어봤는데 한 JSP에 똑같은 name이 있으면 ,가 붙어서 넘어 올 수 있다는 것이었다. 확인해보니 똑같은 name의 input이 두개 있었다.. 한개로 만들고 문제를 해결했다. Web 2021. 3. 23. [Spring] MVC Controller 클래스에서 @Transactional을 사용할 수 있는가? Controller단에 @Transactional을 설정한 후에 rollback테스트를 해봤는데 되지 않았다. 그래서 그냥 Controller단에서는 @Transactional이 안되는구나 하고 Service 클래스에서 트랜잭션이 필요한 로직을 짰었다. 근데 똑같은 상황을 최근에 겪었는데 또 찾고 있었던 내 모습을 보고 원인파악을 시작했다. Controller단에서 @Transactional이 안먹히는 이유는 Spring AOP때문이다. Spring AOP는 기본적으로 다이내믹 프록시 기법을 사용하는데 이 프록시를 적용하려면 인터페이스가 필요하다. 일반적으로 Controller는 인터페이스가 없기때문에 적용되지 않았던 것이다. 만약 Controller에서 적용하고 싶으면 클래스 프록시 모드를 사용하면된다.. Web 2021. 3. 22. 이전 1 다음