SpringMVC笔记(二)

来源:互联网 发布:dcs编程软件 编辑:程序博客网 时间:2024/06/05 16:05

配置文件的知识:

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();        }


 


原创粉丝点击