Strut2 menentukan apakah itu panggilan AJAX
1. Ajax dan bentuk bentuk tradisional
Bahkan, keduanya umumnya pasca permintaan melalui HTTP. Perbedaannya adalah bahwa setelah browser mengirimkan formulir formulir, ia mengharapkan server untuk mengembalikan halaman HTML lengkap. Panggilan AJAX dikeluarkan oleh objek XMLHTTPREQUEST (browser yang berbeda mungkin berbeda). Browser mengharapkan server untuk mengembalikan fragmen HTML, tetapi tidak ada persyaratan untuk JSON, XML, dll. Cara menggunakannya setelah kembali ke browser juga ditentukan oleh skrip JS itu sendiri.
2. Adalah permintaan jax
Jadi untuk sisi server, bagaimana menentukan apakah permintaan HTTP adalah panggilan AJAX? Ini membutuhkan header HTTP.
Kita dapat menilai dengan X-Request-dengan di header. Meskipun browser yang berbeda mengirim permintaan AJAX objek yang berbeda, jika jQuery menggunakan untuk mengirim permintaan AJAX, pengidentifikasi telah ditambahkan ketika jQuery mengimplementasikan Ajax secara internal. Kode Sumber JQuery adalah sebagai berikut: xhr.setRequestheader ("X-Requested-With", "XMLHTTPREQUEST");
Oleh karena itu, jika halaman front-end proyek mengirim permintaan AJAX melalui jQuery, penilaian ini aman.
Di bawah ini adalah informasi header yang dibawa oleh permintaan HTTP.
Pengajuan bentuk bentuk normal
=== mimeheaders === accept = */ *referer = http: // localhost: 8080/user2/toquerypage.actionaccept-language = zh-cnuser-agent = mozilla/4.0 (kompatibel; msie8.0; windows nt 6.1; wow64; trement/4.0. CLR3.5.30729;
Ajax Call (yaitu)
=== mimeheaders === X-requested-with = xmlHttprequestaccept-bahasa = zh-cnreferer = http: // localhost: 8080/user2/toquerypage.actionaccept = aplikasi/json, teks/javascript,*/*; q = 0,01content-type = Application/x-www-form-urlencodedaccept-encoding = gzip, deflateuser-agent = mozilla/4.0 (kompatibel; msie8.0; windows nt 6.1; wow64; trident/4.0; slcc2; .net clr 2.0.5077; 3.0.30729;
3. Dapatkan header permintaan http sedang beraksi
Di kelas Action, objek HTTPServletRequest diperoleh melalui antarmuka ServletRequestAware, dan kemudian informasi header yang kami inginkan diperoleh melalui metode GetHeader.
Basis kelas abstrak publik <Paramvo memperluas Baseparamvo, hasilnya memperluas BaseresultVo> memperluas ActionSupport mengimplementasikan servletRequestAware {string final statis privat AJAX_RESULT_NAME = "AjaxResult"; string final statis privat xhr_object_name = "xmlhttpRequest"; header string final private static_request_with = "X-requested-with"; / *** Objek permintaan, digunakan untuk menentukan apakah permintaan tersebut adalah panggilan AJAX*/ permintaan httpservletrequest pribadi; private paramvo paramvo; Hasil pribadi hasilvo; @Override public string execute () {string resultPage = Success; coba {resultVo = doExecute (paramvo); } catch (BaseException e) {resultPage = error; } if (xhr_object_name.equals (request.getHeader (header_request_with))) {resultPage = Ajax_result_name; } return HasilPage; }} Struts2 Performance Tuning Interceptor
Ketika kita perlu mencapai kebutuhan kecil tertentu dalam pekerjaan kita, kita mungkin juga melakukan survei sederhana untuk melihat apakah kerangka kerja open source yang kita gunakan sudah memiliki fungsi yang kita butuhkan, sehingga kita tidak harus berulang kali menciptakan roda.
Mari kita ambil pengujian kinerja sebagai contoh untuk melihat bagaimana menyelidiki apakah kerangka kerja Struts2 memiliki fungsi ini.
1. Struts-Default.xml
Karena banyak fungsi inti dari Struts2 diimplementasikan berdasarkan pencegat internal, pertama-tama kita perlu melihat apakah ia memiliki pencegat terkait tuning kinerja. Ini mengharuskan Anda untuk memeriksa file konfigurasi default struts-default.xml di strut2-core-2.3.1.2.jar.
<span style="white-space:pre"> </span><interceptor name="alias"/> <interceptor name="autowiring"/> <interceptor name="chain"/> <interceptor name="conversionError"/> <interceptor name="cookie"/> <interceptor name="clearSession" /> <interceptor name="createSession" /> <interceptor name="debugging" /> <interceptor name = "execandWait"/> <interceptor name = "exec"/> <interceptor name = "execandwait"/> <intercepToNToMerChoNToName = "Exception"/> <Name Interceptor = "Exception"/<Interceptor Name = "Fileupload"/<Name Interceptor = "i18n"/Interceptor = "Fileupload"/<Interceptor Name = "i18n" name="modelDriven"/> <interceptor name="scopedModelDriven"/> <interceptor name="params"/> <interceptor name="actionMappingParams"/> <interceptor name="prepare"/> <interceptor name="staticParams"/> <interceptor name="scope"/> <interceptor name="servletConfig"/> <interceptor name="timer"/> <interceptor name="timer"/> <interceptor name=" name="token"/> <interceptor name="tokenSession"/> <interceptor name="validation"/> <interceptor name="workflow"/> <interceptor name="store" /> <interceptor name="checkbox" /> <interceptor name="profiling" /> <interceptor name = "peran" /> <interceptor name = "annotationworkflow" /> <interceptor name = "multiselect" />
Struts2 memiliki banyak pencegat yang dibangun seperti peti harta karun. Anda dapat melihat bahwa profil mungkin merupakan pencegat yang memenuhi kebutuhan kita. Kemudian buka kode sumber dan cari tahu sekarang.
2. Profilingaktif InTerCeptor
org.apache.struts2.interceptor.profilingactivationInterceptor.java
Public Class ProfilingactivationInterceptor ExtendSAbStractInterceptor {Private String ProfilingKey = "Profiling"; devmode boolean pribadi; @Inject (strutsconstants.struts_devmode) public void setDevMode (mode string) {this.devMode = "true" .equals (mode); } @Override Public String Intercept (ActionInVocationInVocation) melempar Exception {if (devMode) {objek val = Invocation.getInvocateContext (). GetParameters (). Get (profileKey); if (val! = null) {string sval = (val instance dari string? (string) val: ((string []) val) [0]); boolean mengaktifkan = "ya" .equalsignorecase (sval) || "Benar" .EqualSignorecase (Sval); UtilTimerStack.setActive (Enable); Invocation.getInvocationContext (). getParameters (). Ramping (ProfilingKey); }} return Invocation.invoke (); }}
Dari kode sumber, kita dapat melihat bahwa selama parameter permintaan HTTP yang dikirim oleh browser termasuk profil = true atau ya, pencegat kinerja akan menyalakan kelas alat timer dan mencetak waktu eksekusi tindakan.
3. Struts.xml
Karena Profil Interceptor tidak termasuk dalam Default DefaultStack, pertama -tama kita harus menambahkannya ke tumpukan pencegat khusus kami.
<Paket nama = "AJAX-DEFAULT" Extends = "Velocity-Default"> <Rance-types> <Rance-type name = "json"/> </result-types> <sterceptors> <interceptor-stacknameInceptor-refname-refname = "AJAXInceptorStack"> <Interceptceptor-RefNameCeptor = "AJAXInTECTACK"> <interceptceptor-refnameceptor = "AJAXICTECTACK"> Name = "Profiling"/> </sterceptor-stack> </sterceptors> <default-interceptor-refnamedefault-interceptor-refname = "ajaxinterceptorStack"/> <global-results> <name hasil = "paramies" paramies "type =" json "<param name =" PARAMPOPERT "PARINACET" PARAMET "PARAMET" PARAMET "PARAMET" PARAMET "PARAMET" PARAMER " name = "IGNIERACHY"> FALSE </param> </RAEST> </GLOBAL-RESULTS> </pack Package>
4. Userview.js
Anda sekarang dapat memodifikasi parameter panggilan AJAX, dan kemudian menambahkan parameter profil untuk memulai penyetelan kinerja.
fungsi searchAllUser () {jQuery.AJAX ({type: "Post", url: "SearchAllUser.action", ProcessData: True, DataType: 'JSON', Data: jQuery ("#UserQueryForm"). Serialize () + "& Profiling = Ya", Success: function (data) {if). GenerAteTableFromjson ("Hasil", Data.Resultrows); }
5. Efek akhir
Hasil pencetakan adalah sebagai berikut. Selain waktu eksekusi total, waktu eksekusi metode tindakan dan waktu rendering hasil terdaftar secara terpisah.