Temel, üst yapıyı belirler: SpringMVC ortak konfigürasyonu

Bugün, SpringMVC'nin temel bir konfigürasyonunu tanıtacağız.Bu konfigürasyonların esnek kullanımı, geliştirme sırasında iş mantığını daha esnek bir şekilde ele almamızı sağlar.

Tamam, saçma konuşma, başlayalım.

SpringMVC temel yapılandırması (ek açıklamalar yoluyla yapılandırma, xml dışı yapılandırma) Bu makaledeki durumumuzda, eşleme yolunu ve gerçek sayfa konumunu çözmek için esas olarak ViewResolver aracılığıyla basit bir yapılandırma yapmak için bir MvcConfig sınıfı olacak, bu sınıf Genişlemeye devam edebilir ve daha fazla sorunu çözmesine izin verebilirsiniz. Birkaç tane listeleyeceğim:

  • Statik kaynak haritalama
  • Interceptor kullanımı
  • Global yapılandırma sorunları

ve daha fazlası. Bu sorunlar, yeni bir sınıfı yeniden tanımlayarak veya MvcConfig'i genişleterek çözülebilir. Tek tek bakalım.

Statik kaynak haritalama

Hepimiz SpringMVC'deki statik kaynak dosyalarına haritalama olmadan doğrudan erişildiğini biliyoruz.Bu statik kaynaklar çoğunlukla js dosyalarını, css dosyalarını, görüntü dosyalarını vb. İçerir, daha sonra bununla ayrı ayrı ilgilenmemiz gerekir, aksi takdirde sistem yolu bulamaz. Tamam, bu sorunun çözümü de çok kolay, farz edin ki src / main / resources / assets / img dizininde bir resmim var ve sonra bunu jsp sayfasında görüntülemek istiyorum, önce jsp sayfasına bir göz atalım:

< % @ page contentType = "text / html; charset = UTF-8" language = "java"% > < html > < baş > < Başlık > Merhaba Sang! < /Başlık > < / kafa > < vücut > < p > SpringMVC Dünyasına Hoş Geldiniz! < / p > < p > < img src = "../ varlıklar / img / 1.png" > < / p > < /vücut > < / html >

Ardından MVCConfig sınıfını oluşturuyoruz, etki yukarıdakiyle aynı, fark bu sefer WebMvcConfigurerAdapter'dan miras aldık ve ardından bu sorunu çözmek için WebMvcConfigurerAdapter sınıfındaki addResourceHandlers yöntemini yeniden yazmamızdır. aşağıdaki gibi:

@ Configuration @ EnableWebMvc @ ComponentScan ("org.sang") genel sınıf MVCConfig, WebMvcConfigurerAdapter {@Beanpublic InternalResourceViewResolver viewResolver () {InternalResourceViewResolver viewResolver = new InternalResourceViewResolver (); viewResolver.set); viewResolver.set); viewResolver.set ; viewResolver.setSuffix (". jsp"); viewResolver.setViewClass (JstlView.class); return viewResolver;} / *** / ** klasördeki alt dosyalar dahil tüm dosyalar anlamına gelir * / * tüm dosyalardır , Alt dosyalar içermez * / web projesinin kök dizinidir * @param kayıt * / @ Overridepublic void addResourceHandlers (ResourceHandlerRegistry kayıt defteri) {// İki *, / assets ile başlayan herhangi bir düzey yolunun resimleri almak için erişilebileceği anlamına gelir, örneğin < img src = "../ varlıklar / img / 1.png" > // A *, yalnızca varlıklar dizinindeki görüntü dosyalarına erişebileceğiniz anlamına gelir Registry.addResourceHandler ("/ assets / **"). AddResourceLocations ("classpath: / assets /");}}

Tamam, burada WebMvcConfigureAdapter devraldıktan sonra, içindeki birçok yöntemi yeniden yazabiliriz. Bu yöntemleri yeniden yazarak SpringMVC'yi yapılandırabiliriz. AddResourceHandler erişim yolunu, addResourceLocations ise dosya yerleştirme dizinini ifade eder.

Interceptor

Interceptor'lar JavaEE geliştirmede hala çok önemlidir.Garbled kod çözme, erişim kontrolü vb. Kullanılacaktır.Servlet kullanılırken filtreleme için bir Filter sınıfı vardır.Sonra SpringMVC de bu konuda bize uygun çözümler sunar.

Önleyiciyi tanımla

Interceptor tanımı için HandlerInterceptorAdapter'ı miras alabilir veya HandlerInterceptor arayüzünü uygulayabiliriz.Burada arayüz uygulamasını örnek olarak alıyorum:

public class MyInterceptors HandlerInterceptor uygular {public boolean preHandle (HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) Exception {System.out.println ("preHandlet, ObjectS, Object o) atar; return true;} public void postHervesRpones (Httplet ModelAndView modelAndView) {System.out.println ("postHandle");} public void afterCompletion (HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) Exception {System.out.println} sonrasında Exception ("sonra System.out.println}) atar;

PreHandle yöntemi istek gerçekleşmeden önce yürütülür, postHandle istek gerçekleştikten sonra çalıştırılır ve istek tamamlandığında sonraCompletion yürütülür.Aslında yürütme zamanlaması postHandle yönteminin yanındadır. Ardından, önleyiciyi MVCConfig sınıfına kaydetmek için aşağıdaki gibi addInterceptors yöntemini ekleyin:

@Overridepublic void addInterceptors (InterceptorRegistry kayıt defteri) {registry.addInterceptor (myInterceptors ());} @ Beanpublic MyInterceptors myInterceptors () {return new MyInterceptors ();}

Kayıt başarılı olduktan sonra tarayıcıyı ziyaret ettiğimizde yazdırma günlüğü aşağıdaki gibidir:

Global yapılandırma

Global kaynakların yapılandırması için, denetleyicinin global yapılandırmasını aynı yere koymak için @ControllerAdvice kullanabiliriz, böylece aşağıdaki sorunları birleşik bir şekilde ele alabiliriz:

  • 1. Genel istisna işleme
  • 2. Ön ayarlı anahtar / değer çiftleri, Modele bağlıdır
  • 3. Ön plan istek parametrelerini ön işleme

Tamam, onlara tek tek bakalım.

Küresel istisna işleme

Genel istisnalar esas olarak @ExceptionHandler ek açıklamasıyla çözülür. aşağıdaki gibi:

@ControllerAdvicepublic sınıfı ExceptionHandlerAdvice {// @ ExceptionHandler, müdahale koşullarını ayarlamak için kullanılır, burada tüm Exception @ ExceptionHandler (value = Exception.class) public ModelAndView istisnası (İstisna e, WebRequest isteği) {ModelAndView modelAndView = new ModelAndView ("hata" ); modelAndView.addObject ("errorMsg", e.getMessage ()); modelAndView döndür;}}

İlk olarak, @ControllerAdvice aracılığıyla bir denetleyici tavsiyesi bildirin. Bu açıklama @Component açıklamasını birleştirdiği için, bu sınıf otomatik olarak Spring kapsayıcısında bir Bean olarak kaydedilecektir. @ExceptionHandler, Value özniteliğinin filtreleme ve engelleme koşullarını temsil etmek için kullanıldığı küresel işlemeyi tanımlayabilir ve Exception.class tüm İstisnaların durdurulmasını temsil eder. ModelAndView oluşturulurken, iletilen hata, hatalı sayfayı gösterir. Tamam, denetleyiciye bir göz atalım, denetleyiciye şu yöntemi ekledim:

@RequestMapping ("/ user") public String kullanıcısı (@ModelAttribute ("msg") String msg, UserBean userBean) {System.out.println ("username:" + userBean.getUsername () + "; ve id: "+ userBean.getId ()); yeni IllegalArgumentException oluştur (" Üzgünüm, parametre anormal / @ModelAttribute: "+ msg);}

/ User adresini ziyaret ettiğimde direkt olarak bir istisna atıyorum.Bu istisna @ExceptionHandler ile not edilen ve filtre koşullarını karşılayan metot tarafından alınıp işlenecek.Tabii ki istisna metodunun içindeyiz.Bu metotta biz Error.jsp sayfasına tekrar gidin. Aynı zamanda buradaki parametreler de bir sonraki bölümde bahsedeceğim @ModelAttribute ek açıklamasını kullanıyor. Şu error.jsp sayfasına bir göz atalım:

< % @ page contentType = "text / html; charset = UTF-8" language = "java"% > < html > < baş > < Başlık > Bir şeyler yanlış gitti < /Başlık > < / kafa > < vücut > < p > < h1 > $ {errorMsg} < / h1 > < / p > < /vücut > < / html >

Bu sayfa çok basit, sadece hata mesajını görüntüleyin. Röportaj sonuçlarına bir göz atalım:

Konsolun çıkardığı hata mesajı:

Önceden ayarlanmış anahtar / değer çiftleri Modele bağlıdır

Bazen Modele anahtar / değer çiftlerini önceden ayarlamamız gerekir. Yukarıdaki örnekte olduğu gibi, şu anda ExceptionHandlerAdvice sınıfına başka bir yöntem ekleyebiliriz: @ModelAttributepublic void addAttributes (Model model) {model.addAttribute ("msg" , "ek bilgi");}

Bu yöntemde, anahtar-değer çiftini Modele bağlarız.Bağlantı tamamlandıktan sonra, herhangi bir Controller'da @ModelAttribute ek açıklamasını buradaki değere eşdeğer olan method parametresine ayarlayarak burada depolanan değere erişebiliriz. Global bir değişken. Tamam, buradaki röportaj vakası yukarıdakiyle aynı, bu yüzden tekrar etmeyeceğim.

Ön istek parametrelerini ön işleme

Tamam, başka bir gereklilik daha var.Bazen ön bürodan aktarılan parametreleri önceden işlememiz gerekir, örneğin, belirli bir parametreyi yasaklayın, bu da tek tip olarak işlenebilir, Tamam, ExceptionHandlerAdvice yönteminde yöntemler eklemeye devam edin

@InitBinderpublic void initBinder (WebDataBinder webDataBinder) {webDataBinder.setDisallowedFields ("id");}

Bu, istemci tarafından iletilen id parametresini göz ardı etmek anlamına gelir, ancak onu alma şekline dikkat edin.Bu, yalnızca parametre nesne aracılığıyla alındığında geçerlidir (kimlik yalnızca parametre nesne aracılığıyla alındığında engellenir). Şimdi, denetleyici yöntemine veya istisnayı atan yönteme bir göz atalım, ancak istisnayı atmadan önce, günlüğü yazdıracağım:

@RequestMapping ("/ user") public String kullanıcısı (@ModelAttribute ("msg") String msg, UserBean userBean) {System.out.println ("username:" + userBean.getUsername () + "; ve id: "+ userBean.getId ()); yeni IllegalArgumentException oluştur (" Üzgünüm, parametre anormal / @ModelAttribute: "+ msg);}

Konsolun çıktısına bakalım:

Tamam, kimlik engellendi.

Bu vakanın adresini indirin: https://github.com/lenve/JavaEETest/tree/master/Test18-SpringMVC3

Orijinal: https://blog.csdn.net/u012702547/article/details/53695789

Kaçış Planı | Makao'da galaksi gibi parlayan bir yaz
önceki
Köfte sarıldıktan sonra direkt olarak buzdolabına koymamayı unutmayın.Size bir numara öğreteceğim Köfte lezzetli ve kırılmamış
Sonraki
"Kara turist destinasyonu" etiketinden kurtulmak isteyen Çernobil nükleer santrali gezginler için gerçekten güvenli mi?
SpringMVC temel yapılandırması (ek açıklamalar aracılığıyla yapılandırma, xml dışı yapılandırma)
Evdeki fayanslar ne kadar kirli olursa olsun, zemindeki çatlakları kolayca temizlemek için bu numarayı size öğretin.
Çamaşır makinesini çamaşır yıkamak için kullanırken bunları ekleyin, çamaşırlara zarar vermez ve çok temiz yıkar
JAVA ile ilgili temel bilgiler: yansımayla ilgili bazı özet
Balık çorbası buharda pişirilirken bütün balık haşlanır veya kesilir ve haşlanır mı? Yanlış olanı seçerseniz balık çorbasının balıklı olması ve balığın yaşlı olması şaşırtıcı değil
Haşlanmış Crucian tofu çorbasına kaynar su veya soğuk su eklemeli miyim? Bu çorbanın güçlü beyaz bir tadı var ve çok lezzetli
Ekran penceresi çok kirli ve temizlenmesi zor mu? Bu yöntemler ile sökülmeden yeni gibi temiz ve parlak olabilir.
Hangzhou'da 14 yaşındaki bir kız evden kaçtıktan sonra tren istasyonunda bulundu ve polis onu arıyor.
Mutfak ocağına şişe ve kavanoz koymayın, çok dağınık! Bu 3 pozisyonu kullanın, temiz ve güzel
Mutfağın büyüklüğünden bağımsız olarak dekorasyon yaparken yağ ve kirliliği önlemek için bu noktalara dikkat edin, alanın yarısından tasarruf edin
Lingdingyang'da çivi gibi deldi
To Top