Die Anleitung zum Java Servlet für den Anfänger

View more Tutorials:

1- Die Vorstellung

Das Dokumen wird auf die Basic von ... geschrieben
  • Eclipse 4.6 (NEON)

  • Servlet 3.0

  • Tomcat 8

2- Was ist Servlet

Java Servlet ist ein Programm laufend auf einer Webseite oder dem Server-Applikation (Application Server) und funktioniert als ein Vermittler zwischen eine Anforderung von einem Web-Browser oder HTTP-Client und die Database oder die Applikationen auf dem HTTP Server.

Durch die Benutzung von Servlet können Sie die Input vom Benutzer nach der Website, aus einer Database oder einer anderen Quelle sammeln und erstellen eine dynamische Webseite

3- Der Lebenskreis vom Servlet

Das folgende Foto bezeichnet einen Lebenskreis von einem Servlet. Vom seiner Gebohrenheit, der Behandlung der Anforderung bis zur Zerstörung

Es gibt 5 Schritten

  1. Die Klasse Servlet in der Speicherung laden.
  2. das Objekt Servlet erstellen.
  3. die Aufruf der Methode init() vom Servlet.
  4. Die Aufruf der Methode service() vom Servlet.
  5. Die Aufruf der Methode destroy() vom Servlet.

Der Schritt 1, 2 und 3 werden nur einmal implementiert wenn Servlet zum ersten Mal geladet wird. Standardmäßig werden Servlet nicht geladet bis wenn er eine erste Anforderung des Benutzer bekommt. Sie können zwingen, Servlet Container (Der Enthalter vom Servlet) ladet Servlet beim Starten.

Bước 4 wird mehrmals implementiert, jedeswenn die Anforderung vom Benutzer nach Servlet geschickt wird.
Bước 5 wird implementiert wenn Servlet Container ein  Servlet nicht ladet (unloaded).
Sie können das folgende Foto um den Lebenskreis vom Servlet mehr zu kennen
Wenn die Anforderung (request) vom Benutzer nach Servlet geschickt wird, ruft  Servlet die Methode  service() auf um die Anforderung vom Benutzer zu befriedigen. Service() ruft eine der beiden Methode von doGet() oder  doPost(). In Ihrem Servlet sollen Sie die Methode überschreiben und behandeln
So wenn der Benutzer eine Anforderung nach einem Servlet schicken, wird  Servlet bei der Zeitpunkt von der Anforderung zum ersten Mal erstellt. Gleichzeitig wird die Methode  init() vom Servlet aufgeruft um es zu erstellen.  init() wird nur einziges Mal aufgeruft. Die Methode destroy() ist zur Zerstörung von servlet. Sie wird nur einziges Mal aufgeruft wenn Sie die Applikation-Web undeloy oder Web Server schließen

4- Die Installation vom  Tomcat Web Server

Um mit dem Servlet zu beginnen, sollen Sie Tomcat Web Server herunterladen und mit Eclipse melden. Sie können die Hinweise bei... lesen

5- Die Erstellung vom Web Project mit Servlet

  • File/New/Other
  • Project Name: ServletTutorial
Das ist das erstellte Project
Erstellen Sie die File index.html:
index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

   <h1>Hello World</h1>

</body>
</html>

6- Die Konfiguration vom Eclipse zur Durchführung der Applikation auf Tomcat

Momentan machen wir nichts mit Servlet. Und jetzt konfigurieren wir um die oben Web Applikation zu laufen. Danach beginnen wir mit Servlet.
Auf die eclipse drücken Sie die Rechtsmaustaste ins Project ServletTutorial, wählen Sie Properties:
Wählen Sie den Speicherort Ihres  Tomcat 8 zu gehen
Drücken Sie die Rechtmaustaste ins Project ServletTutorial, wählen Sie "Run As/Run on Server".
Website läuft gerade auf den Browser von  Eclipse.
Grundsatz der Operation:
Wenn Sie den Pfad eingeben
Gibt die Website die Inhalt der Seite index.html zurück. Das ist sehr verständlich

Aber wenn Sie den Pfad eingeben 
Das bedeutet, dass Sie die Seite nicht klar bestimmen. Der Webserver findet die standardmäßige Seite in Karte <welcome-file>, die Sie in web.xml angemeldet haben, um die Daten zurückzugeben
 
Beachten Sie: /ServletTutorial wird als Context-Path genannt, Jede website hat Context-Path, Sie können ihn eine andere Wert konfigurieren oder leer machen. In dem Fall von leer können Sie Ihre Website zugreifen nach der ....
  • http://localhost:8080
  • http://localhost:8080/index.html
Bei der Operation mit Tomcat nimmt es standardmäßig den Name von Project als  Context-Path.
Sehen Sie das folgende Beispiel

7- Einige Klasse zur Teilnahme an der Beispiele

Einige Class nehmen an die nächsten Beispielen des Dokument teil
Constants.java
package org.o7planning.tutorial.beans;

public class Constants {

  public static final String ATTRIBUTE_USER_NAME_KEY ="ATTRIBUTE_USER_NAME_KEY";
   
  public static final String SESSION_USER_KEY ="SESSION_USER_KEY";
   
  public static final String CALLBACK_URL_KEY ="CALLBACK_URL_KEY";
   
}
UserInfo.java
package org.o7planning.tutorial.beans;

public class UserInfo {

   public String userName;
   private int post;
   private String country;
   
   public UserInfo(String userName, String country, int post)  {
       this.userName= userName;
       this.country= country;
       this.post= post;
   }

   public int getPost() {
       return post;
   }

   public void setPost(int post) {
       this.post = post;
   }

   public String getCountry() {
       return country;
   }

   public void setCountry(String country) {
       this.country = country;
   }

   public void setUserName(String userName) {
       this.userName = userName;
   }

   public UserInfo(String userName) {
       this.userName = userName;
   }

   public String getUserName() {
       return this.userName;
   }
}

8- Erstellen Sie Ihr erster Servlet 

HelloServlet.java
package org.o7planning.tutorial.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class HelloServlet extends HttpServlet {
   
   private static final long serialVersionUID = 1L;

   
   public HelloServlet() {
   }

   @Override
   protected void doGet(HttpServletRequest request,
           HttpServletResponse response) throws ServletException, IOException {
       
       ServletOutputStream out = response.getOutputStream();
       
       out.println("<html>");
       out.println("<head><title>Hello Servlet</title></head>");
       
       out.println("<body>");
       out.println("<h3>Hello World</h3>");
       out.println("This is my first Servlet");
       out.println("</body>");
       out.println("<html>");
   }

   @Override
   protected void doPost(HttpServletRequest request,
           HttpServletResponse response) throws ServletException, IOException {
       this.doGet(request, response);
   }

}
Das ist die Image von erstellten  HelloServlet mit voller Fehler. Diese Fehler scheint weil Sie die Bibliothek Servlet noch nicht anmelden
Sie sollen die Bibliothek Servlet anmelden. Diese Bibliothek sind nur die Runtime Bibliothek der Servlet. Sie sind vorhanden in Web Server. Hier  benutzen wir Tomcat. So melden Sie sie an.

Drücken Sie die Rechtsmaustaste ins Project und dann wählen Sie Properties:
Da warnt das Project den Fehler nicht mehr
Zunächst sollen Sie   HelloServlet und den Pfad zum Zugang im  web.xml  melden. Sie sollen die folgenden Konfiguration einfügen
<!-- Define servlet, named helloServlet -->
<servlet>
   <servlet-name>helloServlet</servlet-name>
   <servlet-class>org.o7planning.tutorial.servlet.HelloServlet</servlet-class>
</servlet>

<!-- Defines the path to access this Servlet -->
<servlet-mapping>
   <servlet-name>helloServlet</servlet-name>
   <url-pattern>/hello</url-pattern>
</servlet-mapping>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns="http://java.sun.com/xml/ns/javaee"
   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee%20http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
   id="WebApp_ID" version="3.0">
   <display-name>ServletTutorial</display-name>

   
   <servlet>
       <servlet-name>helloServlet</servlet-name>
       <servlet-class>org.o7planning.tutorial.servlet.HelloServlet</servlet-class>
   </servlet>

   <servlet-mapping>
       <servlet-name>helloServlet</servlet-name>
       <url-pattern>/hello</url-pattern>
   </servlet-mapping>


   <welcome-file-list>
       <welcome-file>index.html</welcome-file>
       <welcome-file>index.htm</welcome-file>
       <welcome-file>index.jsp</welcome-file>
       <welcome-file>default.html</welcome-file>
       <welcome-file>default.htm</welcome-file>
       <welcome-file>default.jsp</welcome-file>
   </welcome-file-list>


</web-app>
Starten Sie das Project wieder, indem Sie drücken die Rechtsmaustaste und wählen
  • Run As/Run on Server
Sie können die Grundsatz seiner Operation wie folgend sehen
Wenn ein Servlet aufgeruft wird, wird eine der 2 Methode doGet(..) oder  doPost(..) nach der Situation aufgeruft 
  •  Wann wir die Method doGet(..) aufrufen und wann doPost(..) , diskussieren wir später.
In doGet() oder doPost() können Sie das Object S ervletOutputStream rausnehmen. Das ist Input Thread. Es schickt die Daten zum Browser des Benutzer . Aufrufe von ServletOutputStream.println(..) zum Schreiben der Text in Stream
// Output Stream
// Die Daten nach dem Browser des Benutzer schicken
ServletOutputStream out = response.getOutputStream();

9- Der Constructor - Parameter vom Servlet

Bei der Anmeldung servlet in  web.xml können Sie die Installierungsparameter für sie übertragen
InitParamServlet.java
package org.o7planning.tutorial.servlet;

import java.io.IOException;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class InitParamServlet extends HttpServlet {

	private static final long serialVersionUID = 1L;

	private String emailSupport1;

	public InitParamServlet() {
	}

	// Die Methode wird immer einmal aufgeruft gleich nachdem das Objekt Servlet erstellt wird.
	@Override
	public void init(ServletConfig config) throws ServletException {
		super.init(config);

		// Die Wert von dem Initialization parameter vom Servlet entnehmen 
		// (nach der Konfiguration vom Servlet im web.xml).
		this.emailSupport1 = config.getInitParameter("emailSupport1");
	}

	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		// Die Wert von dem Initialization Parameter nach einem anderen Maßnahme entnehmen
		String emailSupport2 = this.getServletConfig().getInitParameter("emailSupport2");

		ServletOutputStream out = response.getOutputStream();

		out.println("<html>");
		out.println("<head><title>Init Param</title></head>");

		out.println("<body>");
		out.println("<h3>Init Param</h3>");
		out.println("<p>emailSupport1 = " + this.emailSupport1 + "</p>");
		out.println("<p>emailSupport2 = " + emailSupport2 + "</p>");
		out.println("</body>");
		out.println("<html>");
	}

	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		this.doGet(request, response);
	}

}
Konfiguration der  servlet in  web.xml:
<servlet>
    <servlet-name>initParamServlet</servlet-name>
    <servlet-class>org.o7planning.tutorial.servlet.InitParamServlet</servlet-class>
    
    <init-param>
        <param-name>emailSupport1</param-name>
        <param-value>[email protected]</param-value>
    </init-param>

    <init-param>
        <param-name>emailSupport2</param-name>
        <param-value>[email protected]</param-value>
    </init-param>

</servlet>    


<servlet-mapping>
    <servlet-name>initParamServlet</servlet-name>
    <url-pattern>/initParam</url-pattern>
</servlet-mapping>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns="http://java.sun.com/xml/ns/javaee"
   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee%20http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
   id="WebApp_ID" version="3.0">
   <display-name>ServletTutorial</display-name>

   
   <servlet>
       <servlet-name>helloServlet</servlet-name>
       <servlet-class>org.o7planning.tutorial.servlet.HelloServlet</servlet-class>
   </servlet>

   <servlet-mapping>
       <servlet-name>helloServlet</servlet-name>
       <url-pattern>/hello</url-pattern>
   </servlet-mapping>


   <servlet>
       <servlet-name>initParamServlet</servlet-name>
       <servlet-class>org.o7planning.tutorial.servlet.InitParamServlet</servlet-class>
       
       <init-param>
           <param-name>emailSupport1</param-name>
           <param-value>[email protected]</param-value>
       </init-param>
       
       <init-param>
           <param-name>emailSupport2</param-name>
           <param-value>[email protected]</param-value>
       </init-param>
       
   </servlet>    
   
   
   <servlet-mapping>
       <servlet-name>initParamServlet</servlet-name>
       <url-pattern>/initParam</url-pattern>
   </servlet-mapping>


   
   <welcome-file-list>
       <welcome-file>index.html</welcome-file>
       <welcome-file>index.htm</welcome-file>
       <welcome-file>index.jsp</welcome-file>
       <welcome-file>default.html</welcome-file>
       <welcome-file>default.htm</welcome-file>
       <welcome-file>default.jsp</welcome-file>
   </welcome-file-list>


</web-app>
Starten Sie die Web Applikation wieder

10- Die Konfiguration vom Servlet durch die Benutzung von Annotation 

Mit Servlet von der Version ab 3.0 können Sie die Servlet zur Benutzung der Annotaion konfigurieren. In diesem Project benutzen wir Servlet von Version 3.x. Deshalb können wir die Annotation benutzen zu konfigurieren. Sehen Sie ein Beispiel
AnnotationExampleServlet.java
package org.o7planning.tutorial.servlet;

import java.io.IOException;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

// Sie können eine oder mehre URL pattern konfigurieren 
// um in diesem Servlet zuzugreifen.
@WebServlet(urlPatterns = { "/annotationExample", "/annExample" }, initParams = {
		@WebInitParam(name = "emailSupport1", value = "[email protected]"),
		@WebInitParam(name = "emailSupport2", value = "[email protected]") })
public class AnnotationExampleServlet extends HttpServlet {

	private static final long serialVersionUID = 1L;

	private String emailSupport1;

	public AnnotationExampleServlet() {
	}

	// Die Methode wird aufgeruft bevor der Servlet die erste Anforderung behandelt
	@Override
	public void init(ServletConfig config) throws ServletException {
		super.init(config);

		this.emailSupport1 = config.getInitParameter("emailSupport1");
	}

	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		String emailSupport2 = this.getServletConfig().getInitParameter("emailSupport2");

		ServletOutputStream out = response.getOutputStream();

		out.println("<html>");
		out.println("<head><title>Init Param</title></head>");

		out.println("<body>");
		out.println("<h3>Servlet with Annotation configuration</h3>");
		out.println("<p>emailSupport1 = " + this.emailSupport1 + "</p>");
		out.println("<p>emailSupport2 = " + emailSupport2 + "</p>");
		out.println("</body>");
		out.println("<html>");
	}

	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		this.doGet(request, response);
	}

}
Sie können Servlet nach einem der 2 Pfad zugreifen:

11- Servlet Url Pattern

Es gibt 4 Möglichkeiten um ein Pfad für Servlet zu konfigurieren
URL Pattern Examples
/* http://example.com/contextPath
http://example.com/contextPath/status/abc
/status/abc/* http://example.com/contextPath/status/abc
http://example.com/contextPath/status/abc/mnp
http://example.com/contextPath/status/abc/mnp?date=today
http://example.com/contextPath/test/abc/mnp
*.map http://example.com/contextPath/status/abc.map
http://example.com/contextPath/status.map?date=today
http://example.com/contextPath/status/abc.MAP
/ Đây là Servlet mặc định.
Wenn der Benutzer ein Pfad auf Browser eingibt, wird es zum WebContainer geschickt. WebContainer soll entscheiden, welcher Servlet die Nachfrage von dem Benutzer befriedigt .

Das folgende Image stellt dar, wie WebContainer entscheidet, welcher Servlet die Nachfrage von Client befriedigt
Beispiel: Erstelleung eines Servlet mit url-pattern , die das Sternchen hat, wie:
  • url-pattern = "/any/*";
AsteriskServlet.java
package org.o7planning.tutorial.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(urlPatterns = { "/any/*" })
public class AsteriskServlet extends HttpServlet {

	private static final long serialVersionUID = 1L;

	public AsteriskServlet() {
	}

	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		ServletOutputStream out = response.getOutputStream();

		out.println("<html>");
		out.println("<head><title>Asterisk</title></head>");

		out.println("<body>");

		out.println("<h3>Hi, your URL match /any/*</h3>");

		out.println("</body>");
		out.println("<html>");
	}

	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		this.doGet(request, response);
	}

}
Die URL mit den folgenden Type werden von AsteriskServlet (/any/*) bedient

Standardmäßiger Servlet

Servlet mit  url-pattern = /

Ist ein standardmäßiger Servlet. Er behandelt die Nachfrage (request), deren Pfad kein  url-pattern des anderen Servlet in Ihrer Applikation passt.
Sehen Sie ein Beispiel mit dem standardmäßigen  Servlet :
MyDefaultServlet.java
package org.o7planning.tutorial.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(urlPatterns = { "/" })
public class MyDefaultServlet extends HttpServlet {

   private static final long serialVersionUID = 1L;

   public MyDefaultServlet() {
   }

   @Override
   protected void doGet(HttpServletRequest request, HttpServletResponse response)
           throws ServletException, IOException {

       ServletOutputStream out = response.getOutputStream();

       out.println("<html>");
       out.println("<head><title>Page not found</title></head>");

       out.println("<body>");
       out.println("<h3>Sorry! Page not found</h3>");
       out.println("<h1>404</h1>");
       out.println("Message from servlet: " + this.getClass().getName());
       out.println("</body>");
       out.println("<html>");
   }

   @Override
   protected void doPost(HttpServletRequest request, HttpServletResponse response)
           throws ServletException, IOException {
       this.doGet(request, response);
   }

}
Sie können die Web Applikation wieder laufen, und den Pfad zugreifen
Der oben Pfad servletPath = /news/tomAndJerry, passt keinen Pfad des Servlet, der Sie angemeldet haben. Da wird der standardmäßige Servlet die Nachfrage (request) befriedigen

12- Die Grundinformation vom Servlet nehmen

Sie können die Information von der Bedienung des Servlet nehmen wie:
  1. Die Nachfrage Information aus client.
  2. Die Information des Server
  3. Die Information der Client
  4. Die Information von Header nach der Nachfrage (request)
  5. ....
ExampleInfoServlet.java
package org.o7planning.tutorial.servlet;

import java.io.IOException;
import java.util.Enumeration;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/other/exampleInfo")
public class ExampleInfoServlet extends HttpServlet {

	private static final long serialVersionUID = 1L;

	public ExampleInfoServlet() {
		super();
	}

	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		ServletOutputStream out = response.getOutputStream();

		out.println("<style> span {color:blue;} </style>");

		String requestURL = request.getRequestURL().toString();
		out.println("<br><span>requestURL:</span>");
		out.println(requestURL);

		String requestURI = request.getRequestURI();
		out.println("<br><span>requestURI:</span>");
		out.println(requestURI);

		String contextPath = request.getContextPath();
		out.println("<br><span>contextPath:</span>");
		out.println(contextPath);

		out.println("<br><span>servletPath:</span>");
		String servletPath = request.getServletPath();
		out.println(servletPath);

		String queryString = request.getQueryString();
		out.println("<br><span>queryString:</span>");
		out.println(queryString);

		String param1 = request.getParameter("text1");
		out.println("<br><span>getParameter text1:</span>");
		out.println(param1);

		String param2 = request.getParameter("text2");
		out.println("<br><span>getParameter text2:</span>");
		out.println(param2);

		// Server Infos
		out.println("<br><br><b>Server info:</b>");

		out.println("<br><span>serverName:</span>");
		String serverName = request.getServerName();
		out.println(serverName);

		out.println("<br><span>serverPort:</span>");
		int serverPort = request.getServerPort();
		out.println(serverPort + "");

		// Client Infos
		out.println("<br><br><b>Client info:</b>");

		out.println("<br><span>remoteAddr:</span>");
		String remoteAddr = request.getRemoteAddr();
		out.println(remoteAddr);

		out.println("<br><span>remoteHost:</span>");
		String remoteHost = request.getRemoteHost();
		out.println(remoteHost);

		out.println("<br><span>remoteHost:</span>");
		int remotePort = request.getRemotePort();
		out.println(remotePort + "");

		out.println("<br><span>remoteUser:</span>");
		String remoteUser = request.getRemoteUser();
		out.println(remoteUser);

		// Header Infos
		out.println("<br><br><b>headers:</b>");

		Enumeration<String> headers = request.getHeaderNames();
		while (headers.hasMoreElements()) {
			String header = headers.nextElement();
			out.println("<br><span>" + header + "</span>: " + request.getHeader(header));
		}

		// Servlet Context info:
		out.println("<br><br><b>Servlet Context info:</b>");
		ServletContext servletContext = request.getServletContext();

		// Die Stelle von der Website-Applikation auf die Festplatte (hard disk).
		out.println("<br><span>realPath:</span>");
		String realPath = servletContext.getRealPath("");
		out.println(realPath);
	}

	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		this.doGet(request, response);
	}

}
Sehen Sie das folgende Beispiel mit der Information, dafür Sie die Sorge haben:
Starten Sie die Web Applikation und den Pfad zugreifen
Das Ergebnis:

13- Forward (weiterleiten)

Weiterleiten (Forward): Wenn eine Nachfrage (request) des Browser zum Servlet geschickt wird, wird sie zur anderen Seite (oder ein anderer Servlet) weitergeleitet. Die Addresse auf dem Benutzer-Browser ist noch der Pfad der ersten Seite aber die Inhalt ist von der weitergeleiteten Seite gemacht.

Die weitergeleitete Seite muss eine Seite (oder Servlet) in Ihrer Web Applikation liegen.

Mit Forward können Sie request.setAttribute() benutzen um die Daten von der Seite 1 zur Seite 2 zu übertragen
ForwardDemoServlet.java
package org.o7planning.tutorial.servlet.other;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.o7planning.tutorial.beans.Constants;

@WebServlet("/other/forwardDemo")
public class ForwardDemoServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	// Request:
	// http://localhost:8080/ServletTutorial/other/forwardDemo?forward=true
	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		// Die Wert des Parameter auf URL entnehmen.
		String forward = request.getParameter("forward");

		if ("true".equals(forward)) {
			System.out.println("Forward to ShowMeServlet");

			// Die Daten in die Attribute von Request einstellen (set)
			request.setAttribute(Constants.ATTRIBUTE_USER_NAME_KEY, //
					"Hi, I'm Tom come from Walt Disney !");

			RequestDispatcher dispatcher //
					= request.getServletContext().getRequestDispatcher("/showMe");
			dispatcher.forward(request, response);

			return;
		}
		ServletOutputStream out = response.getOutputStream();
		out.println("<h3>Text of ForwardDemoServlet</h3>");
		out.println("- servletPath=" + request.getServletPath());
	}

	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		this.doGet(request, response);
	}

}
Starten Sie Webserver wieder und laufen Sie abwechselnd 2 URL:
Im Fall 1: es gibt kein  forward, die Daten, die auf die Seite gesehen wird, wird von   ForwardDemoServlet gemacht.
Im Fall 2: leiten (forward) zum servlet ShowMeServlet weiter. In diesem Fall ändert die URL in der Seite nicht und die Daten wird von  ShowMeServlet erstellt.
Forward (weiterleiten) wird normalerweise in einigen Fällen benutzt wie: der Benutzer fordert den Servlet. Aber die Seite zwingt, zuerst anzumelden. Wenn nocht nicht angemeldet (login), leitet zur servlet Login weiter.
Zurück zu  RequestDispatcher, haben wir 2 Maßnahmen um das Objekt  RequestDispatcher.zu nehmen
Falls request.getServletContext().getRequestDispatcher(url) den  RequestDispatcher zurücktgegeben hat, die die relative Position mit contextPath hat (die relative Position mit dem Ordner der Website).
  • http://localhost:8080/contextPath
  • http://localhost:8080/ServletTutorial
Falls Aufrufe von request.getRequestDispatcher(url) und dann wird  RequestDispatcher zurückgegeben, die die relative Position mit der aktuellen Seite
  • http://localhost:8080/ServletTutorial/other/forwardDemo
Notiz:
  • Redirect (umleiten) genehmigt Ihnen bei der Umleitung zur Seite , auch die Seite außer Website.
  • Forward (weiterleiten) genehmigt Ihnen nur bei der Weiterleitung zur Seite innerhalb der Website, gleichzeitig transformiert die Daten zwischen 2 Seite mit Hifle von request.setAttribute.

14- Redirect (die Umleitung)

Umleiten (Redirect): Wenn eine Anforderung (request) vom Benutzer nach einem Servlet (Seite A) geschickt wird, kann der Servlet die Anforderung nach einem anderen Seite (Seite B) und endet seine Aufgabe. Die umgeleitete Seite kann in Ihre Applikation oder irgendeine Seite sein. Die Addresse auf dem Browser des Benutzer zeigt momentan den Pfad der Seite B.

Anders als Weiterleiten (Forward) können Sie mit Redirect die  request.setAttribute(..) nicht benutzen um die Seite A nach Seite B überzutragen
ShowMeServlet.java
package org.o7planning.tutorial.servlet.other;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.o7planning.tutorial.beans.Constants;

@WebServlet("/showMe")
public class ShowMeServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		// Die Wert in einem der Attribute vom Request
		String value = (String) request.getAttribute(Constants.ATTRIBUTE_USER_NAME_KEY);

		ServletOutputStream out = response.getOutputStream();

		out.println("<h1>ShowMeServlet</h1>");
		out.println(value);
	}

	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		this.doGet(request, response);
	}

}
RedirectDemoServlet.java
package org.o7planning.tutorial.servlet.other;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/other/redirectDemo")
public class RedirectDemoServlet extends HttpServlet {

	private static final long serialVersionUID = 1L;

	// Request:
	// http://localhost:8080/ServletTutorial/other/redirectDemo?redirect=true
	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		// Die Wert vom Parameter auf URL entnehmen.
		String redirect = request.getParameter("redirect");

		if ("true".equals(redirect)) {
			System.out.println("Redirect to ShowMeServlet");

			// contextPath: ist ein leeres String "" oder nicht-leer.
			// Wenn nicht-leer, beginnt es immer mit / und endet nicht mit  /
			String contextPath = request.getContextPath();

			// ==> /ServletTutorial/showMe
			response.sendRedirect(contextPath + "/showMe");
			return;
		}

		ServletOutputStream out = response.getOutputStream();
		out.println("<h3>Text of RedirectDemoServlet</h3>");
		out.println("- servletPath=" + request.getServletPath());
	}

	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		this.doGet(request, response);
	}

}
Starten Sie den Webserver wieder und den Pfad auf dem Browser in 2. Mal zugreifen
Mit dem ersten Pfad erhalten Sie:
Mit dem 2.Pfad wird die Anforderung (request) zur ShowMeServlet weitergeleitet, die URL auf dem Browser ist der Pfad von dem servlet ShowMeServlet.

15- Die Session

Das Object  HttpSession bezeichnet eine Session des Benutzer. Eine Session vom Benutzer enthaltet viele Information des Benutzer und liegt immer auf die Anforderungen , die nach HTTP server geschickt werden.

Wenn der Benutzer Ihre Website zum ersten Mal zugriff, bekommt der Benutzer ein einzige ID um die anderen Personen zu unterscheiden. Diese ID wird in cookie oder Parameter der Anforderung gespeichert
Das ist die Kode damit Sie ins Objekt session zugreifen können
protected void doGet(HttpServletRequest request,
   HttpServletResponse response)
       throws ServletException, IOException {

   HttpSession session = request.getSession();
}
Sie können die Wert in dem Object session speichern und danach nehmen Sie sie raus, kann in einer anderen Seite sein. Zuerst sehen wir, wie Sie die Wert im dem Object Session speichern
// Das Objekt HttpSession entnehmen
HttpSession session = request.getSession();

// Angenommen, der Benutzer hat erfolgreich login.
UserInfo loginedInfo = new UserInfo("Tom", "USA", 5);

// Die Information des Benutzer in einem Attribute vom Session speichen. 
// Sie können die Information durch die Methode  getAttribute wieder nehmen.
session.setAttribute(Constants.SESSION_USER_KEY, loginedInfo);
Und nehmen Sie die in Session gespeicherten Informationen in einer Seite wieder
// Das Objekt HttpSession entnehmen.
HttpSession session = request.getSession();

// Das in Session gespeicherte Objekt UserInfo 
// nachdem der Benutzer erfolgreich login
UserInfo loginedInfo 
    = (UserInfo) session.getAttribute(Constants.SESSION_USER_KEY);
Sehen Sie das Beispiel
LoginServlet.java
package org.o7planning.tutorial.servlet.session;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.o7planning.tutorial.beans.Constants;
import org.o7planning.tutorial.beans.UserInfo;

@WebServlet(urlPatterns = { "/login" })
public class LoginServlet extends HttpServlet {

	private static final long serialVersionUID = 1L;

	public LoginServlet() {
	}

	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		ServletOutputStream out = response.getOutputStream();

		// Das Objekt HttpSession entnehmen
		HttpSession session = request.getSession();

		// Angenommen, der Benutzer hat erfolgreich login .
		UserInfo loginedInfo = new UserInfo("Tom", "USA", 5);

		// Die Information des Benutzer in einem Attribut von Session speichern
		session.setAttribute(Constants.SESSION_USER_KEY, loginedInfo);

		out.println("<html>");
		out.println("<head><title>Session example</title></head>");

		out.println("<body>");
		out.println("<h3>You are logined!, info stored in session</h3>");

		out.println("<a href='userInfo'>View User Info</a>");
		out.println("</body>");
		out.println("<html>");
	}

}
UserInfoServlet.java
package org.o7planning.tutorial.servlet.session;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.o7planning.tutorial.beans.Constants;
import org.o7planning.tutorial.beans.UserInfo;

@WebServlet(urlPatterns = { "/userInfo" })
public class UserInfoServlet extends HttpServlet {

	private static final long serialVersionUID = 1L;

	public UserInfoServlet() {
	}

	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		ServletOutputStream out = response.getOutputStream();

		// Das Objekt HttpSession entnehmen
		HttpSession session = request.getSession();

		// Das in Session gespeicherte Objekt UserInfo 
		// entnehmen nachdem der Benutzer erfolgreich login .
		UserInfo loginedInfo = (UserInfo) session.getAttribute(Constants.SESSION_USER_KEY);

		// Wenn noch nicht login,  die Seite LoginServlet weiterleiten (Redirect ) 
		if (loginedInfo == null) {
			// ==> /ServletTutorial/login
			response.sendRedirect(this.getServletContext().getContextPath() + "/login");
			return;
		}

		out.println("<html>");
		out.println("<head><title>Session example</title></head>");

		out.println("<body>");

		out.println("<h3>User Info:</h3>");

		out.println("<p>User Name:" + loginedInfo.getUserName() + "</p>");
		out.println("<p>Country:" + loginedInfo.getCountry() + "</p>");
		out.println("<p>Post:" + loginedInfo.getPost() + "</p>");

		out.println("</body>");
		out.println("<html>");
	}

}
Führen Sie das Beispiel durch

16- Die Gebrauchanweisung vom Servlet-Filter

Zum nächsten können Sie die Dokument über  Servlet Filter:

17- Die Anleitung zur JSP Programmierung

Nach dem Servlet können Sie weiter JSP bei .... studieren

View more Tutorials: