1.springmvc框架
1.1什么是springmvc
springmvc是spring框架的一个模块,springmvc和spring无需通过中间整合层进行整合
springmvc是一个基于mvc的框架
1.2 什么是mvc
mvc是一个设计模式,mvc在B/S系统下的应用
前端控制器:比如structs2的filter,springmvc就是dispatcher-servlet
在struct中国的action就是后端控制器,springmvc就是Handler处理器(平常叫做controller)
1.3springmvc框架
8.根据逻辑视图名解析成真正的视图(jsp)
10.模型数据在modelandview中
订单表order 订单明细表orderdetail
用户表user 商品信息表item
配置handler,非注解的Mapping与Adapter
<!-- 配置Handler --> <bean id="itemsController1" name="/queryItems_test.action" class="cn.itcast.ssm.controller.ItemsController1" /> <!-- 配置另外一个Handler --> <bean id="itemsController2" class="cn.itcast.ssm.controller.ItemsController2" /> <!-- 处理器映射器 将bean的name作为url进行查找 ,需要在配置Handler时指定beanname(就是url) 所有的映射器都实现 HandlerMapping接口。 --> <!-- 第一种映射器,根据handler的name=“*********”来映射url ,不要要制定handler的id--> <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" /> <!--简单url映射 --> <!-- 第二种映射器,根据handler的id=“*********”来映射url--> <!-- 多个映射器可以并存,就是说多个url地址都可以访问itemsController1 ,根据name或者根据prop的(一个或多个)key--> <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <props> <!-- 对itemsController1进行url映射,url是/queryItems1.action --> <prop key="/queryItems1.action">itemsController1</prop> <prop key="/queryItems2.action">itemsController1</prop> <prop key="/queryItems3.action">itemsController2</prop> </props> </property> </bean> <!-- 处理器适配器 所有处理器适配器都实现 HandlerAdapter接口 --> <!-- 用SimpleControllerHandlerAdapter,必须实现Controller接口,eg:itemsController1--> <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" /> <!-- 另一个非注解的适配器 --> <!-- 用HttpRequestHandlerAdapter,必须实现HttpRequestHandler接口,ItemsController2--> <bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"/>
<!-- 视图解析器 解析jsp解析,默认使用jstl标签,classpath下的得有jstl的包 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> </bean>
public class ItemsController1 implements Controller { @Override public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) 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的setAttribut,在jsp页面中通过itemsList取数据 modelAndView.addObject("itemsList", itemsList); //指定视图 modelAndView.setViewName("/WEB-INF/jsp/items/itemsList.jsp"); return modelAndView; } }
public class ItemsController2 implements HttpRequestHandler { @Override public void handleRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //调用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); //设置模型数据 request.setAttribute("itemsList", itemsList); //设置转发的视图 request.getRequestDispatcher("/WEB-INF/jsp/items/itemsList.jsp").forward(request, response); //使用此方法可以通过修改response,设置响应的数据格式,比如响应json数据 /* response.setCharacterEncoding("utf-8"); response.setContentType("application/json;charset=utf-8"); response.getWriter().write("json串");*/ } }
注解的Mapping与Adapter
handler用组件扫描注册为bean,
<!-- 对于注解的Handler可以单个配置 实际开发中建议使用组件扫描 --> <!-- <bean class="cn.itcast.ssm.controller.ItemsController3" /> --> <!-- 可以扫描controller、service、... 这里让扫描controller,指定controller的包 --> <context:component-scan base-package="cn.itcast.ssm.controller"></context:component-scan> <!--注解映射器 --> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/> <!--注解适配器 --> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/> <!-- 使用 mvc:annotation-driven代替上边注解映射器和注解适配器配置 mvc:annotation-driven默认加载很多的参数绑定方法, 比如json转换解析器就默认加载了,如果使用mvc:annotation-driven不用配置上边的RequestMappingHandlerMapping和RequestMappingHandlerAdapter 实际开发时使用mvc:annotation-driven --> <!-- <mvc:annotation-driven></mvc:annotation-driven> -->
<!-- 视图解析器 解析jsp解析,默认使用jstl标签,classpath下的得有jstl的包 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> <!-- 配置jsp路径的前缀 --> <property name="prefix" value="/WEB-INF/jsp/"/> <!-- 配置jsp路径的后缀 --> <property name="suffix" value=".jsp"/> </bean>
//使用Controller标识 它是一个控制器 @Controller public class ItemsController3 { //商品查询列表 //@RequestMapping实现 对queryItems方法和url进行映射,一个方法对应一个url //一般建议将url和方法写成一样 @RequestMapping("/queryItems") public ModelAndView queryItems()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苹果手机!"); Items items_3=new Items(); items_3.setName("Pad"); items_3.setPrice(3000f); items_3.setDetail("平板"); itemsList.add(items_1); itemsList.add(items_2); //返回ModelAndView ModelAndView modelAndView = new ModelAndView(); //相当 于request的setAttribut,在jsp页面中通过itemsList取数据 modelAndView.addObject("itemsList", itemsList); //指定视图 //下边的路径,如果在视图解析器中配置jsp路径的前缀和jsp路径的后缀,修改为 //modelAndView.setViewName("/WEB-INF/jsp/items/itemsList.jsp"); //上边的路径配置可以不在程序中指定jsp路径的前缀和jsp路径的后缀 modelAndView.setViewName("items/itemsList"); return modelAndView; } //定义其它的方法 //商品添加 //商品修改 // @Override // public ModelAndView handleRequest(HttpServletRequest request, // HttpServletResponse response) 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的setAttribut,在jsp页面中通过itemsList取数据 // modelAndView.addObject("itemsList", itemsList); // // //指定视图 // modelAndView.setViewName("/WEB-INF/jsp/items/itemsList.jsp"); // // return modelAndView; // } }