내 JSP 프로젝트에 다음 스크립트가 포함 된 .jsp 파일이 있습니다.
<script type="text/javascript">
$(window).load(function() {
...
options.items = items;
...
});
</script>
변수 항목 은 동일한 .jsp 파일에도 포함 된 다른 JavaScript 스크립트에 포함됩니다.
<script type="text/javascript" src="<c:url value="/js/items.js"/>"></script>
items.js의 구조는 다음과 같습니다.
var items = [{...}, {...}, {...}];
이제이 .jsp에 대해 doGet 을 구현하는 서블릿 은 데이터베이스에서 일부 데이터를 수집하고 (이 데이터는 매번 다를 수 있음)이를 사용하여 위에서 언급 한 items.js 파일을 디스크에 기록합니다.
문제는 서버 (tomcat7)가 items.js가 다시 시작될 때까지 변경된 것을 보지 못하지만 수집 할 데이터가 항상 같지는 않기 때문에 매번 해당 파일을 생성해야한다는 것입니다. 그래서 서버를 다시 시작하지 않고도 항목에 대한 데이터와 함께 언급 한 첫 번째 JavaScript 함수를 올바르게 제공하는 방법을 알고 싶습니다 . 물론 가능 하면 스크립틀릿 사용을 피하고 싶습니다 .
이 메시지의 시작 부분에 포함 된 JavaScript 부분은 데이터 시각화에 필요한 JavaScript 라이브러리를 사용하고 있기 때문에 삭제할 수 없습니다.
도움을 주셔서 미리 감사드립니다.
이 문제를 어떻게 해결했는지 설명하기 위해 내 질문에 답하고 있습니다.
나는 Sacho와 Christopher Schultz가 제안한 것을 정확하게하지 않았지만 그들이 말한 것은 나에게 아이디어를 주었다.
첫째, 내 서블릿에서 원하는 데이터를 포함하는 StringBuffer를 구축했습니다. 처음에는 JSONArray를 사용하고 싶었지만 내 js 스크립트가 읽을 수 있도록 여러 변환을 사용하는 것을 의미합니다 (할 수는 있지만 단순히 표준 파서를 사용하는 것이 아니라 조금 더 복잡한 것입니다). 그런 다음이 StringBuffer를 요청 매개 변수에 추가했습니다. 이것이 모든 모습입니다.
protected void doGet(HttpServletRequest request,
HttpServletResponse response) {
StringBuffer sb = new StringBuffer();
// Fill the StringBuffer
request.setAttribute("items", sb);
request.getRequestDispatcher("/WEB-INF/myjsp.jsp").forward(
request, response);
}
마지막으로 다음과 같이 jsp 파일에서이 속성에 액세스했습니다.
options.items = <%= request.getAttribute("items") %>;
스크립틀릿을 피하고 싶었지만이 코드는 괜찮다고 생각하고 구현하기가 매우 간단합니다.
당신의 도움을 주셔서 감사합니다!
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다