springMVC框架入门
映射器:根据url找handler。有两个非注解的映射器,有注解的映射器(实际开发使用)。
适配器:根据对应的规则执行handler。有两个非注解的适配器,有注解的适配器(实际开发使用)。
多个映射器,多个适配器都可以并存。
使用非注解的开发方法存在弊端,里面只有一个方法,会使代码比较乱;
public ModelAndView handleRequest(HttpServletRequest arg0,HttpServletResponse arg1) throws Exception
使用注解的方法,可以写多个方法,方法名自己定义使用注解@controller即可;
源码分析:
前端控制器执行Dodispather()方法,
获取映射器,然后得到相应的handler,
获取适配器,执行相应的handler即controller,
执行完之后,得到结果modelandview,
视图渲染,将modleandview填充到request域;
非注解的方法:
在web.xml中配置前端控制器:
<servlet>
<servlet-name>springmvc</servlet-name>
<!-- 此处应加载源码,但是没有。。。。。。。所以没有提示 -->
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 通过contextConfigLocation配置springmvc加载的配置文件
(配置处理器映射器适配器等)如果不配置,默认加载的是/WEB-INF/springmvc-servlet.xml
-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<!-- 有三种配置方式 -->
<url-pattern>*.action</url-pattern>
</servlet-mapping>
<!-- 配置handler -->
<bean name="/queryItems.action" class="cn.itcast.ssm.controller.ItermsController1">
</bean>
写ItermsController1实现controller接口,实现方法;
public class ItermsController1 implements Controller {
public ModelAndView handleRequest(HttpServletRequest arg0,
HttpServletResponse arg1) throws Exception {
//调用service查找数据库,查询商品列表,这里先使用静态的数据模拟
List<Items> itemsList=new ArrayList<Items>();
//向静态list中填充数据
Items items_1 =new Items();
items_1.setName("联想笔记本");
items_1.setPrice(6000f);
items_1.setDetail("ThinkPad T430 联想笔记本电脑!");
Items items_2 = new Items();
items_2.setName("苹果手机");
items_2.setPrice(5000f);
items_2.setDetail("iphone6苹果手机!");
itemsList.add(items_1);
itemsList.add(items_2);
//返回ModelAndView
ModelAndView modelAndView=new ModelAndView();
//相当于request的setAttribute,在jsp页面中通过itemsList取数据
modelAndView.addObject("itemsList",itemsList);
//指定视图
modelAndView.setViewName("/WEB-INF/jsp/items/itemsList.jsp");
return modelAndView;
}
}
<!-- 配置映射器
将bean的name作为url进行查找,需要在配置handler时指定beanname(即URL)
-->
<bean
class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"
/>
<!-- 配置处理器适配器 ,查看源代码(此处没有加载),发现所有的处理器适配器都实现了handerAdapter-->
<bean
class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"
/>
<!-- 配置视图解析器 -->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver"
/>
使用注解的开发方法:
在spring.xml中添加注解的映射器,适配器,注解的映射器和适配器必须配套使用;
写controller类,使用注解:@controller;@RequestMapping(“/queryItems.action”);将方法和url映射,后面的.action可要可不要。
在spring.xml中配置handler,可以使用组件扫描进行配置,因为可能handler会比较多,组件扫描比较方便。
发表评论: