suchen
HeimJavajavaLernprogrammEinführung in das Struts2-Framework und Einführung in die Verwendung

Ursprüngliche Adresse: Klicken Sie hier, um zu gehen

1 Was ist ValueStack?

Es wird als Wertestapel bezeichnet, die Datenstruktur gemeinsamer Daten, die von Struts bereitgestellt werden.

2 Warum verwenden? ValueStack

Daten vom Controller an den Browser übergeben
Objektinformationen im Zusammenhang mit der Anfrage (Sitzung/Anwendung) speichern


3 Lebenszyklus des ValueStack-Objekts

Anforderungseintrag Nach Erreichen des Servers wird ein ValueStack-Objekt im Speicher erstellt. Wenn die Anforderungsverarbeitung abgeschlossen ist, wird das ValueStack-Objekt gelöscht

4 So greifen Sie auf die Daten in ValueStack zu

Verwendung des OGNL-Ausdrucks Ausdruckserfassung
Verwenden Sie den EL-Ausdruck, um

5 Bereichsunterteilung zum Speichern von Daten im ValueStack zu erhalten

Inhalt (Stapelstruktur) Verwenden Sie OGNL oder EL, um Daten zu erhalten
Kontext (Kartenstruktur) Verwenden Sie die #-Taste, um Daten abzurufen

7 Fall: Wert vom Controller an den Browser übergeben, Wert anzeigenStapelbereich

 7.1 Leitfadenpaket

 

 1 <project> 2   <modelversion>4.0.0</modelversion> 3   <groupid>cn.xiangxu</groupid> 4   <artifactid>ssh03</artifactid> 5   <version>0.0.1-SNAPSHOT</version> 6   <packaging>war</packaging> 7   <dependencies> 8       <dependency> 9           <groupid>org.apache.struts</groupid>10           <artifactid>struts2-core</artifactid>11           <version>2.3.8</version>12       </dependency>13       <dependency>14           <groupid>org.apache.struts</groupid>15           <artifactid>struts2-spring-plugin</artifactid>16           <version>2.3.8</version>17       </dependency>18       <dependency>19           <groupid>org.apache.struts</groupid>20           <artifactid>struts2-json-plugin</artifactid>21           <version>2.3.8</version>22       </dependency>23   </dependencies>24 </project>
pom.xml

 7.2 Konfigurationsdatei

 7.2.1 spring_context.xml

 Scannen von Konfigurationsanmerkungen

 1 <?xml  version="1.0" encoding="UTF-8"?> 2 <beans>18 19     <!-- 配置组件扫描 -->20     <component-scan></component-scan>21     22 </beans>
spring_context.xml

7.2.2 struts.xml

 Zugriffspfad, Zugriffsnetzwerkname, Aktionsverarbeitungsklasse konfigurieren

 1 <?xml  version="1.0" encoding="UTF-8"?> 2  3 nbsp;struts PUBLIC 4     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" 5     "http://struts.apache.org/dtds/struts-2.3.dtd"> 6      7 <struts> 8  9     <!-- 测试struts整合spring时用 -->10     <package>11         <action>12             <result>13                 /WEB-INF/jsp/msg.jsp14             </result>15         </action>16     </package>17     18     <package>19         <action>20             <result>21                 /WEB-INF/jsp/valueStack.jsp22             </result>23         </action>24     </package>25     26 </struts>27     28
struts.xml

7.2.3 web.xml

Konfigurieren Sie den Spring-Listener

Konfigurieren Sie den Speicherort der Spring-Konfigurationsdatei

Konfigurieren der Hauptcontroller

 1 <?xml  version="1.0" encoding="UTF-8"?> 2 <web-app> 3   <display-name>ssh03</display-name> 4   <welcome-file-list> 5     <welcome-file>index.html</welcome-file> 6     <welcome-file>index.htm</welcome-file> 7     <welcome-file>index.jsp</welcome-file> 8     <welcome-file>default.html</welcome-file> 9     <welcome-file>default.htm</welcome-file>10     <welcome-file>default.jsp</welcome-file>11   </welcome-file-list>12   13   <!-- 配置spring监听14               目的:容器启动时自动加载一些东西到缓存中 -->15   <listener>16       <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>17   </listener>18   19   <!-- 配置Spring配置文件的位置 -->20   <context-param>21       <param-name>contextConfigLocation</param-name>22       <param-value>classpath:spring_*.xml</param-value>23   </context-param>24   25   <!-- 配置主控制器和过滤条件 -->26   <filter>27       <filter-name>mvc</filter-name>28       <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>29   </filter>30   <filter-mapping>31       <filter-name>mvc</filter-name>32       <url-pattern>/*</url-pattern>33   </filter-mapping>34   35 </web-app>
web.xml

 7.3 Aktionsverarbeitungsklasse schreiben

 1 package cn.xiangxu.action; 2  3 import org.springframework.context.annotation.Scope; 4 import org.springframework.stereotype.Controller; 5  6 import com.opensymphony.xwork2.ActionContext; 7 import com.opensymphony.xwork2.util.ValueStack; 8  9 import cn.xiangxu.entity.Person;10 11 @Controller12 @Scope("prototype")13 public class ValueStackAction {14     15     private String message;16     17     public String valueStaceMethod() {18         System.out.println("跟valueStack相关的action类");19         20         message = "我是控制类中的属性message";21         22         // 利用工厂方法来获取session对象时就使用下面两行代码23         ActionContext context = ActionContext.getContext();24         context.getSession().put("loginName", "warrior"); // 向session中插入数据25         26         context.getSession().put("password", "123456"); // 向session中插入数据27         28         // 利用上下文对象来获取ValueStack对象29         ValueStack valueStack = context.getValueStack();30         31         Person person = new Person();32         person.setId("333");33         person.setName("fury");34         person.setMessage("hello fury");35         valueStack.push(person);  // 将数据插入到对象栈中36         37         return "success";38     }39 40     public String getMessage() {41         return message;42     }43 44     public void setMessage(String message) {45         this.message = message;46     }47     48 }
ValueStackAction.java

 Entitätsklassen, die in Kontrollklassen verwendet werden müssen

 1 package cn.xiangxu.entity; 2  3 import java.io.Serializable; 4  5 public class Person implements Serializable { 6  7     private static final long serialVersionUID = -7221161390673280278L; 8     private String id; 9     private String name;10     private String message;11     public Person() {12         super();13         // TODO Auto-generated constructor stub14     }15     public Person(String id, String name, String message) {16         super();17         this.id = id;18         this.name = name;19         this.message = message;20     }21     @Override22     public int hashCode() {23         final int prime = 31;24         int result = 1;25         result = prime * result + ((id == null) ? 0 : id.hashCode());26         return result;27     }28     @Override29     public boolean equals(Object obj) {30         if (this == obj)31             return true;32         if (obj == null)33             return false;34         if (getClass() != obj.getClass())35             return false;36         Person other = (Person) obj;37         if (id == null) {38             if (other.id != null)39                 return false;40         } else if (!id.equals(other.id))41             return false;42         return true;43     }44     public String getId() {45         return id;46     }47     public void setId(String id) {48         this.id = id;49     }50     public String getName() {51         return name;52     }53     public void setName(String name) {54         this.name = name;55     }56     public String getMessage() {57         return message;58     }59     public void setMessage(String message) {60         this.message = message;61     }62     @Override63     public String toString() {64         return "Person [id=" + id + ", name=" + name + ", message=" + message + "]";65     }66     67     68 }
Person.java

 

  7.4 编写jsp页面

    7.4.1 利用EL表达式访问ValueStack中的数据的格式

      ${变量名}

    7.4.2 利用OGNL表达式访问ValueStack中的数据的格式

      

      

      注意:为什么访问sesseion中的数据时需要在前面加 #session. 是因为....【自己百度去,或者参见本博客顶端的连接;三少能力有限,讲不清楚】

      注意:在读取栈结构中的数据时是从栈顶开始读的,如果有两个变量的名字相同,那么读取到的只会是相对前面的那个变量的值

 1  3      4 <!-- 引入struts2标签库 -->     5  6      7 nbsp;html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 8  9 10 <meta>11 <title>Insert title here</title>12 13 14     <h2 id="跟valueStack有关的页面">跟valueStack有关的页面</h2>15     <hr><hr>16     17     <h2 id="利用EL表达式从valuesStack中获取数据">利用EL表达式从valuesStack中获取数据</h2>18     <h3 id="message">${message }</h3>19     <hr>20     <h3 id="loginName">${loginName }</h3>21     <hr>22     <h3 id="password">${password }</h3>23     <hr><hr>24     25     <h2 id="利用OGNL表达式获取valueStack中的数据">利用OGNL表达式获取valueStack中的数据</h2>26     <h3><property></property></h3>27     <hr>28     <h3><property></property></h3>29     <hr>30     <h3><property></property></h3>31 32     <hr><hr>33     34     <debug></debug>35 36 
valueStack.jsp

   7.5 项目结构图  

    

 

Das obige ist der detaillierte Inhalt vonEinführung in das Struts2-Framework und Einführung in die Verwendung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Crossplay haben?
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

SecLists

SecLists

SecLists ist der ultimative Begleiter für Sicherheitstester. Dabei handelt es sich um eine Sammlung verschiedener Arten von Listen, die häufig bei Sicherheitsbewertungen verwendet werden, an einem Ort. SecLists trägt dazu bei, Sicherheitstests effizienter und produktiver zu gestalten, indem es bequem alle Listen bereitstellt, die ein Sicherheitstester benötigen könnte. Zu den Listentypen gehören Benutzernamen, Passwörter, URLs, Fuzzing-Payloads, Muster für vertrauliche Daten, Web-Shells und mehr. Der Tester kann dieses Repository einfach auf einen neuen Testcomputer übertragen und hat dann Zugriff auf alle Arten von Listen, die er benötigt.

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Herunterladen der Mac-Version des Atom-Editors

Herunterladen der Mac-Version des Atom-Editors

Der beliebteste Open-Source-Editor

MinGW – Minimalistisches GNU für Windows

MinGW – Minimalistisches GNU für Windows

Dieses Projekt wird derzeit auf osdn.net/projects/mingw migriert. Sie können uns dort weiterhin folgen. MinGW: Eine native Windows-Portierung der GNU Compiler Collection (GCC), frei verteilbare Importbibliotheken und Header-Dateien zum Erstellen nativer Windows-Anwendungen, einschließlich Erweiterungen der MSVC-Laufzeit zur Unterstützung der C99-Funktionalität. Die gesamte MinGW-Software kann auf 64-Bit-Windows-Plattformen ausgeführt werden.