java 학습노트 - JSP3(34)

5949 단어 Java 학습

JSP 내장 객체


JSP는 컴파일을 할 때 많은 내장 대상을 동적으로 만들었기 때문에 개발자가 알면 JSP 페이지에서 직접 사용할 수 있다.이러한 내장 객체를 JSP 내장 9대 객체라고 합니다.
다음과 같은 9가지 기본 제공 객체를 직접 가져와야 하는 경우 다음을 수행할 수 있습니다.
오류 처리 페이지를 작성합니다. 번역된 jsp 파일을 보십시오.
public void _jspService(HttpServletRequest request, HttpServletResponse response)

        throws java.io.IOException, ServletException {

    PageContext pageContext = null;

    HttpSession session = null;

    Throwable exception = org.apache.jasper.runtime.JspRuntimeLibrary.getThrowable(request);

    if (exception != null) {

      response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);

    }

    ServletContext application = null;

    ServletConfig config = null;

    JspWriter out = null;

    Object page = this;

    JspWriter _jspx_out = null;

    PageContext _jspx_page_context = null;

    ......

}


JSP에서 JSP 스크립트를 작성하고 JSP 출력 표현식이 기본적으로 번역되기 때문에jspService () 그러면 상기 방법에 정의된 9대 대상 개발자는 임의로 사용할 수 있습니다.
JSP 9대 객체
서브렛 유형
request
HttpServletRequest
response
HttpServletResponse
session
HttpSession
config
ServletConfig
application
ServletContext
out
JspWriter
page
Object
pageContext
PageContext
exception
Throwable
1 out 객체
out과response의 출력 문자를 사용하여 페이지의 출력 데이터를 전송합니다.
<% 

    out.write("jack<br/>");

    response.getWriter().write("lucy<br/>");

%>


출력 결과는 루시 잭입니다.상기 두 개는 모두 문자 흐름이고 자신의 버퍼를 가지고 있기 때문에 JSPWriiter의 버퍼 데이터는 JSP가 실행된 후에야 Response 문자 흐름의 버퍼에 데이터를 갱신하기 때문에 out 대상이 출력한 데이터는 뒤에 있다.미리 출력해야 한다면 버퍼 데이터의 강제 리셋이 필요합니다.
<% 

     out.write("jack<br/>");

     out.flush();

     response.getWriter().write("lucy<br/>");

%>


2 JspWriiter 및 response의 바이트 스트림을 사용하여 데이터를 동시에 출력합니다.
<% 

    out.write("jack<br/>");

    out.flush();

    response.getOutputStream().write("lucy<br/>".getBytes());

%>


위 코드의 실행 결과는 Jack이고 이상 getWriter () has already been called for this response를 던집니다.JSP에서는 바이트 스트림과 문자 스트림을 모두 사용할 수 없습니다.
3. JSP를 사용하여 그림을 다운로드하는 방법.
<%@ page language="java" import="java.util.*,java.io.*" pageEncoding="UTF-8"%><% 

         //  

         InputStream in = 

application.getResourceAsStream("/imgs/0004.jpg");

         //  

         response.setHeader("content-disposition",

"attachment;filename=0004.jpg");

         //  

         byte [] b = new byte[1024];

         int len = 0;

         //  

         OutputStream output = response.getOutputStream();

         while((len = in.read(b)) != -1){

            output.write(b,0,len);

         }

         //  

         in.close();%>


페이지 JSP에서 out 대상을 사용하지 않도록 하기 위해서, 페이지의 리턴과 줄을 포함한 모든 템플릿 요소를 삭제해야 합니다.
4.out에서 대상을 억제하는 write 방법과 println 방법을 사용합니다.
<% 

       String str1 = "data";		

       String str2 = null;

       int a = 65;

       out.write(str1);			// data

       out.write(str2);			//  

       out.write(a);				// A

       out.write("<hr/>");

       out.println(str1);			// data

       out.println(str2);			// null

       out.println(a);				// 65

%>


두 페이지Context 객체
PageContext 클래스는 주로 JSP 페이지의 상하문 환경을 설명하는데 servlet의 정보를 얻을 수 있고 현재 JSP의 상하문 환경을 지정한 클래스에 전달하여 JSP 페이지에 대한 조작을 할 수 있다.
1. JSP의 모든 데이터 가져오기
<% 

out.write( (pageContext.getRequest() == request ) + "<br/>");

out.write( (pageContext.getResponse() == response ) + "<br/>");

out.write( (pageContext.getSession() == session ) + "<br/>");

out.write( (pageContext.getServletConfig() == config ) + "<br/>");

out.write( (pageContext.getServletContext() == application ) + "<br/>");

out.write( (pageContext.getPage() == page ) + "<br/>");

out.write( (pageContext.getException() == exception ) + "<br/>");

out.write( (pageContext.getOut() == out ) + "<br/>");

%>


 
SUN은 페이지 Context를 통해 다른 8대 객체를 가져와야 하는 이유는 무엇입니까?
앞으로 일반적인 자바 클래스가 JSP 페이지 데이터를 처리할 필요가 있으면 PageContext 클래스를 직접 전달하면 되기 때문이다.예: 태그를 사용자화합니다.
2. 공통 도메인
setattribvute ()/getattribute () 방법으로 데이터를 저장하고 가져올 수 있는 대상을 역 대상이라고 합니다.
도메인 객체
라이프 사이클
page
현재 페이지에서 유효
request
전송 요청
session
기본 30분
application
서버가 종료될 때
3. 서로 다른 도메인 속성 설정 및 가져오기
<%--   --%>

<% 

pageContext.setAttribute("page","this is current page");       pageContext.setAttribute("name","lucy",PageContext.REQUEST_SCOPE);

pageContext.setAttribute("age","38",PageContext.SESSION_SCOPE);

String likes[] = {"football","sleep","basketball"};        pageContext.setAttribute("likes",likes,PageContext.APPLICATION_SCOPE);

%>

<%--   --%>

<%= pageContext.getAttribute("page") %><br/>

<%= pageContext.getAttribute("name",PageContext.REQUEST_SCOPE) %><br/>

<%= pageContext.getAttribute("age",PageContext.SESSION_SCOPE) %><br/>

<%= Arrays.toString( (String[])pageContext.getAttribute("likes",PageContext.APPLICATION_SCOPE) ) %><br/>


 
요약:
페이지Context를 사용하여 필드 속성을 설정하고 가져올 때 표시할 수 있는 지정한 필드입니다. 지정한 필드가 없으면 기본적으로 이 필드는 페이지 필드입니다.
질문:
실제 개발에서 속성 설정과 취득 속성은 각각 다른 프로그래머가 개발한 프로그램이다. 만약에 취득할 때 개발자가 이러한 속성 이름이 도대체 어느 영역에 저장되어 있는지 명확하지 않으면 어떻게 해야 합니까?
해결 방안: 다음 문장을 사용할 수 있습니다
<%=  pageContext.findAttribute("test") %>
이 문장은 기본적으로 페이지아request아session아application에서 필요한 속성을 하나씩 찾습니다. 찾으면 바로 되돌려줍니다.
따라서 이 문은 EL 표현식의 기본 구현 원리입니다.

좋은 웹페이지 즐겨찾기