AnnotationMethodHandlerAdapter.invokeHandlerMethod()
. Burada bir ModelAndView
, ServletHandlerMethodInvoker.getModelAndView()
aracılığıyla alınacaktır.
Durumunuza göre, getModelAndView()
, işleyici yönteminin null
dönüş değerini sağlar. getModelAndView()
yöntemi, dönüş değeri türünü denetler, ancak as in Java null is never an instanceof any class, bu yöntemin mantığı yeni bir ModelAndView
oluşturur. Yeni bir ModelAndView
, başlangıçta görünüm özelliği null
olarak ayarlanmıştır. ModelAndView
nesnesine (mv.hasView()
) ile ilişkili bir View
varsa
sonra daha sonra çağrı yığını kadar DispatcherServlet.doDispatch()
olarak, bir test yoktur. view == null
, doDispatch()
'ün mantığı mv.setViewName(getDefaultViewName(request))
numaralı telefonu çağırır. Varsayılan uygulaması DefaultRequestToViewNameTranslator
olan kayıtlı RequestToViewNameTranslator
'a delege eder. Bu alt sınıf, sizin durumunuzda form
durumundaki istek URI'sini bir görünüm adına çevirir.
Daha sonra doDispatch()
yılında, render()
aracılığıyla ->resolveViewName()
, bu numune ViewResolver
s görünüm adının form
sağlanmaktadır. Bu örnekte sadece bir tane ViewResolver
, InternalResourceViewResolver
kullanılmıştır. Ayrıca, bu InternalResourceViewResolver
, /WEB-INF/views/
önekini ve .jsp
sonekini görünüm adına eklemek için src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml
'da yapılandırılmıştır. Toplam olarak, /WEB-INF/views/form.jsp
JSP dosyasını kullanarak bir View
oluşturur. Neyse ki, tam olarak bu konumda bir JSP dosyası var.
RequestToViewNameTranslator Bean'in açıkça sağlanması gerekiyor mu yoksa Spring bunu kutudan çıkarır mı? – acvcu