1. Créez un nouveau projet Web et ajoutez un package JAR dans le répertoire Lib
Packages de bocaux principaux: package connexe Struts2, package connexe Mybatis3.3, MySQL-Connector-Java-5.1.22-Bin.jar, GSON-2.1.jar
2. Configurer web.xml, ajouter un filtre struTsprepareandexEcuteFilter et gérer toutes les demandes de * .Action;
<? 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 http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id = "webapp_id =" 3.0 " <splay-name> ms </ display-name> <filter> <filter-name> struts2 </filter-name> <filter-Class> org.apache.struts2.dispatcher.ng.filter.strutspareAndexecteFilter </ filter-class> </filter> <filter> <filter-name> Struts2 </ Filter> <filter> <filter-name> Struts2 </ Filter> <URL-Pattern> *. Action </ url-stern> </filter-mapping> <welcome-file-list> <leen welcome-file> index.jsp </venke-file> </ welcome-file-list> </ web-appin>
Vérifiez le code source DoFilter de ce filtre et procédez comme suit:
1. Déterminer si l'URL exclue par les jambes de force est définie (struts.action.ExcludePattern, appariée par l'expression régulière). S'il y a et que le chemin actuel respecte les règles, la demande sera transmise à l'objet suivant dans la chaîne de filtre et ne sera pas remise à Struts2 pour le traitement.
if (ExcludedPatterns! = null && prépare.isurlexClud (demande, excludPatterns)) {chain.dofilter (demande, réponse);}2. S'il n'est pas trouvé, la demande sera transmise à l'objet suivant dans la chaîne de filtre et ne sera pas remise à Struts2 pour le traitement; Si ActionMapping est trouvé, la méthode d'exécution d'Exécution est appelé pour commencer à exécuter l'action; Le chiffre suivant est le cas de la recherche d'action de la carte d'action basée sur l'URL;
3. Configurez le fichier strut.xml. Cette démo montre principalement la transmission des données de format JSON à l'avant, définit le type de résultat sur le format JSON, et bien sûr, il peut également être défini sur d'autres;
<? xml version = "1.0" Encoding = "UTF-8"?> <! Doctype Struts public "- // APache Software Foundation // Dtd Struts Configuration 2.3 // en" "http://struts.apache.org/dtds/struts-2.3.dtd"> <strutts> <bantaly name = "Struts.Devmode" Value = "/ False" /> Package " name = "Default" étend = "struts-default, json-default"> <global-résults> <résultat type = "json"> <param name = "root"> JSON </ param> <param name = "ContentType"> Text / html </ param> </ résultat> </ global-results> <Action name = "addition" method = "addUser"> <sultrié> </ Result> <Action> <Action> Method = "AddUser"> <sultalité. name = "queryAllUser" Method = "QueryAlUser"> <Sult>. </cult> </ action> </ package> <! - Ajouter des packages ici -> </ struts>
4. Configurer Mybatis.xml et UserMapper.xml,
Configurez Cacheenabled sur true et activez le cache de niveau 2;
Configuration des informations connexes sur les sources de données: le type est le formulaire de pool de connexion groupé, PoolMaximUmActiveConnections a le nombre de connexions actives (c'est-à-dire en usage) à tout moment, la valeur par défaut est: 10.
Configurer les mappages de mappage des classes d'entité // <mapper ressource = "ms / modèle / userMapper.xml" />
<? xml version = "1.0" Encoding = "UTF-8"?> <! Doctype Configuration public "- // mybatis.org//dtd SQL Map Config 3.0 // en" "http://mybatis.org/dtd/mybatis-3config.dtd"> <ficonguration> name = "cacheenabled" value = "true" /> </ settings> <environnements default = "Development"> <Environment id = "Development"> <transactionManager type = "jdbc" /> <dataSource type = "poolled"> <propriété name = "driver" value = "com.mysql.jdbc.Driver" /> <propriété name = "url" Value = "JDBC: mysql: // localhost: 3306 / démo" /> <propriété name = "username" value = "root" /> <propriété name = "mot de passe" value = "admin" /> <propriété name = "poolMaxImUmActiveConnection" Poolpingquery "/> </ dataSource> </ Environment> </ Environments> <Mappers> <Mapper Resource =" MS / Model / UserMapper.xml "/> </ Mappers> </FIFIGIFIE>
Configurer userMapper.xml, Configurer le cache comme ehcache et paramètres connexes, n'oubliez pas que la classe d'entité doit implémenter l'interface sérialisable
<? xml version = "1.0" Encoding = "UTF-8"?> <! Doctype Mappeur public "- // Mybatis.org//dtd Mapper 3.0 // en" "http://mybatis.org/dtd/mybatis"> <! /> ---> <! - Utilisation d'Ehcache Cache -> <cache type = "org.mybatis.caches.ehcache.loggingehcache"> <propriété name = "TimeToidlesecds" value = "3600" /> <! - 1 heure l'intervalle entre le cache de la date de création à l'expiration -> <Propriété Value = "3600" /> <! - 1 heure après la création du cache, l'heure entre la date du dernier accès au cache à l'heure de l'expiration -> <propriété name = "MaxentriesLocalheap" Value = "1000" /> <propriété Name = "MemoryStoreevctionPolicy" Value = "LRU" /> <COMPTESS <! - Nouveau -> <insert id = "SaveUser" ParameterType = "MS.Model.User"> Insérer dans l'utilisateur (compte, nom, adresse) (# {compte}, # {nom}, # {adresse}) </sersert> <select id = "QueryAllUser" ResultType = "Ms.Model.User"> SELECT </lect> </ mapper> 5. Code clé
Couche DAO:
Tout d'abord, créez une classe pour obtenir SQLSessionFactory et concevez-la en singleton singleton;
Package MS.DAO.BASE; IMPORT Java.io.ioException; import org.apache.ibatis.io.resources; import org.apache.ibatis.session.sqlSessionFactoryBuilder org.apache.ibatis.log4j.logger; SQLSessionFactory SessionFactory; private mySessionFactory () {} public static static synchronisé sqlSessionFactory getSQlSessionFactory () {if (sessionFactory == null) {try {sessionFactory = new SqlSessionFactoryBuilder (). Build (Resources.getResourCeaSreader ("MyBatis-Config.xml")); return sessionfactory; } catch (ioException e) {logger.getLogger (mySessionFactory.class) .Error ("getSQLSessionFactory Error."); e.printStackTrace (); retourner null; }} else {return sessionfactory; }}}Ensuite, UserDao, qui obtient SQLSession via OpenSession. Notez que le contrôle des transactions peut être effectué via la validation et le recul de SQLSession. Bien sûr, s'il n'y a qu'une seule opération SQL, il n'y aura pas de contrôle des transactions (cet exemple n'est qu'une démo);
Package MS.DAO; Importer Java.util.ArrayList; import java.util.list; import org.apache.ibatis.session.sqlSession; Importer Ms.dao.base.MysessionFactory; import Ms.Model.User; public class userdao {public Void add (utilisateur utilisateur) exception {SQLSSSSION SESSSION = SESSSION = SESSITIONS = PUBLIC MySessionFactory.getsqlSessionFactory (). OpenSession (); essayez {string instruction = "userMapper.saveuser"; session.insert (instruction, utilisateur); session.commit (true); } catch (exception e) {session.rollback (true); e.printStackTrace (); lancer une nouvelle exception ("Erreur dans la méthode ADD"); } enfin {session.close (); }} public list <serv> QueryAllUser () lève une exception {sqlSession session = mySessionFactory.getsqlSessionFactory (). OpenSession (); List <ser utilisateur> users = new ArrayList <Serser> (); essayez {string instruction = "userMapper.QueryAlUser"; users = session.selectList (instruction, 1); session.commit (true); } catch (exception e) {session.rollback (true); e.printStackTrace (); lancer une nouvelle exception ("Erreur dans la méthode QueryAllUser"); } enfin {session.close (); } retourne les utilisateurs; }} Couche de service:
Modèle: Non
Couche d'action:
Convertissez en données de format JSON et renvoyez-les à l'avant;
Package Ms.Action; Importer java.io.printwriter; import java.util.list; import javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservletResponse; org.apache.struts2.servletActionContext; 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; essayez {httpServLetRequest request = servletActionContext.getRequest (); HttpServletResponse Response = servletActionContext.getResponse (); Response.SetContentType ("Text / HTML; charSet = UTF-8"); String Account = request.getParameter ("Account"); String name = request.getParameter ("name"); String Address = request.getParameter ("Address"); Utilisateur utilisateur = nouveau utilisateur (); user.setAccount (compte); user.setAddress (adresse); user.setName (nom); userService.add (utilisateur); out = réponse.getWriter (); out.write (new gson (). tojson ("succès")); } catch (exception e) {e.printStackTrace (); Logger.Error (e.getMessage ()); if (out! = null) out.write (new gson (). tojson ("échec")); } enfin {out.flush (); out.close (); }} public void queryAllUser () {printwriter out = null; try {httpServletResponse réponse = servletActionContext.getResponse (); Response.SetContentType ("Text / HTML; charSet = UTF-8"); Gson gson = new gson (); List <ser user> userList = userService.QueryAllUser (); String gsonstr = gson.tojson (userList); out = réponse.getWriter (); out.write (Gsonstr); } catch (exception e) {e.printStackTrace (); Logger.Error (e.getMessage ()); if (out! = null) out.write (new gson (). tojson ("échec")); } enfin {out.flush (); out.close (); }}}Code frontal:
<% @ Page Language = "Java" ContentType = "Text / Html; charSet = UTF-8" Pageencoding = "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 =" contenu-type "contenu =" text / html; charset = utf-8 "> <Title> insert le titre ici </ title> <style> .mt20 {margin-top: 20px;} </ style> </ head> <body> <div style = "text-adign: Center;"> <div> <vabed> Compte: </ label> <entrée id = "compte" type = "text" /> </ div> <v> <vabe type = "text" /> </ div> <v> <button id = "addUser"> add </ button> </div> <h3> list utilisateur: </h3> <ul id = "userList"> </ul> <script type = "text / javascrip : 'QueryAllUser.Action', Type: 'Post', DataType: 'JSON', Success: Function (Data) {try {for (var i = 0; i <data.length; i ++) {$ ("# userList"). style = 'couleur: red'> id = "+ data [i] .id +" </span>, account = "+ data [i] .account +", name = "+ data [i] .name +", adresse = "+ data [i] .address +" </li> "); }} catch (e) {}; }, erreur: fonction (e) {alert ("error sys"); }}); $("#addUser").on("click", function() { var account = $("#account").val(); var name = $("#name").val(); var address = $("#address").val(); $.ajax({ url : 'addUser.action', type : 'post', dataType : 'json', data : { account : account, name : name, address : address }, Succès: Données) {Try {$ ("# UserList"). }); }); </cript> </ body> </html>6. Effet de test:
Struts2 fonctionne normalement;
Testez si le cache secondaire est OK et interrogez tous les utilisateurs;
Première requête: cache manqué, accédez à la base de données:
Les deuxième et prochaines requêtes, des tubes de cache, pas d'accès à la base de données:
@author un codeur de vent
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.