1. ServletConfig의 설명
1.1. 서블릿 초기화 매개 변수를 구성하십시오
Servlet의 구성 파일 Web.xml에서 하나 이상의 <Init-Param> 태그를 사용하여 서블릿의 일부 초기화 매개 변수를 구성 할 수 있습니다.
예를 들어:
<Servlet> <servlet-name> servletconfigdemo1 </servlet-name> <servlet-class> gacl.servlet.study.servletconfigdemo1 </servlet-class> <!-servletconfigdemo1-> init-param> <param-name>의 초기화 매개 변수를 구성하십시오. <Param-value> gaCl </param-value> </init-param> <init-param> <param-name> password </param-name> <param- value> 123 </param-value> </init-param> <init-param> <param-name> charset </param-name> <param-value> utf-8 </regfalue> </regvalue>
1.2. ServletConfig를 통해 서블릿의 초기화 매개 변수를 가져옵니다
서블릿에 초기화 매개 변수가 구성된 경우, 웹 컨테이너는 Servlet 인스턴스 개체를 작성할 때 이러한 초기화 매개 변수를 ServletConfig 객체로 자동 캡슐화하고 Servlet의 Init 메소드를 호출 할 때 ServletConfig 객체를 서블릿으로 전달합니다. 또한 ServletConfig 객체를 통해 현재 서틀의 초기화 매개 변수 정보를 얻을 수 있습니다.
예를 들어:
패키지 gacl.servlet.study; import java.io.ioexception; import java.util.enumeration; import javax.servlet.servletconfig; import javax.servlet.servletexception; import javax.servlet.http.httpservlet; javax.servlet.http.htttp.httpservletrequest; import javax.servlet.http.htttp.httpservletresponse; public class servletconfigdemo1 확장 httpservlet { / *** 정의 초기화 매개 변수* / private servletconfig config; /** * 서블릿이 초기화 매개 변수를 구성 할 때 웹 컨테이너가 서블릿 인스턴스 객체를 생성 할 때 *이 초기화 매개 변수를 ServletConfig 개체에 자동으로 캡슐화하고 서블릿의 초기 메소드가 호출되면 ServletConfig 오브젝트를 서블릿으로 전달합니다. 또한 프로그래머는 ServletConfig 객체를 통해 현재 서틀의 초기화 매개 변수 정보를 얻을 수 있습니다. */ @override public void init (servletconfig config) servletexception {this.config = config; } public void doget (httpservletrequest 요청, httpservletreponse responsk)은 servletexception, ioexception {// web.xml = this.config.getinitparameter ( "name")에서 구성된 초기화 매개 변수 문자열 파라 밸브를 가져옵니다. response.getWriter (). print ( "<hr/>"); // 모든 초기화 매개 변수 열거 <string> e = config.getInitParameterNames (); while (e.hasmoreElements ()) {문자열 이름 = e.nextElement (); 문자열 값 = config.getInitParameter (이름); response.getWriter (). print (name + "=" + value + "<br/"); }} public void dopost (httpservletrequest 요청, httpservletreponse 응답) servletexception, ioexception {this.doget (요청, 응답); }}작업 결과는 다음과 같습니다.
2. ServletContext 객체
웹 컨테이너가 시작되면 각 웹 애플리케이션에 해당하는 ServletContext 객체를 생성하여 현재 웹 응용 프로그램을 나타냅니다.
ServletConfig 객체는 ServletContext 객체에 대한 참조를 유지합니다. Servlet을 작성할 때 개발자는 ServletConfig.getServletContext 메소드를 통해 ServletConfig.getServletContext 메소드를 얻을 수 있습니다.
웹 응용 프로그램의 모든 서블릿은 동일한 ServletContext 객체를 공유하므로 ServletContext 객체를 통해 서블릿 객체 간의 통신을 달성 할 수 있습니다. ServletContext 객체는 일반적으로 컨텍스트 도메인 객체라고도합니다.
3. ServletContext의 적용
3.1. 여러 서블릿은 ServletContext 객체를 통해 데이터 공유를 실현합니다
예 : ServletContextDemo1 및 ServletContextDemo2 ServletContext 객체를 통한 데이터 공유 실현
패키지 gacl.servlet.study; import java.io.ioexception; import javax.servlet.servletcontext; import javax.servlet.servletexception; import javax.servlet.http.httpservlet; import javax.servlet.httpervletrequest; import; javax.servlet.http.httpervletrequest; import javax.servlet.http.htttp.httpervletresponse; public class servletcontextdemo1 httpservlet {public void doget (httpservletrequest request, httpservletreponse 응답) {servletexmence {ioxemence {httpservlecemence {httpservlecement replesion). "XDP_GACL"; /*** ServletConfig 객체는 ServletContext 객체에 대한 참조를 유지합니다. 개발자가 Servlets를 작성하면 servletconfig.getServletContext 메서드를 통해 servletconfig.getServletContext 메서드를 얻을 수 있습니다. */servletcontext context = this.getServletConfig (). getServletContext (); // servletContext 객체 컨텍스트 get get get atattribute ( "data", data); // servletContext 객체에 데이터를 저장} public void dopost (httpservletrequest request, httpservletResponse 응답) servletexception, ioexception {doget (요청, 응답); }} 패키지 gacl.servlet.study; import java.io.ioexception; import javax.servlet.servletcontext; import javax.servlet.servletexception; import javax.servlet.http.httpservlet; import javax.servlet.httpervletrequest; import; javax.servlet.http.httpervletrequest; import javax.servlet.http.htttp.httpervletresponse; public class servletcontextdemo2 확장 httpservlet {public void doget (httpservletrequest 요청, httpservletcection {servletcence {httpervletcence {httpservletcection {httpservletcone reponster)). this.getServletContext (); 문자열 data = (string) context.getAttribute ( "data"); // servletContext 객체 reponse.getWriter (). print ( "data ="+data); } public void dopost (httpservletRequest 요청, httpservletResponse 응답) servletexception, ioexception {doget (요청, 응답); }}첫 번째 ServletContextDemo1을 실행하고 데이터 데이터를 ServletContext 객체에 저장 한 다음 ServletContextDemo2를 실행하여 ServletContext 객체에서 데이터를 추출하여 아래 그림과 같이 데이터 공유가 실현됩니다.
3.2. 웹 응용 프로그램의 초기화 매개 변수를 얻습니다
web.xml 파일의 <countxt-param> 태그를 사용하여 다음과 같이 웹 응용 프로그램의 초기화 매개 변수를 구성하십시오.
<? xml version = "1.0"encoding = "utf-8"?> <web-app version = "3.0"xmlns = "http://java.sun.com/xml/xml/ns/javaee"xmlns : xsi = "http://www.w3.org/2001/xmlschema-instance. xsi : schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <! 웹 애플리케이션의 초기화 매개 변수 구성-> <context-param> <param-name> url </param-name> <param- value> jdbc : mysql : // localhost : 3306/test </param-value> </context-param> <welcome-file-list> <welcome-file> indexp </weel-file> </weel-file>
웹 응용 프로그램의 초기화 매개 변수를 가져 오면 코드는 다음과 같습니다.
패키지 gacl.servlet.study; import java.io.ioexception; import javax.servlet.servletcontext; import javax.servlet.servletexception; import javax.servlet.http.httpservlet; import javax.servlet.httpervletrequest; import; javax.servlet.http.httpervletrequest; import javax.servlet.http.htttp.httpervletresponse; public class servletcontextdemo3 확장 httpservlet {public void doget (httpservletrequest request, httpservletception {servletexcemence {iooxemence {httpservletcection {httpservletcone responsk)). this.getServletContext (); // 전체 웹 사이트의 초기화 매개 변수를 가져옵니다. 문자열 contextInitParam = context.getInitParameter ( "url"); response.getWriter (). print (contextInitParam); } public void dopost (httpservletRequest 요청, httpservletResponse 응답) servletexception, ioexception {doget (요청, 응답); }}실행 결과 :
3.3. ServletContext를 사용하여 요청 전달을 구현하십시오
ServletContextDemo4
패키지 gacl.servlet.study; import java.io.ioexception; import java.io.printwriter; import javax.servlet.requestdispatcher; import javax.servlet.servletcontext; import javax.servlet.servletexception; import javax.servlet.httpervlet; javax.servlet.http.httpervletrequest; import javax.servlet.http.htttp.httpervletrequest; import javax.servlet.http.http.htttp.htttp.htttp.httpervletresponse; public class servletcontextdemo4 확장 httpservlet {httppletrperconse (httppesperconse) (httppesperconse). 응답)은 servletexception, ioexception {문자열 data = "<h1> <font color = 'red'> abcdefghjkl </font> </h1>"; response.getOutputStream (). 쓰기 (data.getBytes ()); servletcontext context = this.getServletContext (); // servletContext 객체 requestDispatcher rd = context.getRequestDispatcher ( "/servlet/servlet/servletcontextDemo5"); // 요청 전달 (요청, 응답)을 구현하는 방법을 구현하기위한 요청 전달을 구현합니다. dopost (httpservletrequest request, httpservletresponse 응답) servletexception, ioexception {}}} ServletContextDemo5
패키지 gacl.servlet.study; import java.io.ioexception; import javax.servlet.servletxception; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.httpp.httpperpronge; ServletContextDemo5는 httpservlet {public void doget (httpservletrequest request, httpservletresponse response)를 servletexception, ioexception {response.getoutputstream (). 쓰기 ( "servletdemo5".getBytes ()); } public void dopost (httpservletrequest 요청, httpservletResponse 응답) servletexception, ioexception {this.doget (요청, 응답); }}실행 결과 :
액세스는 ServletContextDemo4이지만 브라우저에는 ServletContextDemo5의 내용이 표시됩니다. 요청 전달을 구현하기 위해 ServletContext를 사용하는 것입니다.
3.4. ServletContext 객체를 사용하여 리소스 파일을 읽으십시오
프로젝트 디렉토리 구조는 다음과 같습니다.
코드 예 : ServletContext를 사용하여 리소스 파일을 읽습니다
패키지 gacl.servlet.study; import java.io.fileInputStream; import java.io.filenotfoundException; import java.io.ioexception; import java.io.inputstream; import java.text.messageformat; import java.util.properties; import javax.servlet.servletexcement; javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * Use servletContext to read resource files* * @author gacl * */public class ServletContextDemo6 extends HttpServlet { public void doget (httpservletrequest 요청, httpservletreponse response)는 servletexception, ioexception { /*** response.setContentType ( "text /html; charset = utf-8"); 목적은 UTF-8을 사용하여 브라우저를 디코딩하기 위해 브라우저를 제어하는 것입니다. * 이런 식으로 중국어가없는 코드 */ response.setheader ( "content-type", "text/ html; charset = utf-8"); readsrcdirpropcfgfile (response); // 속성 구성 파일 응답을 읽습니다. readwebrootdirpropcffile (응답); // 속성 구성 파일 응답을 읽습니다. readwebrootdirpropcffile (응답); // 속성 구성 파일 응답을 읽습니다. readpropcfgfile (response); // src directory response.getwriter (). println ( "<hr/>")의 db.config 패키지에서 db3.properties 구성 파일을 읽습니다. readpropcfgfile2 (response); // src directory의 gacl.servlet.study 패키지에서 db4.properties 구성 파일을 읽으십시오}/** * db4.properties 구성 파일의 구성 파일은 src directory * @param responsk */privelemention */privecement voide */privecement. readPropcfgfile2 (httpservletresponse response)는 ioexception {inputStream in = this.getServletContext (). getResourCeasStream ( "/web-inf/classe/gacl/servlet/study/db4.properties"); 속성 proper = new Properties (); prop.load (in); 문자열 드라이버 = prop.getProperty ( "드라이버"); 문자열 url = prop.getProperty ( "url"); 문자열 username = prop.getProperty ( "사용자 이름"); 문자열 비밀번호 = prop.getProperty ( "password"); Response.getWriter (). println ( "GACL.Servlet.study 패키지의"DB4.Properties 구성 파일 읽기 : "); response.getWriter (). println (messageformat.format ( "driver = {0}, url = {1}, username = {2}, password = {3}", driver, url, username, password); } /** * SRC 디렉토리의 db.config 패키지에서 db3.properties 구성 파일 읽기 * @param 응답 * @throws filenotfoundexception * /private void readpropcfgfile (httpservletresponce response) filenotfoundexception, ioexception get web web web web wew web web exclue get sultice 문자열 path = this.getServletContext (). getRealPath ( "/web-inf/classe/db/config/db3.properties"); inputStream in = new FileInputStream (Path); 속성 proper = new Properties (); prop.load (in); 문자열 드라이버 = prop.getProperty ( "드라이버"); 문자열 url = prop.getProperty ( "url"); 문자열 username = prop.getProperty ( "사용자 이름"); 문자열 비밀번호 = prop.getProperty ( "password"); response.getWriter (). println ( "DB3.Properties 구성 파일 읽기 SRC 디렉토리의 DB.Config 패키지 :"); response.getWriter (). println (messageformat.format ( "driver = {0}, url = {1}, username = {2}, password = {3}", driver, url, username, password); } /*** ServletContext 객체* @param 응답* @throws ioexception* /private void readwebrootdirpropcfgfile (httpservletresponse responsk)을 통해 Webroot 디렉토리의 속성 구성 파일을 읽으십시오. 루트 디렉토리*/ inputStream in = this.getServletContext (). getResourCeasStream ( "/ db2.properties"); 속성 proper = new Properties (); prop.load (in); 문자열 드라이버 = prop.getProperty ( "드라이버"); 문자열 url = prop.getProperty ( "url"); 문자열 username = prop.getProperty ( "사용자 이름"); 문자열 비밀번호 = prop.getProperty ( "password"); Response.getWriter (). println ( "Webroot 디렉토리의 DB2.Properties 구성 파일 읽기 :"); response.getWriter (). print (messageformat.format ( "driver = {0}, url = {1}, username = {2}, password = {3}", driver, url, username, password); } /*** ServletContext 객체* @param 응답* @throws ioexception* /private void readsrcdirpropcfgfile (httpservletresponse responsk)을 통해 src 디렉토리의 속성 구성 파일을 읽으십시오. db1.properties introperties intr. properties in the src interty에서 ioexception을 읽습니다. inputStream in = this.getServletContext (). getResourCeasStream ( "/web-inf/classs/db1.properties"); 속성 proper = new Properties (); prop.load (in); 문자열 드라이버 = prop.getProperty ( "드라이버"); 문자열 url = prop.getProperty ( "url"); 문자열 username = prop.getProperty ( "사용자 이름"); 문자열 비밀번호 = prop.getProperty ( "password"); response.getWriter (). println ( "SRC 디렉토리의 DB1.Properties 구성 파일 읽기 :"); response.getWriter (). println (messageformat.format ( "driver = {0}, url = {1}, username = {2}, password = {3}", driver, url, username, password); } public void dopost (httpservletrequest 요청, httpservletResponse 응답) servletexception, ioexception {this.doget (요청, 응답); }}작업 결과는 다음과 같습니다.
코드 예 : 클래스 로더를 사용하여 리소스 파일을 읽습니다
패키지 gacl.servlet.study; import java.io.fileoutputStream; import java.io.ioexception; import java.io.inputStream; import java.io.outputStream; import java.util.text.messageformat; import java.util.properties; import javax.servletexmence; javax.servlet.http.httpservlet; import javax.servlet.http.htttp.httpservletrequest; import javax.servlet.http.http.httpervletrepsonse;/*** 클래스 로더를 통해 리소스 파일을 읽는 것에 대한 클래스 로더에 대한 리소스 파일을 읽는 데 적합하지 않습니다. GACL * */public class servletcontextDemo7은 httpservlet {public void doget (httpservletrequest request, httpservletreponse responske)을 servletexception, ioexception {/** * response ( "text/html; charset = utf-8"); 목적은 UTF-8으로 해독하기 위해 브라우저를 제어하는 것입니다. * 이로 인해 중국어가없는 경우 */ response.setheader ( "Content-Type", "Text/ Html; charset = utf-8"); test1 (응답); response.getWriter (). println ( "<hr/>"); test2 (응답); response.getWriter (). println ( "<hr/>"); // test3 (); test4 (); } /** * ClassPath에서 리소스 파일 읽기 * @Param 응답 * @Throws IOException * /private void test1 (httpservletResponse 응답) IoException {// 현재 클래스 로더 로더를로드하는 클래스 로더를 가져옵니다. // 클래스 로더를 사용하여 src 디렉토리에서 db1.properties 구성 파일을 읽습니다. inputstream in = loader.getResourceasStream ( "db1.properties"); 속성 proper = new Properties (); prop.load (in); 문자열 드라이버 = prop.getProperty ( "드라이버"); 문자열 url = prop.getProperty ( "url"); 문자열 username = prop.getProperty ( "사용자 이름"); 문자열 비밀번호 = prop.getProperty ( "password"); response.getWriter (). println ( "클래스 로더를 사용하여 src 디렉토리에서 db1.properties 구성 파일을 읽습니다 :"); response.getWriter (). println (messageformat.format ( "driver = {0}, url = {1}, username = {2}, password = {3}", driver, url, username, password); } /** * 클래스 경로 아래에 리소스 파일을 읽습니다. // 클래스 로더를 사용하여 GACL.Servlet.Study 패키지에서 db4.properties 구성 파일을 읽습니다. src directory inputStream in = loader.getResourceasStream ( "gacl/servlet/study/db4.properties"); 속성 proper = new Properties (); prop.load (in); 문자열 드라이버 = prop.getProperty ( "드라이버"); 문자열 url = prop.getProperty ( "url"); 문자열 username = prop.getProperty ( "사용자 이름"); 문자열 비밀번호 = prop.getProperty ( "password"); response.getWriter (). println ( "클래스 로더를 사용하여 SRC 디렉토리의 GACL.Servlet.study 패키지에서 db4.properties 구성 파일을 읽습니다 :"); response.getWriter (). println (messageformat.format ( "driver = {0}, url = {1}, username = {2}, password = {3}", driver, url, username, password); } / *** 클래스 로더를 통한 리소스 파일 읽기에 대한 메모 : 큰 파일을로드하는 데 적합하지 않습니다. 그렇지 않으면 JVM 메모리 오버플로* / public void test3 () { / *** 01.avi가 150 M 이상의 파일을 유발합니다. 클래스 로더를 사용 하여이 큰 파일을 읽을 때 메모리 오버플로를 유발합니다. ServletContextDemo7.class.getClassLoader (). getResourCeasStream ( "01.avi"); System.out.println (in); }/*** 읽기 01.avi 및 e :/root directory* 01.avi 파일에 복사하여 ServletContext를 사용하여 읽기 만하면* @throws ioexception*/public void test4 ()가 ioexception {// path = g :/java 학습 비디오/javaweb 학습 비디오/javaweb/day05 비디오/01.avi//avi stat. this.getServletContext (). getRealPath ( "/web-inf/classe/01.avi"); /** * path.lastIndexof ( "//") + 1은 그것을 쓰는 매우 훌륭한 방법입니다 */string filename = path.substring (path.lastIndexof ( "//") + 1); // 파일 이름 inputStream in = this.getServletCeasStream ( "/web-inf/classs/01.avi"); 바이트 버퍼 [] = 새로운 바이트 [1024]; int len = 0; outputStream out = 새 FileOutputStream ( "e : //" + filename); while ((len = in.read (buffer))> 0) {out.write (buffer, 0, len); } out.close (); 넣다(); } public void dopost (httpservletrequest 요청, httpservletResponse 응답) servletexception, ioexception {this.doget (요청, 응답); }}작업 결과는 다음과 같습니다.
4. 클라이언트 측에서 서블릿의 출력을 캐시합니다.
자주 변경되지 않는 데이터의 경우 브라우저가 서버에 자주 요청을 보내고 서버의 성능을 향상시키지 않도록 서블릿에서 합리적인 캐시 시간 값을 설정할 수 있습니다. 예를 들어:
패키지 gacl.servlet.study; import java.io.ioexception; import javax.servlet.servletxception; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.httpp.httpp.httpp.http.http.http.httppervletrequest.; javax.servlet.http.httpervletresponse; public class servletdemo5 확장 httpservlet {public void doget (httpservletrequest request, httpservletresponse 응답) servletexception, ioexception {문자열 data = "abcdddfwerwesfsadf"; / *** 서버 성능을 향상시키기 위해 브라우저의 빈번한 요청을 피하기 위해 합리적인 데이터 캐시 시간 값 설정* 여기서 데이터 캐시 시간을 1 일*/ respone.setDateHeader ( "Expires", System.CurrentTimeMillis () + 24* 3600* 1000)로 설정하는 것입니다. response.getOutputStream (). 쓰기 (data.getBytes ()); } public void dopost (httpservletrequest 요청, httpservletResponse 응답) servletexception, ioexception {this.doget (요청, 응답); }}위의 내용은이 기사에 관한 모든 것이며, 모든 사람들이 Javaweb Servlet Development 기술을 마스터하는 것이 도움이되기를 바랍니다.