1. Auf Anforderungs-/Sitzungs-/Anwendungsattribute zugreifen oder diese hinzufügen
public Stringscope() löst eine Ausnahme aus{
ActionContext ctx = ActionContext.getContext();
ctx.getApplication().put("app", "Application Scope");//App in ServletContext einfügen
ctx.getSession().put("ses", "session range");//Ses in die Sitzung einfügen
ctx.put("req", "request range");//Req in Anfrage einfügen
return „scope“;
}
JSP:
<Körper>
${applicationScope.app} <br>
${sessionScope.ses}<br>
${requestScope.req}<br>
</body>
2. Rufen Sie das Objekt HttpServletRequest / HttpSession / ServletContext / HttpServletResponse ab
Methode eins, direkt über die ServletActionContext-Klasse abrufen:
public String rsa() löst eine Ausnahme{ aus
HttpServletRequest request = ServletActionContext.getRequest();
ServletContext servletContext = ServletActionContext.getServletContext();
request.getSession()
HttpServletResponse Antwort = ServletActionContext.getResponse();
return „scope“;
}
Methode zwei: Implementieren Sie die angegebene Schnittstelle und fügen Sie sie ein, wenn das Struts-Framework ausgeführt wird:
Die öffentliche Klasse HelloWorldAction implementiert ServletRequestAware, ServletResponseAware, ServletContextAware{
private HttpServletRequest-Anfrage;
privater ServletContext servletContext;
private HttpServletResponse-Antwort;
public void setServletRequest(HttpServletRequest req) {
this.request=req;
}
public void setServletResponse(HttpServletResponse res) {
this.response=res;
}
public void setServletContext(ServletContext ser) {
this.servletContext=ser;
}
}
3. Datei-Upload
Schritt eins: Fügen Sie commons-fileupload-1.2.1.jar und commons-io-1.3.2.jar unter WEB-INF/lib hinzu. Beide Dateien können von http://commons.apache.org/ heruntergeladen werden.
Schritt 2: Legen Sie den Enctype der Formulartabelle wie folgt auf „multipart/form-data“ fest:
<form enctype="multipart/form-data" action="${pageContext.request.contextPath}/xxx.action" method="post">
<input type="file" name="uploadImage">
</form>
Schritt 3: Fügen Sie der Action-Klasse die folgenden Attribute hinzu. Der rote Teil des Attributs entspricht dem Namen des Dateifelds im Formular:
öffentliche Klasse HelloWorldAction{
private File uploadImage;//Holen Sie sich die hochgeladene Datei
private String uploadImageContentType;//Den Dateityp abrufen
private String uploadImageFileName;//Den Namen der Datei abrufen
//Die Getter/Setter-Methoden der Eigenschaften werden hier weggelassen.
public String upload() löst eine Ausnahme aus{
String realpath = ServletActionContext.getServletContext().getRealPath("/images");
Datei file = neue Datei (realpath);
if(!file.exists()) file.mkdirs();
FileUtils.copyFile(uploadImage, new File(file, uploadImageFileName));
„Erfolg“ zurückgeben;
}
}
4. Hochladen mehrerer Dateien
Schritt eins: Fügen Sie commons-fileupload-1.2.1.jar und commons-io-1.3.2.jar unter WEB-INF/lib hinzu. Beide Dateien können von http://commons.apache.org/ heruntergeladen werden.
Schritt 2: Legen Sie den Enctype der Formulartabelle wie folgt auf „multipart/form-data“ fest:
<form enctype="multipart/form-data" action="${pageContext.request.contextPath}/xxx.action" method="post">
<input type="file" name="uploadImages">
<input type="file" name="uploadImages">
</form>
Schritt 3: Fügen Sie der Action-Klasse die folgenden Attribute hinzu. Der rote Teil des Attributs entspricht dem Namen des Dateifelds im Formular:
öffentliche Klasse HelloWorldAction{
private File[] uploadImages;//Holen Sie sich die hochgeladene Datei
private String[] uploadImagesContentType;//Den Dateityp abrufen
private String[] uploadImagesFileName;//Den Namen der Datei abrufen
//Die Getter/Setter-Methoden der Eigenschaften werden hier weggelassen.
public String upload() löst eine Ausnahme aus{
String realpath = ServletActionContext.getServletContext().getRealPath("/images");
Datei file = neue Datei (realpath);
if(!file.exists()) file.mkdirs();
for(int i=0 ;i<uploadImages.length; i++){ File uploadImage = uploadImages[i];
FileUtils.copyFile(uploadImage, new File(file, uploadImagesFileName[i]));
}
„Erfolg“ zurückgeben;
}}
5. Benutzerdefinierter Abfangjäger
Um den Interceptor anzupassen, müssen Sie die Schnittstelle com.opensymphony.xwork2.interceptor.Interceptor implementieren:
Die öffentliche Klasse PermissionInterceptor implementiert Interceptor {
private static final long serialVersionUID = -5178310397732210602L;
public void destroy() {
}
public void init() {
}
public String intercept(ActionInvocation invocation) löst eine Ausnahme aus {
System.out.println("Enter interceptor");
if(Benutzer existiert in Sitzung){
String result = invocation.invoke();
}anders{
„Anmelden“ zurückgeben;
}
//System.out.println("Rückgabewert:"+ Ergebnis);
//Ergebnis zurückgeben;
}
}
<Paketname="csdn" namespace="/test" erweitert="struts-default">
<Abfangjäger>
<interceptor name="permission" />
<interceptor-stack name="permissionStack">
<interceptor-ref name="defaultStack" />
<interceptor-ref name=" Erlaubnis " />
</interceptor-stack>
</interceptors>
<action name="helloworld_*" method="{1}">
<result name="success">/WEB-INF/page/hello.jsp</result>
<interceptor-ref name="permissionStack"/>
</action>
</Paket>
Da Funktionen in struts2 wie das Hochladen von Dateien, die Datenüberprüfung und die Kapselung von Anforderungsparametern in Aktionen alle vom Interceptor im Standard-DefaultStack des Systems implementiert werden, muss der von uns definierte Interceptor auf den Standard-DefaultStack des Systems verweisen, damit die Anwendung struts2 verwenden kann Zahlreiche Funktionen, die das Framework bereitstellt.
Wenn Sie möchten, dass alle Aktionen unter dem Paket einen benutzerdefinierten Interceptor verwenden, können Sie den Interceptor über <default-interceptor-ref name="permissionStack"/> als Standard-Interceptor definieren. Hinweis: Pro Paket kann nur ein Standard-Interceptor angegeben werden. Sobald wir außerdem explizit einen Interceptor für eine Aktion im Paket angeben, funktioniert der Standard-Interceptor nicht mehr.
6. Eingabeverifizierung
In struts2 können wir alle Aktionsmethoden oder bestimmte Aktionsmethoden überprüfen.
Struts2 bietet zwei Implementierungsmethoden zur Eingabeüberprüfung:
1. Durch manuelles Schreiben von Code implementiert.
2. Basierend auf der XML-Konfiguration implementiert.
7. Schreiben Sie manuell Code, um die Eingabe aller Methoden in der Aktion zu überprüfen
Durch Überschreiben der Methode „validate()“ überprüft die Methode „validate()“ alle Methoden in der Aktion, die dieselbe Signatur wie die Methode „execute“ haben. Wenn eine bestimmte Datenüberprüfung fehlschlägt, sollten wir die Methode addFieldError() aufrufen, um Informationen zu Überprüfungsfehlern zu den fieldErrors des Systems hinzuzufügen (um die Methode addFieldError() zu verwenden, kann die Aktion ActionSupport erben, wenn die fieldErrors des Systems Fehlerinformationen enthalten). struts2 wird die Anforderung an das Ergebnis mit dem Namen input weiterleiten. Fehlerinformationen können über <s:fielderror/> in der Eingabeansicht angezeigt werden.
Verwendungsbeispiel von valid():
public void validate() {
if(this.mobile==null || "".equals(this.mobile.trim())){ this.addFieldError("username", "Mobiltelefonnummer darf nicht leer sein");
}else{ if(!Pattern.compile("^1[358]//d{9}").matcher(this.mobile.trim()).matches()){
this.addFieldError("mobile", "Das Format der Mobiltelefonnummer ist falsch" }
}
}
Nachdem die Überprüfung fehlschlägt, wird die Anfrage an die Eingabeansicht weitergeleitet:
<result name="input">/WEB-INF/page/addUser.jsp</result>
Verwenden Sie <s:fielderror/> auf der Seite addUser.jsp, um Fehlerinformationen anzuzeigen.
ValidateXxx() wird über die Methode „validateXxx()“ implementiert und überprüft nur die Methode namens „Xxx“ in der Aktion. Der erste Buchstabe von Xxx sollte großgeschrieben werden. Wenn eine bestimmte Datenüberprüfung fehlschlägt, sollten wir die Methode addFieldError() aufrufen, um Informationen zu Überprüfungsfehlern zu den fieldErrors des Systems hinzuzufügen (um die Methode addFieldError() zu verwenden, kann die Aktion ActionSupport erben, wenn die fieldErrors des Systems Fehlerinformationen enthalten). struts2 wird die Anforderung an das Ergebnis mit dem Namen input weiterleiten. Fehlerinformationen können über <s:fielderror/> in der Eingabeansicht angezeigt werden.
Beispiel für die Verwendung der Methode „validateXxx()“:
public String add() löst eine Ausnahme aus{ return „success“;}
public void validateAdd(){
if(username==null && "".equals(username.trim())) this.addFieldError("username", "Benutzername darf nicht leer sein");
}
Nachdem die Überprüfung fehlschlägt, wird die Anfrage an die Eingabeansicht weitergeleitet:
<result name="input">/WEB-INF/page/addUser.jsp</result>
Verwenden Sie <s:fielderror/> auf der Seite addUser.jsp, um Fehlerinformationen anzuzeigen.
8. Eingabeverifizierungsprozess
1. Der Typkonverter führt eine Typkonvertierung der Anforderungsparameter durch und weist den konvertierten Wert dem Attribut in der Aktion zu.
2. Wenn während der Typkonvertierung eine Ausnahme auftritt, speichert das System die Ausnahmeinformationen im ActionContext und der ConversionError-Interceptor fügt die Ausnahmeinformationen zu fieldErrors hinzu. Unabhängig davon, ob bei der Typkonvertierung eine Ausnahme auftritt, wird Schritt 3 eingegeben.
3. Das System ruft zunächst mithilfe der Reflexionstechnologie die Methode „validateXxx()“ in der Aktion auf, wobei Xxx der Methodenname ist.
4. Rufen Sie dann die Methode „validate()“ in der Aktion auf.
5. Wenn nach den oben genannten 4 Schritten Fehlerinformationen in fieldErrors im System vorhanden sind (d. h. die Größe der Sammlung, in der Fehlerinformationen gespeichert werden, ist größer als 0), leitet das System die Anforderung automatisch an die Ansicht mit dem Namen „input“ weiter. Wenn im FeldFehler im System keine Fehlerinformationen vorhanden sind, führt das System die Verarbeitungsmethode in der Aktion aus.
9. Implementieren Sie die Eingabeüberprüfung für alle Aktionsmethoden basierend auf der XML-Konfigurationsmethode
Bei Verwendung der XML-basierten Konfigurationsmethode zur Implementierung der Eingabeüberprüfung muss die Aktion auch ActionSupport erben und eine Überprüfungsdatei bereitstellen. Die Überprüfungsdatei und die Aktionsklasse werden im selben Paket abgelegt. Das Dateinamensformat lautet: ActionClassName-Validierung. xml, wobei ActionClassName der einfache Klassenname der Aktion ist und -validation eine feste Schreibmethode ist. Wenn die Action-Klasse cn.csdn.UserAction ist, sollte der Name der Datei sein: UserAction-validation.xml. Im Folgenden finden Sie eine Vorlage für die Verifizierungsdatei:
<?xml version="1.0"kodierung="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.3//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd">
<Validatoren>
<Feldname="Benutzername">
<field-validator type="requiredstring">
<param name="trim">wahr</param>
<message>Benutzername darf nicht leer sein!</message>
</field-validator>
</field>
</validators>
<field> gibt die in der Aktion zu überprüfenden Attribute an, und <field-validator> gibt den oben angegebenen Validator an. Das System stellt Validatoren bereit, die die meisten Überprüfungsanforderungen erfüllen können Der Validator ist in default.xml unter com.opensymphony.xwork2.validator.validators in xwork-2.x.jar zu finden.
<Nachricht> ist die Aufforderungsnachricht, nachdem die Überprüfung fehlgeschlagen ist. Wenn eine Internationalisierung erforderlich ist, können Sie das Schlüsselattribut für die Nachricht angeben, und der Wert von Schlüssel ist der Schlüssel in der Ressourcendatei.
In dieser Überprüfungsdatei wird das Benutzernamenattribut des Zeichenfolgentyps in der Aktion überprüft. Zuerst muss die Methode trim() aufgerufen werden, um Leerzeichen zu entfernen, und dann wird festgestellt, ob der Benutzername leer ist.
Beim Schreiben der Überprüfungsdatei kann die Hilfemeldung nicht angezeigt werden. Wenn beim Schreiben der Überprüfungsdatei ActionClassName-validation.xml die Hilfemeldung nicht angezeigt wird, können Sie das Problem wie folgt lösen:
windowwos->Einstellungen->myeclipse->Dateien und Editoren->xml->xmlcatalog
Klicken Sie auf „Hinzufügen“, wählen Sie „Dateisystem“ am Speicherort im angezeigten Fenster aus, wählen Sie dann xwork-validator-1.0.3.dtd im Verzeichnis src/java des xwork-2.1.2-Dekomprimierungsverzeichnisses aus und kehren Sie zum zurück Einstellungsfenster Beeilen Sie sich nicht, das Fenster zu schließen. Sie sollten den Schlüsseltyp im Fenster in URI ändern. Schlüssel geändert in http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd