spring 学习2

时间:2023-03-09 03:04:25
spring 学习2
  1. package com.asm;
  2. //...省略导入的相关类
  3. public class MessageController implements Controller {
  4. public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {
  5. ModelAndView mav = new ModelAndView("message");
  6. mav.addObject("message", "您好!spring MVC");
  7. return mav;
  8. }
  9. }

解释一下:红色代表了去找目录前缀下的message.jsp页面;

下面的message我认为是在找页面上的元素,并赋值。

  1. <bean id="viewResolver"      class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  2. <property name="prefix" value="/WEB-INF/page/" />
  3. <property name="suffix" value=".jsp" />
  4. </bean>
  5. <bean name="/message.do" class="com.asm.MessageController"></bean>

message.jsp

<body>

Message:${message}

</body>

红色标签。

启动服务器,输入…/message.do访问测试。

逻辑:

message.do--->com.asm.MessageController-->message.jsp(ModelAndView mav = new ModelAndView("message");)

(1)启动服务器后,当我们向服务器发送message.do请求时,首先被在web.xml中配置的前端控制器DispatcherServlet拦截到。

(2)前端控制器把此请求转交给后端控制器,下面分析转交过程:当在spmvc-servlet.xml中查找能执行message.do请求的映射处理器时,发现没有能处理此请求的映射处理器,这时便使用默认的映射处理器BeanNameUrlHandlerMapping.我们还需注意:这种后端控制器的bean Name必须以“/”开头,并且要结合DispatcherServlet的映射配置。同时beanName支持通配符配置。比如如果配置:<bean name="/m*.do" class="com.asm.MessageController" /> 时,当访问messasge.do时也可以成功访问到MessageController类。

(3)BeanNameUrlHandlerMapping处理器,会查找在spring容器中是否在名为“message.do”的bean实例。当查找到此实例后,则把此bean作为处理此请求的后端控制器。同时把自身加到映射处理器链上,并向处理器链传递此请求。
(4)后端控制器进行处理,并返回视图。