>  기사  >  Java  >  Java의 4가지 주요 도메인(그림 및 텍스트)에 대한 가장 완전한 요약

Java의 4가지 주요 도메인(그림 및 텍스트)에 대한 가장 완전한 요약

PHPz
PHPz원래의
2017-04-03 09:49:181496검색

최근에 웹 파트 공부를 마쳤는데, 어떤 부분은 개별적으로는 항상 이해하기 쉽지만, 종합해 보면 항상 헷갈리기 쉬운 몇 가지 지식 포인트가 있다는 것을 알게 되었습니다. 실제로 열심히 일하는 포터가 부족하지는 않지만 인터넷에는 충분한 정보가 있습니다. 하지만 우리가 우리 자신을 이해하는 것이 궁극적인 목표가 아닐까요? 우리가 이해하는 것만이 진정으로 우리의 것이다. 추가 보너스로 먼저 JSP의 9가지 암시적 객체에 집중해 보겠습니다.

아래 그림에서 JSP의 9가지 암시적 객체를 확인할 수 있습니다. 이는 교사들이 항상 핵심이라고 말합니다.

범위------이름에서 알 수 있듯이 작동하는 크기 범위도 있습니다! 지식 항목을 스스로 학습하는 경우 지식 항목을 이해하고 숙달하는 것으로 간주되려면 어떤 목표를 달성해야 합니까? Dr. Bian의 관찰, 청취 및 질문부터 데이터베이스의 추가, 삭제, 수정 및 검색에 이르기까지 모든 것은 동일한 질문에서 시작됩니다. 그것은 무엇입니까? 무슨 소용이 있나요? 그것을 사용하는 방법? 왜 이렇게 사용할 수 있나요? 그러므로 우리는 다음과 같은 문제를 파악하고, 이러한 문제를 가지고 연구하며, 자신의 단점을 발견하는 것이 가장 좋은 학습 방법이라고 생각합니다.

1) 스코프의 실제 크기입니다. (뭔데?)

2) 범위의 역할. (용도가 무엇인가요?)

3) 스코프 사용법. (사용방법은?)

4) 이와 같은 구현원리를 사용합니다. (왜 이렇게 쓸 수 있는 걸까요?)

하나씩 분석해 보겠습니다.

(1) servletcontext 도메인(애플리케이션 도메인)

1) 실제 범위 크기. (무엇입니까?)

servletcontext 도메인의 범위는 전체 웹 애플리케이션입니다.

생성된 데이터는 나중에 활용될 뿐만 아니라 다른 사람도 사용하게 되므로 servletcontext를 이용해 주시기 바랍니다.

4개 도메인 중 가장 큰 도메인입니다.

2) 범위의 역할. (용도는? )

웹 애플리케이션의 모든 서블릿은 동일한 servletcontext 객체를 공유하므로 여러 서블릿은 공유의 servletcontext 객체를 통해 서로 다른 서블릿 간의 데이터 전송을 실현합니다.

3) 스코프를 사용하는 방법. (사용 방법?)

  a) 프로그래밍을 통해 바인딩되거나 웹 애플리케이션의 전역 변수로 바인딩될 수 있습니다. 모든 서블릿 및 JSP에서 액세스

设置Context属性:
              ServletContext application=this.getServletContext();
              application.setAttribute("person1",new Person("Jim"));
              application.setAttribute("person2",new Person("Green"));
 获取Context属性:
              ServletContext application=this.getServletContext();
              Enumberation persons=application.getAttributeNames();
               while(persons.hasMoreElements()){
                      String name=(String)persons.nextElement();
                      Person p=(Person)persons.getAttribute(name);
                      application.removeAttribute(name);
              }

b) 전체 웹 애플리케이션에 대한 컨텍스트 도메인을 구성합니다.

web.xml 구성 파일을 수정하고

 

 data

 Hello world!

 

서블릿에서 다음 초기화 매개변수에 액세스합니다.

ServletContext application=this.getServletContext();

out.println(application.getInitParameter("data"));

 c) 리소스 파일 읽기

HTML, GIF 및 JPEG 파일을 포함하여 웹 애플리케이션의 정적 콘텐츠 문서 구조에 직접 액세스하려면 ServletContext인터페이스를 사용하세요. 다음 메소드와 같습니다:
.getResource()
.getResourceAsStream()
이 두 메소드의 매개변수는 "/"로 시작하는 문자열 으로, 리소스가 리소스에 상대적임을 나타냅니다. 컨텍스트 루트 상대 경로입니다. 문서 구조는 서버 파일 시스템 , war 패키지, 원격 서버 또는 기타 위치에 있을 수 있습니다. getResource("/index.jsp")와 같은 동적 리소스를 얻는 데 사용할 수 없습니다. 이 메서드는 동적 페이지가 아닌 jsp 파일의 소스 코드를 반환합니다. "요청 전달"을 사용하여 동적 콘텐츠를 얻을 수 있습니다. 웹 애플리케이션 나열 액세스할 수 있는 리소스의 경우 getResourcePaths(String path) 메서드를 사용할 수 있습니다.

                                                                                     (이런 식으로 쓸 수 있는 이유는 무엇일까요?)

서블릿은 데이터 출력에 적합하지 않기 때문에 미화를 위해 데이터를 JSP 파일로 전달한 후 로 출력해야 합니다. 고객.

JSP는 Java 코드를 내장하여 Java 데이터를 수신할 수 있습니다. 동시에 servletcontext 도메인을 사용하면 전체 웹 애플리케이션이 데이터를 공유할 수 있으므로 "스레드보안

" 문제도 전달되는 데이터에 영향을 미치므로 요청 도메인을 사용해야 합니다.

(2) Httpsession 도메인(세션 도메인)

1) 범위 실제 크기 . (무엇인가요?)

 Httpsession의 범위는 세션입니다.

데이터가 생성된 후 사용자에게 표시됩니다. 나중에 사용해야 하는 경우 Httpsession 도메인을 사용하세요.

  它是四个域中范围第二大的域。

2)  作用域的作用。(有什么用?)

  (会话范围)在第一次调用request.getSession()方法时,服务器会检查是否已经有对应的session。如果没有,就在内存中创建一个session并返回。当一短时间内(默认30分钟)session没有被使用,则服务器会销毁该session。若服务器非正常关闭,未到期的session也会跟着销毁。若调用session提供的invalidate()方法,可以立即销毁session。

3)怎么使用这些作用域。(怎么用?)

  a) jsp中操作session
    (String)request.getSession().getAttribute("username"); // 获取
    request.getSession().setAttribute("username", "xxx");  // 设置

   b) java中操作session
    //servlet中
    request.getSession();
    session.getAttribute("username");
    session.setAttribute("username", "xxx");
    session.setMaxInactiveInterval(30*60);
    session.invalidate();
 
    //struts中方法1
    ServletActionContext.getRequest().getSession().setAttribute("username", "xxx");
    ServletActionContext.getRequest().getSession().getAttribute("username");
    ServletActionContext.getRequest().getSession().setMaxInactiveInterval(30*60);
    ServletActionContext.getRequest().getSession().invalidate();

    //struts中方法2
    ActionContext.getContext().getSession().put("username", "xxx");
    ActionContext.getContext().getSession().get("username");
    ActionContext.getContext().getSession().clear();

   c) web.xml中操作session
    <session-config>          <session-timeout>30</session-timeout>      </session-config>   d) tomcat-->conf-->conf/web.xml
    <session-config>        <session-timeout>30</session-timeout>    </session-config>

4)它这样使用实现的原理。(为什么可以这么用?)

  HttpSession在服务器中,为浏览器创建独一无二的内存空间,在其中保存了会话相关的信息。服务器创建session出来后,会把session的id号,以cookie的形式回写给客户机,这样,只要客户机的浏览器不关,再去访问服务器时,都 会带着session的id号去,服务器发现客户机浏览器带session id过来了,就会使用内存中与之对应的session为之服务。如果要问我为什么,我也不知道啊!

(三)ServletRequest域(request域)

1)作用域的实际大小。(是什么?)

  ServletRequset域是:整个请求链(请求转发也存在)。

  数据产生之后,只需要使用一次,这种情况下请使用ServletRequset域。

 4개 도메인 중 세 번째로 큰 도메인입니다.

2) 범위의 역할. (무슨 용도인가요?)

요청 체인 전반에 걸쳐 데이터를 공유합니다.

가장 일반적으로 사용됩니다. 서블릿에서 처리된 데이터는 표시를 위해 JSP로 전달됩니다. 이때 매개변수는 ServletRequset 필드에 배치할 수 있습니다. 가져왔다.

3) 스코프를 사용하는 방법. (사용방법은?)

a) 클라이언트 정보를 얻는 방법
getRequestURL 메소드는 클라이언트가 요청하면 전체 URL을 반환합니다.
  getRequestURI 메소드는 요청 라인의 리소스 이름 부분을 반환합니다.
  getQueryString 메소드는 요청 라인의 매개변수 부분을 반환합니다.
getRemoteAddr 메소드는 요청한 클라이언트의 IP 주소를 반환합니다.
getRemoteHost 메소드는 요청한 클라이언트의 전체 호스트 이름을 반환합니다.
getRemotePort 메소드는 클라이언트가 사용하는 네트워크 포트 번호를 반환합니다.
getLocalAddr 메소드는 WEB 서버의 IP 주소를 반환합니다.
GetLocalName 메소드 는 웹 서버의 호스트 이름을 반환합니다.
getMethod는 클라이언트 요청 메소드를 가져옵니다.
b) 클라이언트 요청 헤더를 가져옵니다.
getHead er(문자열 이름) 메소드
  getHeaders(문자열 이름) 메소드
  getHeaderNames 메소드
c) 클라이언트 요청 매개변수 가져오기(클라이언트가 제출한 데이터)
  getParameter(name) method
  getParameterValues(String name) method
  getParameterNames method
  getParameterMap method

4) 이와 같은 구현 원리를 사용합니다. (왜 이렇게 쓸 수 있는 걸까요?)

서비스 메소드가 호출되기 전에 서버에서 생성되어 서비스 메소드에 전달됩니다. 전체 요청이 종료되고 요청 수명이 종료됩니다.

 

(四)PageContext域(page域)

1)作用域的实际大小。(是什么?)

  PageContext域的作用范围是:整个JSP页面。

  它是四个域中范围最小的一个域。

2)  作用域的作用。(有什么用?)  
  a) 它可以获取其它八大隐式对象,可以认为它是一个入口对象。

  b) 获取其它所有域中的数据。

  c) 跳转到其它资源。其身上提供了forword和sendRedirect方法,简化了转发和重定向的操作。 

3)怎么使用这些作用域。(怎么用?)

  以下以一个简单的JSP页面程序为例:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><title>pageContext对象_例1</title></head><body><br><%//使用pageContext设置属性,该属性默认在page范围内
pageContext.setAttribute("name","地球");
request.setAttribute("name","太阳系");
session.setAttribute("name","银河系");//session.putValue("name","麦哲伦系");
application.setAttribute("name","宇宙");%>page设定的值:<%=pageContext.getAttribute("name")%><br>request设定的值:<%=pageContext.getRequest().getAttribute("name")%><br>session设定的值:<%=pageContext.getSession().getAttribute("name")%><br>application设定的值:<%=pageContext.getServletContext().getAttribute("name")%><br>范围1内的值:<%=pageContext.getAttribute("name",1)%><br>范围2内的值:<%=pageContext.getAttribute("name",2)%><br>范围3内的值:<%=pageContext.getAttribute("name",3)%><br>范围4内的值:<%=pageContext.getAttribute("name",4)%><br><!--从最小的范围page开始,然后是reques、session以及application--><%pageContext.removeAttribute("name",3);%>pageContext修改后的session设定的值:<%=session.getValue("name")%><br><%pageContext.setAttribute("name","宇宙",4);%>pageContext修改后的application设定的值:<%=pageContext.getServletContext().getAttribute("name")%><br>值的查找:<%=pageContext.findAttribute("name")%><br>属性name的范围:<%=pageContext.getAttributesScope("name")%><br></body></html>

显示结果:

page设定的值:地球
request设定的值:太阳系
session设定的值:银河系
application设定的值:宇宙
范围1内的值:地球
范围2内的值:太阳系
范围3内的值:银河系
范围4内的值:宇宙
pageContext修改后的session设定的值:nullpageContext修改后的application设定的值:宇宙
值的查找:地球
属性name的范围:1

4)它这样使用实现的原理。(为什么可以这么用?)

 pageContext 객체, 이 객체는 주로 JSP 간의 공유 데이터에 액세스하는 데 사용됩니다. JSP에 요청이 있을 때 시작되고 응답이 완료되면 소멸됩니다.

위 내용은 Java의 4가지 주요 도메인(그림 및 텍스트)에 대한 가장 완전한 요약의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.