Jsp는 UseBean에 Scope 설정이 있고 일반적으로 Application 세션 페이지와 같은 설정이 있는데, Page는
각 페이지마다 재생성되는 새로운 javabean 객체입니다.
세션
과애플리케이션
은 javabean이 항상 존재한다는 것을 의미합니다. 세션과 비교할 때 애플리케이션은 애플리케이션에 상대적입니다.
일반적으로 사용자는 세션을 가지며 애플리케이션은 항상 존재합니다. . ,
전체 시스템의 "전역 변수"와 유사한 서블릿 프로그램과 유사하며 인스턴스가 하나만 있습니다.
MVC의 제어 기능
따라서 애플리케이션 기능은 MVC의 제어 기능에 매우 적합합니다. 일반적으로 전통적인 MVC는 제어 기능을 위해 서블릿을 사용합니다. V는
기본적으로
Jsp 페이지이고 M은 미들웨어 Javabean입니다.그러나 Jsp 기능이 향상되고 발전함에 따라 점차 서블릿을 대체하는 추세가 나타나고 있으며, 실제로는 문제를 해결
하기 위해
서블릿 대신 Jsp를 사용하는 경우도 있는데, 특히 그 제어 기능은 더욱 그렇습니다 .실제로 이 제어 기능은 Javabean에 캡슐화되어 있습니다. Jsp는 이 Javabean을 호출하기 위해 범위=application을 사용합니다. 이러한 방식으로
제어 기능이 있는 Javabean은 메모리에 상주하는 서블릿과 같으며 다양한 백그라운드 미들웨어와 상호 작용합니다.
실제 응용 프로그램에서"홈 페이지" 표시
홈 페이지와 같은 페이지에 동시에 액세스하는 여러 사용자가 있습니다. 이 홈 페이지에서는
디렉토리 분류와 같은 많은 기능을 실행할 수 있습니다. 데이터베이스에서 트리 데이터를 읽고 확장하여 홈페이지에 출력해야 합니다. 이 기능은 Javabeans에 캡슐화되어 있습니다.
그런 다음 홈페이지 JSP가 이 Javabean을 호출할 때 범위=application을 사용한 다음 트리 데이터 버퍼링 알고리즘을 사용합니다. 이렇게 하면 여러
사용자가
동시에 홈페이지에 액세스할 때 홈페이지 JSP가 매번 Javabean을 시작할 필요가 없습니다. 그런 다음 데이터베이스를 반복해서 읽습니다.의심할 여지없이 속도가 크게 향상됩니다.
따라서 홈페이지 Jsp의 방문 수가 많으면 최적화에 더 많은 시간을 투자해야 합니다.
데이터베이스 연결 버퍼링
< jsp:useBean id="cods"
클래스="oracle.jdbc.pool.OracleConnectionCacheImpl"
범위="application" />
< 이벤트:application_OnStart>
<%
cods.setURL("jdbc:oracle:thin:@HOST:PORT:SID");
cods.setUser("스콧");
cods.setPassword("호랑이");
cods.setStmtCache (5);
%>
< /event:application_OnStart>
< %@ page import="java.sql.*, javax.sql.*, oracle.jdbc.pool.*" %>
< !------------------------------------------------ ----------------
* Connection Caching을 사용하는 JavaServer Page입니다.
애플리케이션
* 범위. 캐시는 다음의 애플리케이션 범위에서 생성됩니다.
globals.jsa 파일.
* 캐시에서 연결을 얻고 한 번 재활용됩니다.
완료
.------------------------------------------------ -------!>
<HTML>
<헤드>
<제목>
콘캐시 JSP
< /제목>
< /HEAD>
<BODY BGCOLOR=EOFFFO>
<H1>안녕하세요
< %= (request.getRemoteUser() != null? ", " +
request.getRemoteUser() : "") %>
!저는 연결 캐싱 JSP입니다.
< /H1>
<인사>
< B> 캐시에서 연결을 가져와서 다시 재활용합니다.
< /B>
<피>
<%
노력하다 {
연결 연결 = cods.getConnection();
명령문 stmt = conn.createStatement();
ResultSet rset = stmt.executeQuery("SELECT ename, sal " +
"FROM scott.emp ORDER BY ename");
if (rset.next()) {
%>
< 테이블 테두리=1 BGCOLOR="C0C0C0">
< TH WIDTH=200 BGCOLOR="white"> < I>직원 이름< /I> </ /TH>
< TH WIDTH=100 BGCOLOR="white"> < I>급여</I> </ /TH>
< TR> < TD ALIGN=CENTER> < %= rset.getString(1) %> < /TD>
< TD ALIGN=CENTER> $< %= rset.getDouble(2) %> < /TD>
< /TR>
< % 동안(rset.next()) {
%>
< TR> < TD ALIGN=CENTER> < %= rset.getString(1) %> < /TD>
< TD ALIGN=CENTER> $< %= rset.getDouble(2) %> < /TD>
< /TR>
< % }
%>
< /표>
< % }
또 다른 {
%>
< P> 죄송합니다. 쿼리에서 반환된 행이 없습니다. < /P>
<%
}
rset.close();
stmt.close();
conn.close(); // 연결을 다시 풀에 넣습니다.
} 잡기(SQLException e) {
out.println("< P>" + "쿼리 수행 중 오류가 발생했습니다:");
out.println ("< PRE>" + e + "< /PRE>
<P>");
}
%>
< /BODY>
</HTML>
애플리케이션을 사용하여 데이터베이스 연결을 캐시할 때마다 버퍼에서 꺼내어 사용 후 반환됩니다.