1. قم بإنشاء مشروع ويب جديد وأضف حزمة جرة في دليل LIB
حزم الجرة الرئيسية: الحزمة ذات الصلة Struts2 ، حزمة MyBatis3.3 ذات الصلة ، MySQL-Connector-Java-5.1.22-bin.jar ، GSON-2.1.JAR
2. تكوين web.xml ، وأضف مرشح strutspreparexecutefilter ، والتعامل مع جميع طلبات *.
<؟ 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.xd <SPAND-NAME> ms </isplay-name> <lipter> <filter-name> struts2 </filter-name> <filter-class> org.apache.struts2 <Url-pattern>*. الإجراء </url-pattern> </filter-mapping> <-list-file-list> <lispile-file> index.jsp </isplip-file> </iship-file-lister> </web-app>
تحقق من رمز مصدر Dofilter لهذا المرشح وافعل ما يلي:
1. تحديد ما إذا كان عنوان URL المستبعد بواسطة الدعامات قد تم تعيينه (Struts.Action.excludepattern ، يتطابق مع التعبير العادي). إذا كان هناك ويلبي المسار الحالي القواعد ، فسيتم إرسال الطلب إلى الكائن التالي في سلسلة المرشح ولن يتم تسليمه إلى Struts2 للمعالجة.
if (excludedPatterns! = null && prepar.isurlexCluded (request ، expludedpatterns)) {chain.dofilter (request ، response) ؛}2. البحث عن Actionmapping: ابحث من خلال طريقة FindActionmapping في التحضير. إذا لم يتم العثور عليه ، فسيتم إعادة توجيه الطلب إلى الكائن التالي في سلسلة المرشح ولن يتم تسليمه إلى Struts2 للمعالجة ؛ إذا تم العثور على ActionMapping ، يتم استدعاء طريقة التنفيذ التنفيذية لبدء تنفيذ الإجراء ؛ الرقم التالي هو حالة العثور على عمل بناءً على عنوان URL ؛
3. تكوين ملف struts.xml. يوضح هذا العرض التوضيحي بشكل أساسي نقل بيانات تنسيق JSON إلى الواجهة الأمامية ، وضبط نوع النتيجة على تنسيق JSON ، وبالطبع يمكن أيضًا ضبطه على أخرى ؛
<؟ name = "default" تمدد = "Struts-Default ، JSON-Default"> <global-results> <result type = "json"> <param name = "root"> json </param> <param name = "contentType"> text/html </param> name = "QueryAlluser" method = "queryalluser"> <result>. </result> </action> </package> <!-إضافة حزم هنا-> </struts>
4. تكوين mybatis.xml و usermapper.xml ،
تكوين CacheEnabled إلى ذاكرة التخزين المؤقت من المستوى 2.
تكوين المعلومات المتعلقة بموارد البيانات: النوع هو تجمع تجمع الاتصالات المجمعة ، وتجمع PoolMaximumActiveConnections لديه عدد الاتصالات النشطة (أي ، المستخدم) في أي وقت ، القيمة الافتراضية هي: 10.
تكوين MAPPERS MAPPERS CLASS // <mapper Resource = "MS/Model/UserMapper.xml"/>
<؟ name = "cacheenabled" value = "true" /> < /settings> <البيئات default = "development"> <البيئة معرف = "التطوير"> <TransactionManager type = "jdbc" /> <dataSource type = "propered"> <property name = "driver" value = "com.mysql.jdbc.dbc.driver value = "jdbc: mysql: // localhost: 3306 /demo" /> <property name = "username" value = "root" /> <property name = "password" value = "admin" /> <Propert تجميع "/> </dataSource> </eversity> </eversionments> <mappers> <mapper resource =" ms/model/usermapper.xml "/> </nybers> </ispification>
تكوين usermapper.xml ، وتكوين ذاكرة التخزين المؤقت كـ ehcache والمعلمات ذات الصلة ، تذكر أن فئة الكيان تحتاج إلى تنفيذ الواجهة التسلسلية القابلة للتسلسل
<؟ /> ---> <!-باستخدام ذاكرة التخزين المؤقت ehcache-> <cache type = "org.mybatis.caches.ehcache.loggingehcache"> <property name = "timetoidleSeConds" value = "3600" /> <! value = "3600"/> <!-1 ساعة بعد إنشاء ذاكرة التخزين المؤقت ، الوقت بين تاريخ الوصول الأخير إلى ذاكرة التخزين المؤقت إلى وقت انتهاء الصلاحية-> <property name = "maxentrieslocalheap" value = "1000"/> <property name = "maxentrislocaldisk" value = "10000000"/> <!-جديد-> <insert id = "saveUser" parametertype = "ms.model.user"> insert في المستخدم (الحساب ، الاسم ، العنوان) القيم ( #{account} ، #{name} ، #{address}) </insert> <select id = "queryAlluser" desultype = "mss.model.user" </select> </tegper> 5. رمز المفتاح
طبقة داو:
أولاً ، قم بإنشاء فصل للحصول على SQLSessionFactory وتصميمه في نمط Singleton ؛
حزمة ms.dao.base ؛ استيراد java.io.ioException ؛ استيراد org.apache.ibatis.io.resources ؛ استيراد org.apache.ibatis.session.sqlsessionfactory SQLSessionFactory SessionFactory ؛ خاص mySessionFactory () {} sqlsessionfactionfactory getSqlSessionFactory () {if (sessionfactory == null) {try {sessionfactory = new SqlSessionFactoryBuilder (). build (resources.getResourCeasreader ( إرجاع SessionFactory ؛ } catch (ioException e) {logger.getLogger (mySessionFactory.class) .error ("getSqlSessionFactory error.") ؛ E.PrintStackTrace () ؛ العودة لاغية. }} آخر {return sessionfactory ؛ }}}التالي هو userDao ، الذي يحصل على SQLSession من خلال OpenSession. لاحظ أنه يمكن إجراء التحكم في المعاملات من خلال التزام SQLSession وتراجعه. بالطبع ، إذا كان هناك عملية SQL واحدة فقط ، فلن يكون هناك التحكم في المعاملات (هذا المثال مجرد عرض تجريبي) ؛
حزمة ms.dao ؛ استيراد java.util.arraylist ؛ استيراد java.util.list ؛ استيراد org.apache.ibatis.session.sqlsession ؛ استيراد ms.dao.base.mysessionfactory ؛ استيراد Ms.Model.user mySessionFactory.getSqlSessionFactory (). openSession () ؛ حاول {string state = "usermapper.saveuser" ؛ session.insert (بيان ، مستخدم) ؛ Session.Commit (true) ؛ } catch (استثناء e) {session.rollback (true) ؛ E.PrintStackTrace () ؛ رمي استثناء جديد ("خطأ في إضافة طريقة") ؛ } أخيرًا {session.close () ؛ }} القائمة العامة <Sether> QueryAlluser () يلقي استثناء {SQLSession Session = mySessionFactory.getSqlSessionFactory (). opensession () ؛ قائمة <Sether> المستخدمين = جديد ArrayList <Sether> () ؛ حاول {string state = "usermapper.queryalluser" ؛ المستخدمون = session.selectlist (بيان ، 1) ؛ Session.Commit (true) ؛ } catch (استثناء e) {session.rollback (true) ؛ E.PrintStackTrace () ؛ رمي استثناء جديد ("خطأ في طريقة QueryAlluser") ؛ } أخيرًا {session.close () ؛ } إرجاع المستخدمين ؛ }} طبقة الخدمة:
النموذج: لا
طبقة العمل:
تحويل بيانات تنسيق JSON وإعادتها إلى الواجهة الأمامية ؛
حزمة Ms.Action ؛ استيراد java.io.printwriter ؛ استيراد java.util.list ؛ استيراد javax.servlet.http.httpservletrequest ؛ import javax.servlet.http.htttpletrespons org.apache.struts2.servletactionContext ؛ import com.google.gson.gson ؛ user useraction {logger logger = logger.getLogger (userAction.class) ؛ Userveservice userService = new UsperService () ؛ public void adduser () {printWriter out = null ؛ حاول {httpservletrequest request = servleTactionContext.getRequest () ؛ httpservletresponse استجابة = servleTactionContext.getResponse () ؛ استجابة. حساب string = request.getParameter ("حساب") ؛ اسم السلسلة = request.getParameter ("name") ؛ عنوان السلسلة = request.getParameter ("العنوان") ؛ مستخدم المستخدم = مستخدم جديد () ؛ user.setAccount (حساب) ؛ user.setaddress (العنوان) ؛ user.setName (name) ؛ UserService.add (المستخدم) ؛ out = response.getWriter () ؛ out.write (new gson (). tojson ("النجاح")) ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ logger.error (e.getMessage ()) ؛ if (out! = null) out.write (new gson (). tojson ("fail")) ؛ } أخيرًا {out.flush () ؛ out.close () ؛ }} public void QueryAlluser () {printWriter out = null ؛ حاول {httpservletresponse استجابة = servleTactionContext.getResponse () ؛ استجابة. gson gson = new gson () ؛ قائمة <Sether> userList = userService.queryAlluser () ؛ String gsonstr = gson.tojson (userlist) ؛ out = response.getWriter () ؛ out.write (gsonstr) ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ logger.error (e.getMessage ()) ؛ if (out! = null) out.write (new gson (). tojson ("fail")) ؛ } أخيرًا {out.flush () ؛ out.close () ؛ }}}رمز الواجهة الأمامية:
<٪@ page language = "java" contentType = "text/html ؛ charset = utf-8" pageencoding = "utf-8" ٪> <! "http://www.w3. 20px ؛} </style> </head> <body> <div style = "text-align:">> <viv> <silling> الحساب: </label> <input id = "account" type = "text"/> </viv> <div> <blabel> name: </label> <input id = "name" type = "text"/> type = "text"/> </viv> <iv> <button id = "adduser"> إضافة </button> </fire> <h3> قائمة المستخدم: </h3> <ul id = "userlist"> </ul> <script type = "text/javaScript" src = "js/jquery-1.1.1.1.js $ .ajax ({url: 'queryalluser.action' ، النوع: 'post' ، datatype: 'json' ، success: function (data) {try {for (var i = 0 ؛ i <data.length ؛ i ++) {$ ("#userlist"). style = 'color: red'> id = "+data [i] .id+" </span> ، account = "+data [i] .Account+" ، name = "+data [i] .Name+" ، address = "+data [i] .address+" </li>) ؛ }} catch (e) {} ؛ } ، خطأ: function (e) {Alert ("sys error") ؛ }}) ؛ $ ("#adduser"). on ("Click" ، function () {var account = $ ("#account"). val () ؛ var name = $ ("#name"). val () ؛ var address = $ ("#عنوان") } ، الدالة (البيانات) {$ ("#userlist"). }) ؛ }) ؛ </script> </body> </html>6. تأثير الاختبار:
STRUTS2 يعمل بشكل طبيعي.
اختبار ما إذا كانت ذاكرة التخزين المؤقت الثانوية على ما يرام والاستعلام عن جميع المستخدمين ؛
الاستعلام الأول: ذاكرة التخزين المؤقت ضائعة ، واتصل إلى قاعدة البيانات:
الاستعلامات المتعددة الثانية والقادمة ، ضربات ذاكرة التخزين المؤقت ، لا وصول قاعدة بيانات:
Author مشفر يشبه الرياح
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.