SpringMVC笔记(二)

配置文件的知识:

1.applicationContext.xml配置<context:annotation-config/>启动基于annotation的DI(依赖注入)管理,这个配置文件里不需要对Controller进行管理,因此配置一个<context:exclude-filter..... />告诉它不要去管理Controller;

<context:component-scan base-package="com.imooc.mvcdemo">
               <context:exclude-filtertype="annotation"expression="org.springframework.stereotype.Controller"/>
               </context:component-scan>

2.mvc:resources 将资源文件映射到本地目录下,如一些图片文件等;

3.<mvc:annotation-driven/>可以将请求的参数绑定到控制器的输入参数默认使用DefaultAnnotationHandlerMapping
4. DispatcherServlet可以有多个,分别处理不同路径的请求
SpringMVC上下文:
一种是与SpringMVC核心相关的,也就是Dispatcherservlet上下文,作用只是负责与SpringMVC业务相关的功能,比如HandlerMapping、Controller、ViewResolver等等,另外一种就是供所有组件调用的公共的应用程序上下文,这一部分一般是由Spring的ContextloadListener加载管理的,可以加载多个,比如controller层、service层、Dao层等等,以便于业务扩展时,可以复用ContextloadListener加载管理的组件。
这两个配置文件都需要在web.xml中进行配置。
在springmvc配置文件中,<context:annotation-config></context:annotation>意思是激活spring基于注解配置的依赖注入和控制反转,可以使用注解注入的方式来获取service层。
<context:conponment-scan>组件扫描
<mvc:annnotation-driven></mvc:annnotation>开启基于springMVC的注解,也就是可以使用注解参数绑定,使用注解映射请求等等。
<mvc:resources >配置静态资源
最后一项,配置视图解析器,一般是固定配置格式,到网上搜索即可,使用的类是InternalResourceViewResolver类。

web.xml:所有的web项目都要有最基本的配置文件,所有框架监听器、servlet都在这里配置;
mvc-dispatcher-servlet.xml:是springmvc控制器层的相关配置,类似于struts2框架的struts.xml;
applicattionContext.xml:是spring Bean容器的配置文件;
Ioc:依赖注入AOP面向切面相关的配置,LOC主要是管理全局对象,如Session、Dao、Servlce之类的,Aop面向切面起到了过滤器的作用,一般用作事务管理
(1)静态资源处理,css js imgs
<mvc:resources mapping="/resources/**localtion="/resoutces/">
(2)配置ViewResolver
可以用多个ViewResolver 使用order属性排序,internalResourceViewResolver放在最后。

基础代码:

  

  private static Logger log = LoggerFactory.getLogger(CourseController.class);
    private CourseService courseService;
    @Autowired
    public void setCourseService(CourseServicecourseService) {
       this.courseService = courseService;
    }

   CourseService有依赖关系,加上@Autowired则表示由Spring容器来管理(注入)这个依赖,而model.addAttribute(course)则是将数据放到模型里,return出来的String则表示view的具体位置,这个之前在配置文件中配置过ViewResolver,其中前置路径和文件名后缀具体指向了这个view。

现代代码:

   

 //本方法将处理 /courses/view?courseId=123 形式的URL
    @RequestMapping(value="/view", method=RequestMethod.GET)
    public String viewCourse(@RequestParam("courseId") Integer courseId,
           Model model) {
              
       log.debug("In viewCourse, courseId ={}", courseId);
       Course course = courseService.getCoursebyId(courseId);
       model.addAttribute(course);
       return "course_overview";
    }
    //本方法将处理 /courses/view2/123 形式的URL
    @RequestMapping("/view2/{courseId}")
    public String viewCourse2(@PathVariable("courseId") Integer courseId,
           Map<String,Object> model) {       
       log.debug("In viewCourse2, courseId ={}", courseId);
       Course course = courseService.getCoursebyId(courseId);
       model.put("course",course);
       return "course_overview";
    }

Restful风格的请求/courses/view2/{courseId}
注:这里的{courseID}是一个参数变量;首先RequestMapping里的value要写成请求的类型@RequestMapping(value="/view2/{courseId}",method=RequestMethod.GET),然后传入的参数要引入@PathVariable("courseId") 将url中的参数传入进去,返回的数据若是一个Map要将相应数据put到map中返回。
@Controller告诉DispatcherServlet上下文这个类归他管,类级别的@RequestMapping("/courses")告诉/courses目录下的请求都归他来处理;方法级别的@RequestMapping(value="/view",method=RequestMethod.GET)告诉/view的get请求由它来处理;
@RequestParam("courseId")直接将请求的参数读出来作为一个参数传入方法中
传统代码:

 

   //本方法将处理 /courses/view3?courseId=123形式的URL
    @RequestMapping("/view3")
    public String viewCourse3(HttpServletRequest request) { 
       Integer courseId =Integer.valueOf(request.getParameter("courseId"));     
       Course course = courseService.getCoursebyId(courseId);
       request.setAttribute("course",course);
       return "course_overview";}

Binding:

@RequestMapping(value="/admin", method = RequestMethod.GET, params = "add")
    public String createCourse(){
//跳转到edit.jsp
       return "course_admin/edit";
    }
@RequestMapping(value="/save", method = RequestMethod.POST)
    public String  doSave(@ModelAttribute Course course){       
//日志输出(监控)
       log.debug("Info of Course:");
       log.debug(ReflectionToStringBuilder.toString(course));
    //在此进行业务操作,比如数据库持久化
       course.setCourseId(123);
//实现重定向
       return "redirect:view2/"+course.getCourseId();
        }


 


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值