mvc在bs系统下的应用
----------------------------------------------------
在web.xml中配置前端控制器(系统提供的一个servlet类 只需配置即可 无需程序员开发 )
--------------------------------------------------------------
------------------------
非注解适配器
使用A适配器能够执行实现Controller接口的handler
package org.ssm.controller;import java.util.ArrayList; import java.util.List;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.Controller; import org.ssm.po.Items;//实现controller接口的处理器 public class ItemsController1 implements Controller{public ModelAndView handleRequest(HttpServletRequest arg0,HttpServletResponse arg1) throws Exception {// TODO Auto-generated method stub//调用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.setAttributemodelAndView.addObject("itemsList", itemsList);//指定视图modelAndView.setViewName("/WEB-INF/jsp/items/itemsList.jsp");return modelAndView;}}
使用B适配器能够执行 实现HttpRequestHandler接口的handler
package org.ssm.controller;import java.io.IOException; import java.util.ArrayList; import java.util.List;import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;import org.springframework.web.HttpRequestHandler; import org.ssm.po.Items;public class ItemsController2 implements HttpRequestHandler{//这个handler对应的适配器类是 org.springframework.web.servlet.mvc.HttpRequestHandlerAdapterpublic void handleRequest(HttpServletRequest arg0, HttpServletResponse arg1)throws ServletException, IOException {// TODO Auto-generated method stub//调用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);arg0.setAttribute("itemsList", itemsList);//早期servlet程序转发操作arg0.getRequestDispatcher("/WEB-INF/jsp/items/itemsList.jsp").forward(arg0, arg1);//使用哪个适配器都可以 但是这个适配器 可以通过response对象 来设置响应数据的格式 }}
----------
jsp页面
--------------------
非注解映射器
-----------------------------
视图解析器
-f---------------------
注解映射器、适配器
------------------------------------
使用注解方式开发的handler
package org.ssm.controller;import java.util.ArrayList; import java.util.List;import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; import org.ssm.po.Items;//使用注解开发的handler 不需要实现接口 这个注解和spring阶段 把action对象注入bean容器时使用的注解一样 导入的包也一样 //要明白 这里就是把该headler注入进spring容器中 @Controller //使用注解标识这是一个handler public class ItemsController3 {//这里边可以编写任意多个方法 没有之前实现指定的接口时 只能覆写指定接口的局限性//使用注解标识映射路径 即将来访问的路径 建议映射路径和类名一样 action写不写都行//@RequestMapping实现对query1方法的一个映射 一个方法对应一个url @RequestMapping("/query1.action")public ModelAndView query1()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);//创建modelAndViewModelAndView modelAndView=new ModelAndView();modelAndView.addObject(itemsList);//指定视图modelAndView.setViewName("/WEB-INF/jsp/items/itemsList.jsp");return modelAndView;}}
然后再配置文件中配置该handler 推荐使用注解扫描方式(对标记@Controller类中标识有@RequestMapping的方法进行映射 在@RequestMapping里边定义映射的url)
否则 一个handler类就需要配置一个bean
--------------------------------
视图解析器的前缀和后缀配置
注意:如果配置了前缀和后缀 那么 在handler设置视图路径的时候 就不能在指定完整的路径了 但是有一个handler除外
不能指定完整路径的handler:1.实现Controller接口 以及2.注解方式实现的handler
1.
2.
路径为:
在配置了前缀和后缀之后 仍然需要指定完整路径的handler:实现了HttpRequesstHandler接口的handler
路径仍然为:
----------------------------