1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556@RequestMapping("/board/filedownLoad.do") public void fileDownLoad(String oName, String rName,HttpServletRequest request,HttpServletResponse response) { BufferedInputStream bis=null; ServletOutputStream sos=null; String dir=request.getSession().getServletContext().getRealPath("/resources/upload..
WebSocket은 Transport Protocol로써 웹에서 사용하는 Socket이다. HTTP에서 클라이언트와 서버는 연결을 유지하지 않는 ConnectionLess특징이 있다. Socket은 클라이언트와 서버가 연결을 유지하는 특성을 갖는데, WebSocket을 사용함으로써 웹에서 양방향 실시간 통신이 가능해진다. 즉, 소켓으로 연결되어 있다면 클라이언트가 서버로 뭔가 요청하지 않더라도 서버가 보내고 싶을 때 클라이언트에게 데이터를 보낼 수 있다. 웹소켓은 RFC6445 표준이며, 프로토콜은 ws를 사용한다.HTTP에서 WebSocket으로 포로토콜 전환을 WebSocket HandShake라고 한다. 브라우저는 프로토콜을 HTTP에서 WebSocket으로 전환하려는 요청을 Header에 Upgr..
오늘은 스프링에서 파일 업로드를 해볼 계획이다. 전체적으로 MVC1패턴과 유사하게 진행된다. 하지만 중간에 service부분에서 기존의 방식과는 좀 다른 방식으로 진행되는 부분이 있으니 그 점에서 유의하면 될 것 같다. 1. 라이브러리 추가하기12345678910111213 commons-io commons-io 2.6 commons-fileupload commons-fileupload 1.3.3 Colored by Color Scriptercs 2.Controller에서 여러가지 처리하기12345678910111213141516171819202122232425262728293031323334353637383940414243444546@RequestMapping("/board/boardFormEnd.do..
오늘은 스프링에서 페이징 처리를 해볼 것이다. 페이징 처리는 MVC1 패턴에서도 쓰이던 기법인데 MVC2 패턴에 와서는 더 쉽고 편리하게 구성되어서 좋을 것이다. 기본적인 로직이나 구성은 똑같되 편리한 메소드만 가져다 쓰면되므로 페이징의 기초를 모른다면 아래의 링크로 먼저 학습을 하고 볼 것을 권장한다.https://smujihoon.tistory.com/88 그리고 이번 포스팅에서는 페이징처리를 템플릿화해서 사용할 것이다. 왜냐하면 어느곳에서 쓰이던 공식에 의해 똑같은 로직을 여러 번 구성하는것 보단 템플릿으로 만들어서 필요한 부분에 가져다 사용하는게 방법이 더 효율적이기 때문이다. 1.템플릿을 만들어보자1234567891011121314151617181920212223242526272829303132..
AOP란? 1.공통적으로 실행되는 것을 따로 빼서 사용하는 것예) 은행관련 로직을 수행할 때 항상 본인 인증을 요구하는데 본인 인증 로직을 따로 구현하고 이체나 현금서비스등 돈과 관련된 로직을 수행하려고 하면 그 전에 본인 인증을 요구하게 만드는 것(interceptor나 filter와 유사) 2.관점 지향 프로그래밍을 말한다. 관점 지향 프로그래밍이란??객체가 가지고 있는 기능을 분리하는 것.예를 들자면 dao가 DB에 접근해 데이터를 가져오는데 가지러 갈 때 DB에 대한 커넥션 정보를 그때 넣어주고 다 쓴 객체는 닫아주는 로직을 한번에 구성할 수 있지만 dao와 service를 나눈다. 그리고 service에서 커넥션에 대한 정보를 넣어서 dao를 호출을 한다. 데이터를 리턴받은 service는 그때..
내가 구성한 홈페이지가 있는데 특정 기능들은 로그인 이후에 사용이 가능한 메뉴들이 있을 것이다. 이러한 기능을 사용할 때 이전에는 해당 서블릿에서 session값이 null이 아닐 경우 사용하고 null이면 로그인창으로 재요청을 했다. 이번에 그러한 필터와 비슷한 역할을 해주는 Intercept를 해볼 것이다. Interceptor필터와 비슷한 역할, 서블릿으로 들어오고 매핑된 메소드한테 가기 전에 가로챔 Interceptor 분기 시점 3가지1.요청하자 마자 동작 (서블릿으로 도착하고 매핑된 메소드로 가기 직전에) - preHandle2.응답되고 동작 (View화면 보이기전) - PostHandle3.응답이 View화면이 보이고 난 이후 동작 - afterCompletion 사용방법HandlerInte..
프로그램을 개발하다보면 에러와 값이 제대로 들어오는지 확인하기 위해 System.out.println을 사용하는 개발자들이 많을 것이다. 하지만 이것도 하나의 입출력에 해당하기에 개발이 완료된 시점에서는 남기지 않는게 좋다. 그런데 수많은 서블릿에 사용된 sysout을 일일히 찾아서 지우는 것은 쉽지않은 일이다. 물론 사용이 끝나면 바로 지우는 습관을 들이는 것도 좋은 방법이지만, 고쳤던 문제가 다시 발생해 전에 썼던 sysout구문을 그대로 사용해야한다면 다시 찾아서 써야하지 않은가? 그래서 프로그램의 log 기록을 남기는 방법이 있는데 이것이 바로 log4j를 사용하는 것이다. 사실 스프링의 서버를 켰을 때 console창에 찍히는 INFO도 log4j였다!! 1.콘솔에 로그 찍기log4j.xml 파..
1.Session값 여러가지 형태로 저장하기먼저 기존에 하던 방식은 login메소드 파라미터로 HttpSession session을 받고서 로그인 성공되는 로직에 session.setAttribute();해서 넣는 방식 그대로 사용 가능하다. 2번째 방식은 어노테이션으로 @SessionAttribute(" ")을 만들어주고 아래서 model로 key값을 맞춰서 저장하는 것이다.사용은 편한걸로 하면 될듯 하다. 2.로그아웃하기로그아웃도 처음방식은 늘 사용했던 invalidate()로 연결을 끊어주면되고 두번째 방식은 SessionStatus라는 걸 파라미터로 받아서 !isComplete()로 연결확인을 하고 setComplete()로 연결을 끊어준다. 3.ModelAndView 사용하기우린 늘상 메소드를 ..