1. Erläuterung von ServletConfig
1.1. Konfigurieren Sie die Servlet -Initialisierungsparameter
In der Konfigurationsdatei des Servlets web.xml können Sie eine oder mehrere <init-param> Tags verwenden, um einige Initialisierungsparameter für das Servlet zu konfigurieren.
Zum Beispiel:
<servlet> <Servlet-name> servletConfigDemo1 </servlet-name> <Servlet-Class> gacl.servlet.study.servletConfigDemo1 </Servlet-Class> <!-Konfigurieren Sie die Initialisierungsparameter des ServletConfigDemo1-> <init-Param> <param-name> name </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</param-value> </init-param></servlet>
1.2. Holen Sie sich die Initialisierungsparameter des Servlets über ServletConfig
Wenn das Servlet die Initialisierungsparameter konfiguriert hat, enthält der Webcontainer diese Initialisierungsparameter automatisch in das ServletConfig -Objekt beim Erstellen des Servlet -Instanzobjekts und übergeben das ServletConfig -Objekt beim Aufrufen der Init -Methode des Servlets an das Servlet. Darüber hinaus können wir die Initialisierungsparameterinformationen des aktuellen Servlets über das ServletConfig -Objekt erhalten.
Zum Beispiel:
Paket gacl.servlet.study; import Java.io.ioxception; import Java.util.enumeration; import Javax.servlet.servletConfig; import Javax.servlet.servletException; importieren javax.servlet.http.httplet; javax.servlet.http.httpServletRequest; import javax.servlet.http.httpsertResponse; public class ServletConFigDemo1 erweitert HttpServlet { / *** Define servletConfig Objekt, um die konfigurierten Initialisierungsparameter* / private ServletConfig -Konfiguration zu empfangen; /** * Wenn das Servlet -Initialisierungsparameter konfiguriert wird, wenn der Webcontainer Servlet -Instanzobjekte erstellt, werden diese Initialisierungsparameter automatisch in das ServletConfig -Objekt eingebunden und wenn die Init -Methode des Servlets aufgerufen wird, * Übergeben Sie das ServletConfig -Objekt an den Servlet. Darüber hinaus kann der Programmierer die Initialisierungsparameterinformationen des aktuellen Servlets über das ServletConfig -Objekt erhalten. */ @Override public void init (servletConfig config) löst ServletException {this.config = config; } public void dodget (httpServletRequest -Anforderung, httpServletResponse -Antwort) löst ServletException aus, iOException {// den Paramval der Initialisierungsparameter -String abrufen in web.xml = this this.config.getInitParameter ("Name"); // Die spezifizierte Initialisierungsparameter -Antwort (Parameter); response.getWriter (). print ("<hr/>"); // Alle Initialisierungsparameter Enumeration <string> e = config.GetInitParameternames () erhalten; while (e.hasmoreElements ()) {String name = e.NextElement (); String value = config.GetInitParameter (Name); Antwort.getWriter (). print (name + "=" + value + "<br/>"); }} public void dopost (httpServletRequest -Anforderung, httpServletResponse -Antwort) löst ServletException aus, IOException {this.doget (request, Antwort); }}Die Betriebsergebnisse sind wie folgt:
2. ServletContext -Objekt
Wenn der Webcontainer gestartet wird, wird ein entsprechendes ServletContext -Objekt für jede Webanwendung erstellt, die die aktuelle Webanwendung darstellt.
Das ServletConfig -Objekt behält einen Verweis auf das ServletContext -Objekt bei. Beim Schreiben eines Servlets können Entwickler die Methode servletConfig.getServletContext über die methode servletconfig.getServletContext erhalten.
Da alle Servlets in einer Webanwendung das gleiche ServletContext -Objekt teilen, kann die Kommunikation zwischen Servlet -Objekten über ServletContext -Objekte erreicht werden. ServletContext -Objekte werden normalerweise auch als Kontextdomänenobjekte bezeichnet.
3. Anwendung von ServletContext
3.1. Mehrere Servlets realisieren die Datenaustausch über das ServletContext -Objekt
Beispiel: ServletContextDemo1 und ServletContextDemo2 Datenfreigabe über das ServletContext -Objekt realisieren
Paket gacl.servlet.study; import Java.io.ioException; import Javax.servlet.servletContext; import Javax.servlet.servletException; import Javax.servlet.http.httplet; import Javax.servlet.http.httpletrequest; javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class ServletContextDemo1 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String data = "XDP_GACL"; /*** Das ServletConfig -Objekt behält den Verweis auf das ServletContext -Objekt bei. Wenn Entwickler Servlets schreiben, können * die Methode servletConfig.getServletContext über die Methode servletConfig.getServletContext erhalten. */ServletContext context = this.getServletConfig (). GetServletContext (); // ServletContext -Objekt context.setAttribute ("Daten", Daten); // Daten in ServletContext -Objekt speichern} public void dopost (httpServletRequest -Anforderung, HttpServletResponse -Antwort) löst ServletException, IOException {dodget (Anfrage, Antwort) aus; }} Paket gacl.servlet.study; import Java.io.ioException; import Javax.servlet.servletContext; import Javax.servlet.servletException; import Javax.servlet.http.httplet; import Javax.servlet.http.httpletrequest; javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class ServletContextDemo2 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ServletContext context = this.getServletContext (); String data = (String) context.getAttribute ("Daten"); // Daten aus der servletContext -Objektantwort.getWriter (). Print ("data ="+data); } public void dopost (httpServletRequest Request, httpServletResponse -Antwort) löst ServletException aus, ioException {dodget (request, response); }}Erst einen ServletContextDemo1 ausführen, die Datendaten in das ServletContext -Objekt speichern und dann ServletContextDemo2 ausführen, um Daten aus dem ServletContext -Objekt zu extrahieren, damit die Datenfreigabe realisiert wird, wie in der folgenden Abbildung gezeigt:
3.2. Rufen Sie die Initialisierungsparameter der Webanwendung ab
Verwenden Sie das <context-Param> -Tag in der Datei web.xml, um die Initialisierungsparameter der Webanwendung wie folgt zu konfigurieren:
<? 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-/dopp-/dopp-/dopp-nam/dopp-nam/dopp-nam/dopp-nam/dopp-nam/dopp-d.-d.-d.-d. Konfigurieren Sie Initialisierungsparameter der Webanwendung-> <context-param
Holen Sie sich die Initialisierungsparameter der Webanwendung, der Code lautet wie folgt:
Paket gacl.servlet.study; import Java.io.ioException; import Javax.servlet.servletContext; import Javax.servlet.servletException; import Javax.servlet.http.httplet; import Javax.servlet.http.httpletrequest; javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class ServletContextDemo3 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ServletContext context = this.getServletContext (); // Die Initialisierungsparameter des gesamten Website -String -String -contextinitparam = context.getInitParameter ("url") abrufen; response.getWriter (). print (contextinitparam); } public void dopost (httpServletRequest Request, httpServletResponse -Antwort) löst ServletException aus, ioException {dodget (request, response); }}Auslaufergebnisse:
3.3. Verwenden Sie ServletContext, um die Anforderungsweiterleitung zu implementieren
ServletContextDemo4
Paket gacl.servlet.study; import Java.io.ioxception; import Java.io.printwriter; import Javax.servlet.requestDispatcher; Javax.servlet.servletContext; import Javax.Servlet.ServletExcept; javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class ServletContextDemo4 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse Antwort) löst ServletException aus, iOException {String data = "<h1> <font color = 'rot'> abcdefghjkl </font> </h1>"; response.getOutputStream (). Write (data.getBytes ()); ServletContext context = this.getServletContext (); // servletContext -Objekt RequestDispatcher rd = context.getRequestDispatcher ("/servletContextDemo5"); // Anforderungsweiterungsobjekt (RequestDispatcher) rd.forward (Request Request); Dopost (httpServletRequest -Anforderung, httpServletResponse -Antwort) löst ServletException aus, ioException {}} ServletContextDemo5
Paket gacl.servlet.study; import Java.io.ioxception; import Javax.servlet.servletException; import Javax.servlet.http.httpServlet; importieren javax.servlet.http.httpletRequest; ServletContextDemo5 erweitert HttpServlet (public void dodget (httpServletRequest -Anforderung, httpServletResponse -Antwort), die servletException, ioException {response.getOutputStream (). Schreiben ("servletDemo5" .GetBytes (); } public void dopost (httpServletRequest Request, httpServletResponse -Antwort) löst ServletException aus, ioException {this.doget (Request, Antwort); }}Auslaufergebnisse:
Der Zugriff ist servletContextDemo4, der Browser zeigt jedoch den Inhalt von ServletContextDemo5 an. Dies ist die Verwendung von ServletContext zur Implementierung der Anforderungsweiterung.
3.4. Verwenden Sie das ServletContext -Objekt, um Ressourcendateien zu lesen
Die Projektverzeichnisstruktur lautet wie folgt:
CODE -Beispiel: Verwenden Sie den ServletContext, um Ressourcendateien zu lesen
Paket gacl.servlet.study; import Java.io.fileinputstream; import Java.io.filenotfoundException; import Java.io.ioException; import Java.io.inputStream; importieren java.text.messageformat; importieren java.util.propties; javax.servlet.http.httpServlet; importieren javax.servlet.http.httpServletRequest; import Javax.servlet.http.httpServletRePletRePletRePletRePletResponse;/** * Verwenden Sie servletContext, um die Ressourcendateien zu lesen. void dodget (httpServletRequest request, httpServletResponse-Antwort) löst ServletException aus, ioException { /*** response.setContentType ("text /html; charset = utf-8"); Ziel ist es, den Browser mit UTF-8 zu dekodieren. * Auf diese Weise gibt es keinen chinesischen verstümmelten Code */ response.setheader ("Content-Typ", "text/ html; charset = utf-8"); ReadSrcDirPropcfgFile (Antwort); // Lesen Sie die Reaktion der Eigenschaftenkonfiguration Datei.getWriter (). println ("<hr/>"); ReadWebrootDirPropcfgFile (Antwort); // Lesen Sie die Reaktion der Eigenschaftenkonfiguration Datei.getWriter (). println ("<hr/>"); ReadWebrootDirPropcfgFile (Antwort); // Lesen Sie die Reaktion der Eigenschaftenkonfiguration Datei.getWriter (). println ("<hr/>"); ReadPropcfgFile (Antwort); // Lesen Sie die Konfigurationsdatei db3.Properties im DB.Config -Paket im SRC -Verzeichnis -Antwort.getWriter (). println ("<hr/>"); ReadPropcfgFile2 (Antwort); // Lesen Sie die Konfigurationsdatei db4.Properties im GACL.Servlet.study -Paket im SRC -Verzeichnis}/** * lesen Sie die DB4.Properties -Konfigurationsdatei in der gaCl.Servlet.study -Paket in der Src -Direktorie * @param response * @throws ioexceptory void void void void void Void void void void void vaid ReadPropcfgFile2 (httpServletResponse-Antwort) löst IOException {InputStream in = this.getServletContext (). Eigenschaften prop = neue Eigenschaften (); prop.load (in); String driver = prop.getProperty ("Treiber"); String url = prop.getProperty ("url"); String username = prop.getProperty ("Benutzername"); String password = prop.getProperty ("Passwort"); response.getWriter (). println ("Lesen Sie die Konfigurationsdatei db4.Properties im GACL.Servlet.study -Paket im SRC -Verzeichnis:"); response.getWriter (). println (messageFormat.format ("treiber = {0}, url = {1}, username = {2}, passwart = {3}", Treiber, URL, Benutzername, Passwort)); } /** * Lesen Sie die Konfigurationsdatei db3.Properties im DB.Config -Paket im SRC -Verzeichnis * @param response * @throws filenotfoundException * @Throws ioException * /privat void void readPropcfgFile (httpServletResponus). this.getServletContext (). getRealPath ("/webinf/classes/db/config/db3.properties"); InputStream in = neuer FileInputStream (Pfad); Eigenschaften prop = neue Eigenschaften (); prop.load (in); String driver = prop.getProperty ("Treiber"); String url = prop.getProperty ("url"); String username = prop.getProperty ("Benutzername"); String password = prop.getProperty ("Passwort"); response.getWriter (). println ("Lesen Sie die Konfigurationsdatei db3.Properties im DB.Config -Paket im SRC -Verzeichnis:"); response.getWriter (). println (messageFormat.format ("treiber = {0}, url = {1}, username = {2}, passwart = {3}", Treiber, URL, Benutzername, Passwort)); } /*** Lesen Sie die Eigenschaftenkonfigurationsdatei im Webroot -Verzeichnis über das ServletContext -Objekt* @param Antwort* @throws ioException* /private void readwebrootdirpropcfgFile (httpServletRespectRection). Verzeichnis*/ inputStream in = this.getServletContext (). getResourceAsStream ("/ db2.Properties"); Eigenschaften prop = neue Eigenschaften (); prop.load (in); String driver = prop.getProperty ("Treiber"); String url = prop.getProperty ("url"); String username = prop.getProperty ("Benutzername"); String password = prop.getProperty ("Passwort"); response.getWriter (). println ("Lesen Sie die Konfigurationsdatei db2.Properties im Webroot -Verzeichnis:"); response.getWriter (). print (messageFormat.format ("treiber = {0}, url = {1}, username = {2}, password = {3}", Treiber, URL, Benutzername, Passwort)); } / *** Lesen Sie die Eigenschaftenkonfigurationsdatei im SRC -Verzeichnis über das ServletContext -Objekt* @param Antwort* @throws ioException* / private void readSrcDirPropcfgFile (httpServletResponse -Antwort). = this.getServletContext (). getResourceAsStream ("/webinf/classes/db1.properties"); Eigenschaften prop = neue Eigenschaften (); prop.load (in); String driver = prop.getProperty ("Treiber"); String url = prop.getProperty ("url"); String username = prop.getProperty ("Benutzername"); String password = prop.getProperty ("Passwort"); Antwort.getWriter (). println ("Lesen Sie die Konfigurationsdatei db1.Properties im SRC -Verzeichnis:"); response.getWriter (). println (messageFormat.format ("treiber = {0}, url = {1}, username = {2}, passwart = {3}", Treiber, URL, Benutzername, Passwort)); } public void dopost (httpServletRequest Request, httpServletResponse -Antwort) löst ServletException aus, ioException {this.doget (Request, Antwort); }}Die Betriebsergebnisse sind wie folgt:
CODE -Beispiel: Lesen Sie Ressourcendateien mit dem Klassenloader
Paket gacl.servlet.study; import Java.io.FileOutputStream; Import Java.io.ioxception; import Java.io.inputstream; Import Java.io.outputStream; importieren java.text.messageformat; importieren java.util.properties; javax.Servlet.Servlet.Servlet.Servlet.Servlet.Servlet.Servlet.Servlet.Servlet.Servlet.Servlet.Servlet.Servlet.Servlet.Servlet.Servlet.Servlet.Servlet.Servlet. javax.servlet.http.httpServlet; importieren javax.servlet.http.httpServletRequest; import Javax.Servlet.http.httpServletRetRetReTREPLETREPLET;/*** Lesen Sie Ressourcen -Dateien mit Klassenlader* Anmerkungen zu Reading -Mado -Mado -Madocen. gaCl * * */public class ServletContextDemo7 erweitert HttpServlet {public void dagget (httpServletRequest Request, httpServletResponse-Antwort). Ziel ist es, den Browser mit UTF-8 zu steuern. * Dies führt nicht dazu, dass chinesische verstümmelt */ response.setheader ("Content-Typ", "text/ html; charset = utf-8"); Test1 (Antwort); Antwort.getWriter (). println ("<hr/>"); test2 (Antwort); Antwort.getWriter (). println ("<hr/>"); // Test3 (); test4 (); } /** * Ressourcendateien unter dem ClassPath lesen * @param Antwort * @throws ioException * /private void test1 (httpServletResponse -Antwort) löst IOException aus {// den Klassenlader abrufen, der den aktuellen Klassenlader loader = servletContextDemo7.class.getClasLader lädt. // Verwenden Sie den Klassenloader, um die Konfigurationsdatei db1.Properties im SRC -Verzeichnis inputStream in = lader.getResourceAsStream ("DB1.Properties") zu lesen. Eigenschaften prop = neue Eigenschaften (); prop.load (in); String driver = prop.getProperty ("Treiber"); String url = prop.getProperty ("url"); String username = prop.getProperty ("Benutzername"); String password = prop.getProperty ("Passwort"); response.getWriter (). println ("Klassenloader verwenden, um die Konfigurationsdatei db1.Properties im SRC -Verzeichnis zu lesen:"); response.getWriter (). println (messageFormat.format ("treiber = {0}, url = {1}, username = {2}, passwart = {3}", Treiber, URL, Benutzername, Passwort)); } /** * Ressourcendateien unter dem Klassenpfad und dem Paket lesen * @param Antwort * @throws ioException * /private void test2 (httpServletResponse -Antwort) löst IOException aus {// den Klassenlader, der den aktuellen Klassenloader laden, den aktuellen Klassenloader = servletContextDemo7.class.getClasses lädt. // Verwenden Sie den Klassenloader, um die Konfigurationsdatei db4.Properties im Paket von GACl.Servlet.study im SRC -Verzeichnis InputStream in = lader.getResourceAsStream ("GaCl/Servlet/Studie/DB4.Properties") zu lesen. Eigenschaften prop = neue Eigenschaften (); prop.load (in); String driver = prop.getProperty ("Treiber"); String url = prop.getProperty ("url"); String username = prop.getProperty ("Benutzername"); String password = prop.getProperty ("Passwort"); response.getWriter (). println ("Klassenloader verwenden, um die Konfigurationsdatei db4.Properties im GACL.Servlet.study -Paket im SRC -Verzeichnis zu lesen:"); response.getWriter (). println (messageFormat.format ("treiber = {0}, url = {1}, username = {2}, passwart = {3}", Treiber, URL, Benutzername, Passwort)); } / *** Hinweise zum Lesen von Ressourcendateien über Klassenlader: Es ist nicht geeignet, große Dateien zu laden, ansonsten verursacht es JVM -Speicherüberlauf* / public void test3 () { / *** 01.Avi ist eine Datei mit mehr als 150 M. Es verursacht Speicherüberlauf, wenn diese große Datei mit Klassenlader gelesen wird. ServletContextDemo7.class.getClassloader (). GetResourceAsStream ("01.avi"); System.out.println (in); }/*** Lesen Sie 01.avi und kopieren Sie in E:/Root -Verzeichnis* 01.avi -Datei zu groß. Sie können nur ServletContext verwenden, um* @throws ioException*/public void test4 () zu lesen. this.getServletContext (). getRealPath ("/webinf/classes/01.avi"); /** * path.lastIndexof ("//") + 1 ist eine sehr wunderbare Möglichkeit, es zu schreiben. Byte Buffer [] = neues Byte [1024]; int len = 0; OutputStream out = new FileOutputStream ("e: //" + Dateiname); while ((len = in.read (puffer))> 0) {out.write (puffer, 0, len); } out.close (); in.close (); } public void dopost (httpServletRequest Request, httpServletResponse -Antwort) löst ServletException aus, ioException {this.doget (Request, Antwort); }}Die Betriebsergebnisse sind wie folgt:
V.
Bei Daten, die sich nicht häufig ändern, kann im Servlet ein angemessener Cache -Zeitwert festgelegt werden, um zu vermeiden, dass der Browser häufig Anforderungen an den Server sendet und die Leistung des Servers verbessert. Zum Beispiel:
Paket gacl.servlet.study; import Java.io.ioxception; import Javax.servlet.servletException; import Javax.servlet.http.httpServlet; importieren javax.servlet.http.httpletrequest; javax.servlet.http.httpServletResponse; public class servletDemo5 erweitert HttpServlet (public void dagget (httpServletRequest), httpServletResponse -Antwort) Ausgewirktenexception, IOException {String data = "abcddfesfasfasfasfasfasfsfsadf"; / *** Legen Sie einen angemessenen Daten -Cache -Zeitwert fest, um häufige Anforderungen des Browsers zu vermeiden, um die Serverleistung zu verbessern response.getOutputStream (). Write (data.getBytes ()); } public void dopost (httpServletRequest Request, httpServletResponse -Antwort) löst ServletException aus, ioException {this.doget (Request, Antwort); }}Das obige dreht sich alles um diesen Artikel, und ich hoffe, dass es für alle hilfreich sein wird, die Javaweb -Servlet -Entwicklungstechnologie zu beherrschen.