고객중에는 게시판 페이지 네비게이션 으로 이동시 ( 게시판 하단 1페이지 2페이지... 하는것들)

 

화면이 깜빡이는 것(페이지가 이동되는 액션)을 

 

극혐하는 고객들이 있다.

 

그럴때는 비동기로 데이터를 불러와 화면을 그리는데 요즘은 뷰인지 리액트인지 여러 기술들이있지만

 

그냥 javascript 든 jquery 로든 HTML을  그리는 경우도 있다.

 

요점은 그것이 아니고 해당 방식으로 그릴때 브라우저의 뒤로가기 기능이

 

일반 사람들의 논리와는 맞지않게 작동한다

 

웹 개발자는 당연히 페이지 이동이 일어난게 아니니 뒤로가기면

 

페이지 네비게이션으로 이동한 페이지가 아닌(게시판이 아닌) 화면으로 이동한다고 생각하지만

 

고객(일반인)은 당연히 해당 게시판내에서 페이지 번호가 이동해야한다고 생각한다.

 

어느정도 웹개발에 몸담은사람들은 다들 경험한 일일 것이다.

 

또한 해당 게시판의 x번째 페이지에 xx번 게시물을 클릭하여 이동했다가 브라우저 뒤로가기를 누르면 

 

마찬가지로 이전 페이지는 x번째 페이지가 아닌 Page가 Init 된상태 즉 1페이지를 바라보고 있을것이다.

 

해당 이슈는 호랑이 담배피던 시절부터 있던 이슈이며 모든 개발자들이 나름의 해결 방법을 만들어서

 

사용하고있다. 아래의 코드는 최근 프로젝트에서 정리한 버전이며 정답이 아니다.

 

내가 가끔 다시 생각할 수있게 기록을 남기는 것임.

 

 

 

/**
* 2020-02-26
* Page Init Painting HTML Logic
* Call Function Name paintHTML

// paintHTML (AJAX CALL 함수든 뭐든 결과적으로 HTML을 그리는 function)

// Browser Back Event Bind
// on > bind 변경가능
$(windows).on('popstate', function(){
	// History Check
	var hstate = history.state;
	if(hstate != null && hstate.formData) {
		// History 가 있을 경우 해당 FromData 로  HTML Paint
		paintHTML(hstate.formData);
	}else{
		// History 가 없는 경우 Browser Back 기능
		history.back(); // or history.go(-1);
	}
});


// Page Init 시에 사용할 Function
// ex)
// $(document).ready(function(){
//      initPaintHTML();
// });
// parameter : initFormData > 초기 Init 시에 필요한 FormData 가 있는경우 사용
function initPaintHTML(initFormData){
	// History Check
	var hstate = history.state;
	if(hstate != null && hstate.formData){
		// History 있는경우 해당 FromData 로 Paint
		paintHTML(hstate.formData);
	}else{
		// History 없는경우 받은 FromData 로 Paint
		paintHTML(initFormData);
		// History Stack
		if(initFormData){
			history.pushState({'formData' : initFormData}, null, '');
		}else{
			history.pushState({'formData' : 'initPage'}, null, '');
		}
	}
}

// 아래의 코드를 Page Navigation Function 내 추가 필수
// Page Navigation Action > History Stack (pushState)
history.pushState({'formData' : formData}, null, '');

 

Posted by 하찮은자
,

대부분의 프로젝트를 Spring, Maven, Mybatis 형태의 프로젝트를 하고있고 선호하는 편임.


Maven을 사용하다보면 특정 라이브러리를 사용하기위해 pom.xml 에 Dependency를 추가해야하는 경우가 왕왕 생긴다.


해당 Maven Repository에 있는 경우에는 단순히 Dependency를 추가하여 사용하면 되지만 없는경우엔


두가지 방법을 사용하면된다.



첫번째


Maven Install 


Local Maven Repository에 Install 하여 사용하는 경우임


보통 윈도우환경기준 C:\Users\로그인ID\.m2\repository 에 설치하여 사용하는방법인데.


어느정도 프레임워크화 되어 매 프로젝트마다 사용하는 외부라이브러리라면 이 방법을 사용하는것이 좋다.


ex) MS-SQL을 자주사용하는 경우 jdbc driver 사용을 위해 하는것이 좋음


외부라이브러리(jar) 파일을 다운로드한 후 명령프롬프트(cmd)에서


mvn install:install-file -Dfile=파일경로/파일명.jar -DgroupId=그룹아이디 -DartifactId=아티팩트아이디 -Dversion=버전 -Dpackaging=jar 


위의 명령어에서 빨간부분으로 표시한 부분을 수정한 후 입력해주면 설치가 진행된다. [버전은 숫자로 입력한다 예) 1.0]


 



설치가 완료되면


pom.xml에


<dependency>

<groupId>그룹아이디</groupId>

<artifactId>아티팩트아이디</artifactId>

<version>버전</version>

</dependency>


 



을 추가해준 후 사용하면 된다.





두번째


Scope 사용


간단하게 이야기하면 Local Project에 있는 라이브러리(jar)를 명시적으로 선언하여 사용하는 방식인데


이클립스에서 기본 Dynamic Web project 를 만들어서 사용할때 WEB-INF/lib 에 추가해서 사용하는 것과


다를것이 없지만 그렇게한다면 Maven으로 빌드때 문제가 발생하므로 Maven을 사용할때는 아래와 같이 사용하는것이 좋다


Project내 


webapp/WEB-INF/lib/ 위치에 jar 파일을 저장한 후


pom.xml 에


<dependency>

<groupId>그룹아이디</groupId>

<artifactId>아티팩트아이디</artifactId>

<version>버전</version>

<scope>system</scope>

<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/파일명.jar</systemPath>

</dependency>


 




추가하여 사용하면 된다.



좀더 자세한 scope의 사용방법은 


http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html


를 참고



ps. 두가지 방법은 지극히 개인적인 경험과 의견이므로 더 좋은방법이 있다면 해당 방식으로 하는것이 좋음


'DeveloperLee > Web' 카테고리의 다른 글

Mybatis Map Camel Case 처리  (0) 2020.03.18
Map To QueryString  (0) 2020.03.17
Ajax 게시판 뒤로가기 관련 정리  (0) 2020.02.26
preventDefault() / stopPropagation()  (0) 2020.02.25
Tomcat 6 -> 7 시 주의 (InvokerServlet)  (0) 2017.06.12
Posted by 하찮은자
,

유지보수 또는 운영을 나가다보면 Tomcat 6를 사용하는 프로젝트가있는데


예를들어 Url이 /servlet/package.second.ServletName 형태로


InvokerServlet 을 사용하고 있다면  Tomcat 7를 사용할경우 아래와 같은 문제가 발생함


java.lang.ClassNotFoundException: org.apache.catalina.servlets.InvokerServlet





Tomcat 7 부터는 Servlet 3.0 이 적용되면서 InvokerServlet의 보안문제로 제거되었음


Tomcat 7에서 InvokerServlet의 사용은 아래 참고


http://blogs.nologin.es/rickyepoderi/index.php?/archives/44-Tomcat-7-and-the-Invoker-Servlet.html

Posted by 하찮은자
,