1. Erstellen Sie ein neues Webprojekt und fügen Sie ein JAR -Paket im Lib -Verzeichnis hinzu
Haupt-JAR-Pakete: Struts2-Verwandte Paket, MyBatis3.3 Related Package, MySQL-Connector-Java-5.1.22-binbin.jar, GSON-2.1.JAR
2. Konfigurieren Sie web.xml, fügen Sie einen Filter -StrutPrepareAndexecuteFilter hinzu und behandeln Sie alle *.Action -Anforderungen.
<? 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-app-app-app-app- = <display-name>MS</display-name> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <URL-Muster>*. Aktion </url-puftern> </filter-mapping> <Welcome-File-List> <Welcome-File> Index.jsp </Welcome-Datei
Überprüfen Sie den Dofilter -Quellcode dieses Filters und machen Sie Folgendes aus:
1. Bestimmen Sie, ob die von Struts ausgeschlossene URL festgelegt ist (Struts.Action.Excludepattern, übereinstimmt durch reguläre Ausdruck). Wenn es vorhanden ist und der aktuelle Pfad die Regeln erfüllt, wird die Anfrage an das nächste Objekt in der Filterkette weitergeleitet und wird zur Verarbeitung nicht an Struts2 übergeben.
if (ausgeschlossenePatterns!
2. Find ActionMapping: Durchsuchen Sie die FindActionMapping -Methode der Vorbereitung. Wenn es nicht gefunden wird, wird die Anfrage an das nächste Objekt in der Filterkette weitergeleitet und wird zur Verarbeitung nicht an Struts2 übergeben. Wenn ActionMapping gefunden wird, wird die Ausführungsmethode von ExecuteOperationen aufgerufen, um die Ausführung von Aktionen zu beginnen. Die folgende Abbildung ist der Fall, dass ActionMapping basierend auf der URL findet.
3. Konfigurieren Sie die Datei struts.xml. Diese Demo demonstriert hauptsächlich die Übertragung von JSON -Formatdaten zum Frontend, setzt den Ergebnistyp auf JSON -Format und kann natürlich auch auf andere festgelegt werden.
<? name="default" extends="struts-default,json-default"> <global-results> <result type="json"> <param name="root">json</param> <param name="contentType">text/html</param> </result> </global-results> <action name="addUser" method="addUser"> <result>.</result> </action> <action name = "queryAlluser" methode = "queryAlluser"> <Eltrib>. </result> </action> </package> <!-Pakete hier hinzufügen-> </struts>
4. Konfigurieren Sie mybatis.xml und usermapper.xml,
Konfigurieren Sie Cacheenabled in true und aktivieren Sie den Cache Level 2;
Konfigurieren von DataSource-zubezogenen Informationen: Der Typ wird mit PoolmaximumactiveConnections mit Pool-Konnection-Pool-Pool die Anzahl der aktiven (dh verwendeten) Verbindungen jederzeit enthält, der Standardwert ist: 10.
Konfigurieren Sie Entitätsklassenzuordnung Mappers // <mapper Resource = "ms/modell/usermapper.xml"/>
<? name = "cacheeNabled" value = "true" /> < /Einstellungen> <Environments default = "Development"> <Environment ID = "Development"> <transactionManager type = "jdbc" /> <dataSource type = "Pooled"> <Eigenschaft name = "driver" value = "com.mysql.jdbc.driver" /> <Eigenschaft = " value = "jdbc: mysql: // localhost: 3306 /Demo" /> <Eigenschaft name = "userername" value = "root" /> <Eigenschaft name = "password" value = "admin" /> <Eigenschaft name = "poolmaximumActiveconnections" value = "10" /> <Eigenschaft "poLingenab" = "echte". poolpingQuery "/> </dataSource> </Umgebung> </Umgebungen> <mappers> <mapper Resource =" ms/modell/usermapper.xml "/> </mappers> </configuration>
Konfigurieren Sie userMapper.xml, konfigurieren
<? /> ---> <!-mit EHCache Cache-> <cache type = "org.mybatis.caches.ehcache.loggingehcache"> <Property name = "Timetoidleseconds" value = "3600" /> <! value = "3600"/> <!-1 Stunde nach dem Erstellen des Cache, die Uhrzeit zwischen dem Datum des letzten Zugriffs auf den Cache bis zum Zeitpunkt der Ablauf-> <Eigenschaft name = "MaxentriesLocalheap" value = "1000"/> <Eigenschaft name = "maxentrieslocaldisk" value = "10000000"/> </> </> </> </llu </> </llu </> </llu ^-------> </llu </> ^-". Neu -> <Id = "SaveUser" parameterType = "ms.model.user"> in den Benutzer (Konto, Name, Adresse) Werte ( #{Konto}, #{Name}, #{Adresse}) </einfügen> <select id = "queryAlluser" -Fer "ms.model. </mapper> 5. Schlüsselcode
DAO -Schicht:
Erstellen Sie zunächst eine Klasse, um SQLSessionFactory zu erhalten und sie in ein Singleton -Muster zu gestalten.
Paket ms.dao.base; import java.io.ioxception; import org.apache.ibatis.io.resources; import org.apache.ibatis.Session.sqlSessionFactory; SQLSessionFactory SessionFactory; private mySessionFactory () {} public static synchronisierte SQLSessionFactory gotsQlSessionFactory () {if (sessionfactory == null) {try {sessionFactory = new SQLSessionFactoryBuilder (). Rückgabe SessionFactory; } catch (ioException e) {logger.getLogger (mySessionFactory.class) .Error ("getQlSessionFactory -Fehler."); E. printstacktrace (); null zurückkehren; }} else {return SessionFactory; }}}Als nächstes kommt UserDao, das SQLSession durch OpenSession erhält. Beachten Sie, dass die Transaktionskontrolle durch SQLSessions Commit and Rollback durchgeführt werden kann. Wenn es nur eine SQL -Operation gibt, gibt es natürlich keine Transaktionskontrolle (dieses Beispiel ist nur eine Demo).
Paket ms.dao; import Java.util.ArrayList; Import Java.util.List; import org.apache.ibatis.Session.sqlSession; Import ms.dao.base.mySessionFactory; MySessionFactory.getSQLSessionFactory (). OpenSession (); try {string Anweisung = "usermapper.saveuser"; Session.insert (Anweisung, Benutzer); Session.commit (true); } catch (Ausnahme e) {session.rollback (true); E. printstacktrace (); Neue Ausnahme auswerfen ("Fehler in der Add -Methode"); } endlich {Session.close (); }} publiclist <Unter> queryAlluser () löst Ausnahme aus {SQLSession Session = mySessionFactory.getSQLSessionFactory (). OpenSession (); LIST <BENE> user> user = new ArrayList <Beus> (); try {String Anweisung = "userMapper.QueryAlluser"; user = session.selectList (Anweisung, 1); Session.commit (true); } catch (Ausnahme e) {session.rollback (true); E. printstacktrace (); Neue Ausnahme auswerfen ("Fehler in der QueryAlluser -Methode"); } endlich {Session.close (); } Rückgabebenutzer; }} Serviceschicht:
Modell: Nein
Aktionsschicht:
Konvertieren Sie Daten in JSON -Format und geben Sie sie an das Frontend zurück.
Paket Ms.Action; import Java.io.printwriter; import Java.util.list; import Javax.servlet.http.httpServletRequest; Import Javax.servlet.http.httpserServletRectRect; Import ms.model.user; org.apache.struts2.servletactactacontext; import com.google.gson.gson; public class userAction {logger logger = logger.getLogger (userAction.class); private userService userService = new UserService (); public void adduser () {printwriter out = null; try {httpServletRequest request = servletActActionContext.getRequest (); HttpServletResponse response = servletActionContext.getResponse (); Antwort.SetContentType ("text/html; charSet = utf-8"); String account = request.getParameter ("Konto"); String name = request.getParameter ("Name"); String address = request.getParameter ("Adresse"); User user = new user (); user.setAccount (Konto); user.setAddress (Adresse); user.setName (name); userService.add (Benutzer); out = response.getWriter (); out.write (New GSON (). Tojson ("Erfolg")); } catch (Ausnahme e) {e.printstacktrace (); logger.Error (e.getMessage ()); if (out! = null) out.write (new gson (). tojson ("fail")); } endlich {out.flush (); out.close (); }} public void queryAlluser () {printwriter out = null; try {httpServletResponse response = servletActActionContext.getResponse (); Antwort.SetContentType ("text/html; charSet = utf-8"); Gson gson = new gson (); Liste <Unters> userList = userService.queryalluser (); String Gserstr = gson.tojson (Benutzerliste); out = response.getWriter (); out.write (Gserstr); } catch (Ausnahme e) {e.printstacktrace (); logger.Error (e.getMessage ()); if (out! = null) out.write (new gson (). tojson ("fail")); } endlich {out.flush (); out.close (); }}}Front-End-Code:
<%@ page Language = "java" contentType = "text/html; charset = utf-8" pageCoding = "utf-8"%> <! docType html public "-// w3c // dtd html 4.01 transitional // en" "http://www.w3.org/tr/html4/loose.dtd"><Html><Head><meta http-equiv =" content-type "content =" text/html; charset = utf-8 "> <titels> fügen Sie hier zu. 20px;}</style></head><body><div style="text-align: center;"> <div><label>Account: </label><input id="account" type="text"/></div> <div><label>Name: </label><input id="name" type="text"/></div> <div><label>Address: </label><input id="address" type = "text"/> </div> <div> <button id = "addUser"> add </button> </div> <h3> Benutzerliste: </h3> <ul id = "userList"> </ul> <script type = "text/javaScript" src = "js/jquery.1.Min.Min.Min.j.js" </</</</</</</</</</</</</</</</</</</</· </</</</· </</</· </</</ubl. : 'queryAlluser.action', type: 'post', dataType: 'json', Erfolg: Funktion (Daten) {try {for (var i = 0; i <data.length; i ++) {$ ("#userList"). append ("<li> <span style = 'color: rot'> id = "+data [i] .id+" </span>, account = "+data [i] .account+", name = "+data [i] .name+", adress = "+data [i] .address+" </li> "); }} catch (e) {}; }, Fehler: Funktion (e) {alert ("sys error"); }}); $ ("#adduser"). on ("click", function () {var account = $ ("#account"). val (); var name = $ ("#name"). val (); var adress = $ ("#address"). val (); Erfolg: function (data) {try {$ ("#userlist"). }); }); </script> </body> </html>6. Testeffekt:
Struts2 läuft normal;
Testen Sie, ob der sekundäre Cache in Ordnung ist, und fragen Sie alle Benutzer ab.
Erste Abfrage: Cache verpasst, greifen Sie auf die Datenbank zu:
Der zweite und nächste mehrere Abfragen, Cache -Treffer, kein Datenbankzugriff:
@Author ein windartiger Coder
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.