1. Buat proyek web baru dan tambahkan paket JAR di direktori lib
Paket Jar Utama: Paket Terkait Struts2, Paket Terkait MyBatis3.3, MySQL-Connector-Java-5.1.22-Bin.jar, Gson-2.1.jar
2. Konfigurasikan web.xml, tambahkan filter strutsprepareand executeFilter, dan menangani semua *. Aksi permintaan;
<? Xml Version = "1.0" encoding = "utf-8"?> <web-app xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns = "http://java.sun.com/xmlns =" http://java.com/xmlns = "http://java.com/xmlns = XSI: schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/we-pappe." "" "" "" "" "" "" "" "" "" <play-name> ms </play-name> <nilter> <nilter-name> struts2 </tilter-name> <filter-class> org.apache.struts2.dispatcher.ng.filter.strutsprepareand cy </filter-class> </filter> <filter-phter-phter-name> </filter-n-n-n-n-n-n-n-nool </filter/<filter-n-n-n-n-nool/ </filter-Mapping> <dreendic-filt-file-file> <creendak-file> index.jsp </celcome-file> </celcome-file-list> </seb-app>
Periksa kode sumber dofilter dari filter ini dan lakukan hal berikut:
1. Tentukan apakah URL yang dikecualikan oleh Struts diatur (Struts.action.excludepattern, dicocokkan dengan ekspresi reguler). Jika ada dan jalur saat ini memenuhi aturan, permintaan akan diteruskan ke objek berikutnya dalam rantai filter dan tidak akan diserahkan ke Struts2 untuk diproses.
if (ExculledPatterns! = null && Persiapan.
2. Temukan ActionMapping: Cari melalui metode persiapan findactionmapping. Jika tidak ditemukan, permintaan akan diteruskan ke objek berikutnya dalam rantai filter dan tidak akan diserahkan ke Struts2 untuk diproses; Jika ActionMapping ditemukan, metode ExecuteAction dari operasi eksekutasi dipanggil untuk mulai mengeksekusi tindakan; Angka berikut adalah kasus menemukan aksi aksi berdasarkan URL;
3. Konfigurasikan file struts.xml. Demo ini terutama menunjukkan transmisi data format JSON ke ujung depan, mengatur jenis hasil ke format JSON, dan tentu saja juga dapat diatur ke yang lain;
<? 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"> <struts.apache.org/dtds = "computes." computes. "comput." fals. "fals." falputs. " Name = "Default" Extends = "Struts-Default, JSON-Default"> <global-results> <result type = "json"> <param name = "root"> json </param> <param name = "ContentType"> Text/html </param> </hasilnya> </global-results> <action name = "AcDuser =" ACDUSer = "ADUCTE/ADUCT." name = "QueryAllUser" Method = "QueryAllUser"> <rence>. </hasilnya> </chere> </packer> <!-Tambahkan paket di sini-> </struts>
4. Mengkonfigurasi mybatis.xml dan usermapper.xml,
Mengkonfigurasi cache yang dapat dicaci maki dan aktifkan level 2;
Mengkonfigurasi Informasi Terkait DataSource: Jenis Formulir Kumpulan Koneksi Pooled, PoolMaximumactiveConnections memiliki jumlah koneksi aktif (yaitu, digunakan) kapan saja, nilai defaultnya adalah: 10.
Konfigurasikan pemetaan pemetaan kelas entitas // <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> <settings> <!--Enable Level 2 Cache--> <setting name = "cacheenabled" value = "true" /> < /settings> <lingkungan default = "pengembangan"> <lingkungan id = "pengembangan"> <transactionManager type = "jdbc" /> <datasource type = "pooled"> <properti nama = "driver" value = "com.mysql.jdbc.driver" value = "jdbc: mysql: // localhost: 3306 /demo" /> <name properti = "nama pengguna" value = "root" /> <name properti = "kata sandi" value = "admin" /> <nama properti = "poolmaMaMimumeConnection" value = "10" /<nama properti = "poolpingenabled" value = "value" value "value =" 10 " /<name property =" poolpingenabled "value =" value "value" value "nilai =" 10 " PoolpingQuery "/> </dateSource> </vesenper> </preensment> <mappers> <mapper resource =" ms/model/userMapper.xml "/> </phappers> </configuration>
Konfigurasikan usermapper.xml, konfigurasikan cache sebagai ehcache dan parameter terkait, ingat bahwa kelas entitas perlu mengimplementasikan antarmuka serial
<? 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.com nomapper naMapper" /> ---> <!-Menggunakan Ehcache Cache-> <cache type = "org.mybatis.caches.ehcache.loggingehcache"> <nama properti = "timeToidleseconds" value = "3600" /> <!-1 jam interval antara cache dari tanggal kreasi hingga waktu penampungan-> interval <" value = "3600"/> <!-1 jam setelah cache dibuat, waktu antara tanggal akses terakhir ke cache hingga waktu kedaluwarsa-> <name properti = "maxentrieslocalheap" value = "1000"/> <name properti = "maxentrieslocaldisk" value = "10000000"/> <name properte = "CEBERACHE =" CECHACHED "NAVE =" 10000000 "/> <NAME =" MAXEnTriesLocalDISK "LiRICY =" 10000000 "/> <NAME =" MAXEnTriesLocalDISK "LiRICHICTE" <!-baru-> <masukkan id = "saveUser" parameTerType = "ms.model.user"> masukkan ke dalam pengguna (akun, nama, alamat) nilai ( #{akun}, #{name}, #{alamat}) </masukkan <pilih id = "o.count, o.counte, hasil hasil =" ms.model.user "> o. </papper> 5. Kode Kunci
Lapisan Dao:
Pertama, buat kelas untuk mendapatkan SQLSessionFactory dan mendesainnya menjadi pola singleton;
Paket ms.dao.base; impor java.io.ioexception; impor org.apache.ibatis.io.resources; impor org.apache.ibatis.session.sqlsessionFactory; impor org.apache.apaction.sqlSessionFactoryBuilder; impor {sapache. SQLSessionFactory Sesiesfactory statis; private mysesessionFactory () {} public static SQLSessionFactory statis public static getSQLSessionFactory () {if (sessionFactory == null) {try {sessionFactory = sqlSessionFactoryBuilder baru (sumber daya. Kembalikan sessionfactory; } catch (ioException e) {logger.getLogger (mySessionFactory.class) .Error ("getSqlSessionFactory error."); e.printstacktrace (); kembali nol; }} else {return sessionFactory; }}}Berikutnya adalah Userdao, yang memperoleh SQLSession melalui opensession. Perhatikan bahwa kontrol transaksi dapat dilakukan melalui komit dan rollback SQLSession. Tentu saja, jika hanya ada satu operasi SQL, tidak akan ada kontrol transaksi (contoh ini hanya demo);
Paket ms.dao; import java.util.arraylist; import java.util.list; impor org.apache.atis.session.sqlsession; import ms.dao.base.mysessionFactory; import ms.model.user; Public Class Userdao {Public Void Add (pengguna) MysesessionFactory.getSQLSessionFactory (). OpenSession (); coba {string pernyataan = "usermapper.saveuser"; session.insert (pernyataan, pengguna); session.commit (true); } catch (Exception e) {session.rollback (true); e.printstacktrace (); Lempar pengecualian baru ("Kesalahan dalam Metode Tambah"); } akhirnya {session.close (); }} Daftar Publik <User> queryAllUser () melempar Exception {SQLSession session = mySessionFactory.getSQLSessionFactory (). OpenSession (); Daftar <User> user = new ArrayList <User> (); coba {string pernyataan = "usermapper.queryAllUser"; Users = session.selectList (pernyataan, 1); session.commit (true); } catch (Exception e) {session.rollback (true); e.printstacktrace (); lempar pengecualian baru ("Kesalahan dalam metode QueryAllUser"); } akhirnya {session.close (); } pengembalian pengguna; }} Lapisan Layanan:
Model: Tidak
Lapisan Tindakan:
Konversi ke data format JSON dan kembalikan ke ujung depan;
Paket ms.action; impor java.io.printwriter; impor java.util.list; import javax.servlet.http.httpservletrequest; impor orrglete.http. org.apache.struts2.servletactionContext; import com.google.gson.gson; UserAction kelas publik {logger logger = logger.getLogger (useraction.class); UserServer UserService private = UserserService baru (); public void addUser () {printwriter out = null; coba {httpservletRequest request = servletActionContext.getRequest (); HttpservletResponse response = servletActionContext.getResponse (); response.setContentType ("Teks/html; charset = utf-8"); String Account = request.getParameter ("akun"); Name string = request.getParameter ("name"); Alamat String = request.getParameter ("Alamat"); Pengguna pengguna = pengguna baru (); user.setAccount (akun); user.setAddress (alamat); user.setname (name); Userservice.add (pengguna); out = response.getWriter (); out.write (GSON baru (). TOJSON ("Success")); } catch (Exception e) {E.PrintStackTrace (); logger.error (e.getMessage ()); if (out! = null) out.write (GSON baru (). TOJSON ("FAIL")); } akhirnya {out.flush (); out.close (); }} public void queryAllUser () {printwriter out = null; coba {httpservletResponse response = servletActionContext.getResponse (); response.setContentType ("Teks/html; charset = utf-8"); GSON GSON = GSON baru (); Daftar <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 (GSON baru (). TOJSON ("FAIL")); } akhirnya {out.flush (); out.close (); }}}Kode front-end:
<%@ page language = "java" contentType = "text/html; charset = utf-8" pageEncoding = "utf-8"%> <! Doctype html public "-// w3c // dtd html 4.01 transisi // en" "http://www.w3.org/tr/html4/loose.dtd"><html><head><meta http-equiv =" content-type "content =" text/html; charset = UTF-8 "> <title> memasukkan judul di sini </title>. 20px;} </tyle> </head> <body> <Div style = "text-align: center;"> <ver> <label> akun: </label> <input id = "akun" type = "text"/> </div> <v> <"label> nama: </label> <input id =" name "type =" Text "//Div </Div> </label> <input ID =" name "type =" Text "/ID </Div> </label> <input ID =" name "type =" Text "//Div> type="text"/></div> <div><button id="addUser" >Add</button></div><h3>User List: </h3><ul id="userList"></ul><script type="text/javascript" src="js/jquery-1.11.1.min.js"></script><script> $(function() { $.ajax({ URL: 'QueryAllUser.action', type: 'Post', DataType: 'json', Success: function (data) {coba {for (var i = 0; i <data.length; i ++) {$ ("#userlist"). append ("<li> <span; style = 'color: red'> id = "+data [i] .id+" </span>, akun = "+data [i] .account+", name = "+data [i] .name+", address = "+data [i] .address+" </li> "); }} catch (e) {}; }, error: 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 }, Sukses (data) {coba {$ ("#UserList"). Append ("<li> Account ="+Account+", Name ="+Name+", Alamat ="+Alamat+"</li>"); }); }); </script> </body> </html>6. Efek uji:
Struts2 berjalan secara normal;
Uji apakah cache sekunder OK dan meminta semua pengguna;
Kueri Pertama: cache terlewatkan, akses database:
Beberapa kueri kedua dan berikutnya, hit cache, tidak ada akses basis data:
@Author Coder seperti angin
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.