SSM-5 controller 实现

因为之前没有做过web项目,只是大概了解了下,那么功能先一步一步来。

首先是controller部分,客户端发起的请求都是先进入这里进行业务解析,分发到对应的service去。(采用注解 Controller方式,相对傻瓜自动化)


转一下博文http://blog.csdn.net/u014010769/article/details/47354529

第一步:发起请求到前端控制器(DispatcherServlet)

第二步:前端控制器请求HandlerMapping查找 Handler

         可以根据xml配置、注解进行查找

第三步:处理器映射器HandlerMapping向前端控制器返回Handler

第四步:前端控制器调用处理器适配器去执行Handler

第五步:处理器适配器去执行Handler

第六步:Handler执行完成给适配器返回ModelAndView

第七步:处理器适配器向前端控制器返回ModelAndView

         ModelAndView是springmvc框架的一个底层对象,包括Model和view

第八步:前端控制器请求视图解析器去进行视图解析

         根据逻辑视图名解析成真正的视图(jsp)

第九步:视图解析器向前端控制器返回View

第十步:前端控制器进行视图渲染

         视图渲染将模型数据(在ModelAndView对象中)填充到request域

第十一步:前端控制器向用户响应结果



个人理解,实际工程内,通过controller自动注解,HTTP请求根据URL地址,自动从controller寻找合适的入口,然后controller内业务代码提取请求包含的一些参数对象,转给serviceimpl实现具体功能,比如查询数据,检查匹配等(serviceimpl通过dao对数据库进行交互)。最后返回视图,并传递参数。入门菜鸟一个,没有深入研究代码,只能做些肤浅的了解了。


建立可被扫描到的controller相关的包,建立类,通过注解Controller   RequestMapping(“/aaa”)完成映射关系  可实现多级地址映射


例子:3种不同地址映射方式

代码是照着imooc课程学习时候敲的,基础型的课程都是免费的,入门不错。代码敲一敲记的更牢。

@Controller
@RequestMapping("/courses") //拦截地址
public class coursecontroller {
 
    private courseservice cos;
    @Autowired
    public void setcos(courseservice cooo){
        this.cos=cooo;
    }
    //        发送地址 ***/courses/view?id=xxx实现查询
    @RequestMapping(value="view",method=RequestMethod.GET)//拦截地址 绑定url参数到方法的参数
    public String viewcourse(@RequestParam("id") Integer id,Model mod){
        courseco=cos.getCoursebyId(id);
        mod.addAttribute(co);       添加attribute
        return "course";返回视图
    }
    //   /courses/view2/{courseid} restful风格
    @RequestMapping(value="/view2/{ID}",method=RequestMethod.GET)
    public String viewcourse2(@PathVariable("ID") Integer id,Map<String,Object>model){
        courseco=cos.getCoursebyId(id);
        model.put("course",co);    
        return "course";
    }
    //   /courses/view3?courseid=111
    @RequestMapping("/view3")
    public String viewcourse3(HttpServletRequest request){
        Integerid=Integer.valueOf(request.getParameter("courseid"));
        courseco=cos.getCoursebyId(id);
        request.setAttribute("course", co);
        return "course";
    }
}


可以去掉里面具体的逻辑代码,做个简单的jsp页面先实现一下映射方式,后续加入service dao 数据库功能。

关于参数的传递

JSP-》controller

1 简单类型,用@RequestParam("id")

public String viewcourse(@RequestParam("id") Integer id,Model mod)

2 对象 

 “HTTP请求参数名 =  命令/表单对象的属性名”    的规则自动绑定请求数据,支持“级联属性名”,自动进行基本类型数据转换。
@RequestMapping("/login" )
       public String dologin(User user){
            System.out.println("user.getName()=" +user.getName());
            System.out.println("user.getHobby()=" +user.getHobby());
            return "success";
      }
user对象内有 name  password 两个参数。
只要在表单内绑定name password即可。
<form  action="login" method="post">
     <input type="text" name="name"/>
     <input type="text" name="password"/>

controller->JSP
1 addAttribute(key, value)    HttpServletRequest或者 model 对象均可。页面通过${key}获取。参考以上第1、3种映射代码
用Map<String, Object>,其键值可以在页面上用${键值名}得到,参考以上第2种映射代码

对象一般会作为json格式数据传递

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值