1. Создайте новый веб -проект и добавьте пакет JAR в каталог LIB
Основные баночные пакеты: пакет, связанный с Struts2, Mybatis3.3, пакет Mysql-Connector-Java-5.1.22-bin.jar, Gson-2.1.jar
2. Настройте web.xml, добавьте фильтр strutspreareandexecutefilter и обрабатывайте все запросы *.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" = "webapp" = "webapp" = "webapp_dapp_3_0.0. <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-pattern>*. Action </url-pattern> </filter-mapping> <selclive-file-list> <selcopply-file> index.jsp </wervedied-file> </werveding-file-list> </web-app>
Проверьте исходный код DOFILTER этого фильтра и сделайте следующее:
1. Определите, установлен ли URL, исключенный с помощью стойки (struts.action.excludepattern, сочетается с регулярным выражением). Если есть и текущий путь соответствует правилам, запрос будет направлен в следующий объект в цепочке фильтров и не будет передан Struts2 для обработки.
if (excudedPatterns! = null && prepare.isurlexcluded (request, excudedPatterns)) {chain.dofilter (запрос, ответ);}2. Найти действие: поиск по методу FindActionMapping PrepareParations. Если это не найдено, запрос будет направлен в следующий объект в цепочке фильтров и не будет передан Struts2 для обработки; Если отображение действий найдено, метод выполнения ExecuteAction вызывается для начала выполнения действия; Следующий рисунок является случай обнаружения действий на основе URL;
3. Настройте файл struts.xml. Эта демонстрация в основном демонстрирует передачу данных формата формата JSON на переднюю часть, устанавливает тип результата в формат JSON, и, конечно, его также можно установить на другие;
<? xml version = "1.0" Encoding = "UTF-8"?> <! Doctype Struts Public "-// Apache Software Foundation // Конфигурация Struts DTD 2.3 // en" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <constance name = "struct.devmode"/stacktes "/stachut.13.dtd"/struts> <strest. name = "default" extends = "struts-default, json-default"> <slobal-results> <result type = "json"> <param name = "root"> json </param> <param name = "contentype"> text/html </param> </result> </global-results> <action name = "addUser" method = "addUser"> <//ressure-results> <section> </result>. name = "QueryAlluser" method = "QueryAlluser"> <Slust>. </result> </action> </package> <!-добавить пакеты здесь-> </struts>
4. Настройте mybatis.xml и usermapper.xml,
Настройка Cacheenabled на True и включить кэш уровня 2;
Настройка информации, связанной с данными: тип пула объединенного соединения, PoolMaximActiveConnections имеет количество активных (то есть используемых) соединений в любое время, значение по умолчанию составляет: 10.
Настройка картирования класса объекта // <mapper resource = "ms/model/usermapper.xml"/>
<? xml version = "1.0" Encoding = "UTF-8"?> <! Конфигурация doctype public "-// mybatis.org//dtd sql cap config 3.0 // en" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <figureture> <vitiable> <tryable>-our ineable 2-le tride 2 config.dtd " name = "cacheenabled" value = "true" /> < /settings> <среды default = "development"> <среда идентификатор = "разработка"> <transactionManager type = "jdbc" /> <dataSource type = "Booled"> <Property Name = "Driver" value = "mysql.jdbc.driver" /> <property name = "url" value="jdbc:mysql://localhost:3306/demo" /> <property name="username" value="root" /> <property name="password" value="admin" /> <property name="poolMaximumActiveConnections" value="10" /> <property name="poolPingEnabled" value="true"/> <property name="poolPingQuery" value="select 1 as PoolpingQuery "/> </dataSource> </environment> </erviness> <mappers> <mapper resource =" ms/model/usermapper.xml "/> </mappers> </configuration>
Настройте USERMAPPER.XML, настройте кэш как eHcache и соответствующие параметры, помните, что класс объектов должен реализовать сериализуемый интерфейс
<? xml version = "1.0" Encoding = "UTF-8"?> <! Doctype Mapper public "-// mybatis.org//dtd mapper 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> mapper nightspace =" usermap "! /> ---> <!-Использование кэша ehcache-> <cache type = "org.mybatis.caches.ehcache.loggingehcache"> <name = "timeToidLeseconds" value = "3600" /> <!-1 час. Интерес между кешем с даты создания до времени истечения-> <! value = "3600"/> <!-1 час после создания кэша, время между датой последнего доступа к кэше ко времени истечения срока действия-> <Property Name = "maxEntrieslocalHeap" value = "1000"/> <Property Name = "maxEntrieslocaldisk" value = "10000000"/> <свойство = "memoryStoreVictionpolcypolcy" value "/>"/> "value"/"/> <>". <!-new-> <insert id = "saveUser" parameterType = "ms.model.user"> insert в пользователь (учетная запись, имя, адрес) values ( #{account}, #{name}, #{адрес}) </insert> <select id = "QueryAlluser" ulceedtype = "ms.model.User" u.address от пользователя u </select> </mapper> 5. Код ключа
Слой DAO:
Во -первых, создайте класс для получения sqlSessionFactory и спроектировать его в одноэлементный шаблон;
Пакет Ms.dao.base; импорт java.io.ioexception; import org.apache.ibatis.io.resources; import org.apache.ibatis.session.sqlsessionFactory; импорт org.apache.ibatis.session.sqlsessionFactorder; Import org.Apache.log4j.loggergecresseCfortfactfulder; Import org.Apache. SQLSessionFactory SessionFactory; private mysessionFactory () {} public static synchronized sqlSessionFactory getSqlSessionFactory () {if (sessionFactory == null) {try {sessionFactory = new sqlSessionFactoryBuilder (). Build (resources.getResourCeasReard ("mybatis-config.xml"); return SessionFactory; } catch (ioException e) {logger.getLogger (mySessionFactory.class) .error ("getSqlSessionFactory ошибка."); e.printstacktrace (); вернуть ноль; }} else {return sessionFactory; }}}Далее - userdao, который получает SQLSession через открытую. Обратите внимание, что управление транзакциями может быть выполнено через коммит SQLSession и откат. Конечно, если есть только одна операция SQL, не будет никакого управления транзакциями (этот пример - просто демонстрация);
Пакет Ms.dao; import java.util.arraylist; import java.util.list; import org.apache.ibatis.session.sqlsession; import ms.dao.base.mysessionFactory; импорт ms.model.user; public class userdao {public void add (пользователь пользователя) tophos исключительно (sqlsessessessed = sessedsesessessessessessessessed = MysessionFactory.getSqlSessionFactory (). OpenSession (); try {string atportion = "usermapper.saveuser"; session.insert (оператор, пользователь); session.commit (true); } catch (Exception e) {session.rollback (true); e.printstacktrace (); бросить новое исключение («ошибка в методе добавления»); } наконец {session.close (); }} public List <user> QueryAlluser () Throws Exception {sqlSession Session = mySessionFactory.getSqlSessionFactory (). OpenSession (); Список <user> users = new ArrayList <user> (); try {string ratement = "usermapper.queryalluser"; users = session.selectlist (оператор, 1); session.commit (true); } catch (Exception e) {session.rollback (true); e.printstacktrace (); бросить новое исключение («ошибка в методе QueryAlluser»); } наконец {session.close (); } вернуть пользователи; }} Служба уровня:
Модель: нет
Слой действия:
Преобразовать в данные формата JSON и вернуть их на переднюю часть;
Пакет Ms.Action; импорт java.io.printwriter; import java.util.list; импорт javax.servlet.http.httpservletrequest; импорт javax.servlet.http.httpservletresponse; импорт Ms.model.user; importmserserservice; импорт. 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; try {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 ("Адрес"); Пользователь пользователь = новый пользователь (); user.setAccount (учетная запись); user.setAddress (адрес); user.setname (имя); userservice.add (пользователь); out = response.getWriter (); out.write (new gson (). Tojson ("успех")); } catch (Exception 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; try {httpservletresponse response = servletactionContext.getResponse (); response.setContentType ("text/html; charset = utf-8"); Gson Gson = new Gson (); Список <user> userlist = userservice.queryalluser (); String gsonstr = gson.tojson (userlist); out = response.getWriter (); out.write (gsonstr); } catch (Exception 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"%> <! doctype html public "-// w3c // dtd html 4.01 transitional // en"-// w3c // dtd html 4.01 // en "http://www.w3.org/tr/html4/loose.dtd"><html><head><meta http-equiv =" content-type "content =" text/html; charset = utf-8 "> <teply-type здесь </title> <style> .mt20 {margin-top: margin-top: 20px;} </style> </head> <body> <div style = "text-align: center;"> <div> <babel> учетная запись: </label> <input id = "account" type = "text"/> </div> <div> <babel> name: </label> <input use = name "type ="/> </div> <div> <div> <dip> type = "text"/> </div> <div> <button id = "Adduser"> добавить </button> </div> <h3> Список пользователей: </h3> <ul id = "userlist"> </ul> <script type = "text/javascript" src = "js/jquery-1.11.1.min.js"> </script> (script> <script> () () () () <) <) <). $ .ajax ({url: 'Queryalluser.action', type: 'post', datatype: 'json', success: function (data) {try {for (var i = 0; i <data.length; i ++) {$ ("#user list"). 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 = $("#address").val(); $.ajax({ url : 'addUser.action', type : 'post', dataType : 'json', data : { account : account, name : name, address : address } успех: функция (data) {try {$ ("#userlist"). }); }); </script> </body> </html>6. Тестовый эффект:
Struts2 работает нормально;
Проверьте, в порядке ли вторичный кэш, и запрашивайте всех пользователей;
Первый запрос: кэш пропустил, доступ к базе данных:
Второе и следующее несколько нескольких запросов, кэш -хиты, без доступа к базе данных:
@author, похожий на ветру, кодировщик
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.