1. 새 웹 프로젝트를 만들고 LIB 디렉토리에 JAR 패키지 추가
메인 JAR 패키지 : Struts2 관련 패키지, MyBatis3.3 관련 패키지, MySQL-Connector-Java-5.1.22-Bin.jar, GSON-2.1.jar
2. Web.xml을 구성하고 필터 strutsprepareandexecuteFilter를 추가하고 모든 *.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_3_0.xsd"3. ""webapp_ "" " <display-name> ms </display-name> <filter> <filter-name> struts2 </filter-name> <filter-class.apache.struts2.dispatcher.ng.filter.strutsprepareanDexecuteFilter </filter class> </filter> <filter-name> struts2 </filter-name> <Url-Pattern>*. Action </url-pattern> </필터-맵핑> <Welcome-File-List> <welcome-file> index.jsp </welcome-file> </welcome-file-list> </web-app>
이 필터의 도필터 소스 코드를 확인하고 다음을 수행하십시오.
1. Struts에 의해 제외 된 URL이 설정되어 있는지 여부를 결정하십시오 (struts.action.excludepattern, 정규 표현식과 일치). 현재 경로가 규칙을 충족하는 경우, 요청은 필터 체인의 다음 객체로 전달되며 처리를 위해 Struts2에 양도되지 않습니다.
if (fexcludedPatterns! = null && repay.isurlexcluded (request, bexcludedPatterns)) {chain.dofilter (요청, 응답);}2. ActionMapping 찾기 : FindActionMapping의 준비 기능을 통해 검색하십시오. 찾을 수없는 경우, 요청은 필터 체인의 다음 객체로 전달되며 처리를 위해 Struts2로 넘겨지지 않습니다. ActionMapping이 발견되면 ExecuteOperations의 ExecuteAction 방법이 호출되기 시작합니다. 다음 수치는 URL을 기반으로 액션 맵핑을 찾는 경우입니다.
3. struts.xml 파일을 구성하십시오. 이 데모는 주로 JSON 형식의 데이터가 프론트 엔드로 전송되는 것을 보여주고 결과 유형을 JSON 형식으로 설정하며 물론 다른 것들로 설정할 수도 있습니다.
<? xml version = "1.0"encoding = "utf-8"?> <! doctype struts public "-// apache 소프트웨어 재단 // dtd struts configuration 2.3 // en" "http://struts.apache.org/dtds/struts-2.3.dtd"> 이름 = "default"extends = "struts-default, json-default"> <global-restults> <result type = "json"> <param name = "root"> json </param> <param name = "contentType"> text/html </param> </resent> <action name = "addUser"method = "retus"> ridgus "> 이름 = "QueryAllUser"method = "QueryAllUser"> renuct>.
4. mybatis.xml 및 usermapper.xml 구성
Cacheenabled를 true로 구성하고 레벨 2 캐시를 활성화합니다.
DataSource 관련 정보 구성 : 유형은 풀링 된 연결 풀 양식, PoolMaxumActiveConnections는 언제든지 활성 (사용 중) 연결 수가 있습니다. 기본값은 다음과 같습니다.
엔티티 클래스 매핑 매핑 매핑 // <Mapper resource = "ms/model/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-3-config.dtd"> <configuration> <! 이름 = "Cacheenabled"value = "true" /> < /settings> <환경 기본값 = "Development"> <Environment id = "Development"> <TransactionManager type = "jdbc" /> <dataSource type = "plated"> <속성 이름 = "driver"value = "com.mysql.jdbc.driver" /> <속성 이름 = "url" value = "jdbc : mysql : // localhost : 3306 /demo" /> <property name = "username"value = "root" /<property name = "valess"value = "admin" /> <property name = "pluthmaxumativeconnection"value = "10" /> <property name = "value ="select ""select ""as as puttupingequery "as PoolpingQuery "/> </dataSource> </환경> </환경> <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"> <-------------------------- <cash ">. <!-ehcache cache를 사용합니다-> <cache type = "org.mybatis.caches.ehcache.loggingehcache"> <property name = "timetoidleseconds"value = "3600"/> <!-1 시간 생성 날짜부터 만료 시간까지의 간격-> <value = "3600"> 1 "/<3600 캐시가 생성 된 후, 만료 시간에 대한 캐시에 대한 마지막 액세스 날짜 사이의 시간-> <속성 이름 = "maxEntrieslocalHeap"value = "1000"/> <property name = "maxEntRiesLocalDisk"value = "100000000"/> <property name = "MemoryStoreEvictionPolicy"value ""lru "/> </cache> </cache" parametertype = "ms.model.user"> user에 삽입 (계정, 이름, 주소) 값 ( #{ac 5. 키 코드
DAO 레이어 :
먼저, sqlsessionfactory를 얻는 클래스를 만들고 그것을 싱글 톤 패턴으로 설계하십시오.
패키지 Ms.dao.base; import java.io.ioexception; import org.apache.ibatis.io.resources; import org.apache.ibatis.session.sqlsessionfactory; import org.apache.ibatis.session.sqlsessionactorybuilder; import org.apache.log4j.logger; sqlsessionFactory sessionFactory; private mysessionFactory () {} public static synchronized sqlsessionfactory getSqlsessionFactory () {if (sessionFactory == NULL) {try {sessionFactory = new SqlSessionActoryBuilder (). 빌드 (Resources.getResourCeAsReader ( "myBatis-config.xml"); 반품 세션 factory; } catch (ioException e) {logger.getLogger (mySessionFactory.class) .error ( "getSqlSessionFactory error."); e.printstacktrace (); 널 리턴; }} else {return sessionFactory; }}}다음은 Oredession을 통해 SQLSESSION을 얻는 userDao입니다. 트랜잭션 제어는 SQLSESSION의 커밋 및 롤백을 통해 수행 할 수 있습니다. 물론 SQL 작업이 하나만 있으면 트랜잭션 제어가 없을 것입니다 (이 예제는 데모 일뿐입니다).
패키지 Ms.dao; import java.util.arraylist; import java.util.list; import org.apache.ibatis.session.sqlsession; import ms.dao.base.mysession actory; import ms.model.user; public user void add (사용자 사용자) 예외 {sqlsession session = {sqlsession session = import ms.model.user ms.model.user. mysessionFactory.getSqlSessionFactory (). OpenSession (); try {string state = "usermapper.saveuser"; session.insert (문, 사용자); 세션 .commit (true); } catch (예외 e) {session.rollback (true); e.printstacktrace (); 새로운 예외를 던지십시오 ( "추가 메소드의 오류"); } 마침내 {session.close (); }} public list <user> queryAllUser ()는 예외를 {sqlsession session = mySessionFactory.getSqlSessionFactory (). OpenSession (); List <user> user = new ArrayList <user> (); try {String state = "usermapper.queryalluser"; user = session.selectList (Statement, 1); 세션 .commit (true); } catch (예외 e) {session.rollback (true); e.printstacktrace (); 새로운 예외를 던지십시오 ( "QueryAllUser 메소드의 오류"); } 마침내 {session.close (); } 반환 사용자; }} 서비스 계층 :
모델 : 아니요
액션 레이어 :
JSON 형식 데이터로 변환하여 프론트 엔드로 반환하십시오.
Package Ms.Action; import java.io.printwriter; import java.util.list; import javax.servlet.http.httpservletrequest; import javax.servlet.http.http.htttp.htttp.htttp.htttp.htttp.httpervletresponse; import ms.model.user; import ms.uservice; import org.apchache org.apache.struts2.servletactioncontext; import com.google.gson.gson; public class useraction {logger logger = logger.getLogger (userAction.class); private userervice userervice = new Userservice (); public void adduser () {printwriter out = null; {httpservletrequest request = servletactionContext.getRequest (); httpservletResponse 응답 = servletactionContext.getResponse (); Response.setContentType ( "Text/Html; charset = utf-8"); 문자열 계정 = request.getParameter ( "계정"); 문자열 이름 = request.getParameter ( "name"); 문자열 주소 = request.getParameter ( "주소"); 사용자 user = 새 사용자 (); user.setAccount (계정); user.setAddress (주소); user.setName (이름); userervice.add (user); out = response.getWriter (); out.write (New Gson (). Tojson ( "Success")); } catch (예외 e) {e.printstacktrace (); logger.error (e.getMessage ()); if (out! = null) out.write (new gson (). tojson ( "실패")); } 마침내 {out.flush (); out.close (); }} public void queryAllUser () {printwriter out = null; {httpservletResponse 응답 = servletactionContext.getResponse (); Response.setContentType ( "Text/Html; charset = utf-8"); GSON GSON = NEW GSON (); List <user> userList = userErvice.queryAllUser (); 문자열 GSONST = GSON.TOJSON (userList); out = response.getWriter (); out.write (gsonst); } catch (예외 e) {e.printstacktrace (); logger.error (e.getMessage ()); if (out! = null) out.write (new gson (). tojson ( "실패")); } 마침내 {out.flush (); out.close (); }}}프론트 엔드 코드 :
<%@ page language = "java"contmenttype = "text/html; charset = utf-8"pageencoding = "utf-8"%> <! doctype html public "-// w3c // dtml 4.01 Transitional // en" "http://www.w3.org/tr/tr/tr/html4/loose.dtd"> html> html> http-quiv ="content-type "content ="text/html; charset = utf-8 "> <title> 제목 </title> <style> .mt20 {margin-top. 20px;} </style> </head> <bod> <div style = "text-align : center;"> <div> <label> 계정 : </label> <입력 id = "ac "텍스트"/> </div> <div> <버튼 id = "Adduser"> 추가 </button> </div> <h3> 사용자 목록 : </h3> <ul id = "userList"> </ul> <Script Type = "Text/javaScript"src = "js/jquery-1.11.1.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 ++) {$ ( "#userList"). style = 'color : red'> id = "+data [i] .id+"</span>, ac }} catch (e) {}; }, error : function (e) {alert ( "sys error"); }}); $ ( "#addUser"). on ( "click", function () {var acc 함수 (데이터) {$ ( "#userlist"). }); }); </script> </body> </html>6. 테스트 효과 :
struts2는 정상적으로 실행됩니다.
보조 캐시가 정상인지 테스트하고 모든 사용자를 쿼리하십시오.
첫 번째 쿼리 : 캐시 누락, 데이터베이스 액세스 :
두 번째 및 다음 여러 쿼리, 캐시 히트, 데이터베이스 액세스 권한 없음 :
@Author 바람과 같은 코더
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.