SpringMVC 高级篇

1,配置文件使用
(配置文件和web.xml中的加载语句用 --> 关联)
WEB-INF/配置文件 --> web.xml中的加载语句
   1) applicationContext.xml -->  
  
	org.springframework.web.context.ContextLoaderListener 
  

   2) dispatcher-servlet.xml -->
  
  	dispatcher
  	org.springframework.web.servlet.DispatcherServlet
  
 
  
  	dispatcher
  	/*
  

2、WEB/INF/dispatcher-servlet.xml 中对Annotation的配置
1) 使用annocation创建Controller的bean
	(可有可无,default会自动添加)
2)controller bean的扫描
    	

二、基于CoC的MVC的配置
1、WEB/INF/dispatcher-servlet.xml 中对于url-pattern --> urlHandler的CoC的配置



注:如果不配置这个handlerMapping , tomcat会报org.springframework.web.servlet.DispatcherServlet noHandlerFound

2、src/controller 中的配置
申明一个SampleController.class :
@Controller
public class SampleController {
	@RequestMapping   // 不需要指明请求的路径。
	@ResponseBody       // 直接打印到客户端,Client 显示 “1”。
	public String alert() {
		 System.out.println("CoC"); // 控制台显示“CoC”
		 return "1";
	}
}
3、请求的url
localhost:8080/webapp/sample/alert.do
或者 当如果该controller只有一个方法的时候,
localhost:8080/webapp/sample

4、如果请求的Controller中不只有一个Method
    1)请求一个没有的方法(如 do方法)
No matching handler method found for servlet request: path '/sample/do.do', method 'GET', parameters map[[empty]]
    2) 请求一个空的方法(请求的路径只到/sample)
No matching handler method found for servlet request: path '/sample/', method 'GET', parameters map[[empty]]

5、@InitBinder( org.springframework.web.bind.annotation.InitBinder )
1)在controller中使用的Binder
       @InitBinder
	public void customizeDataBinder(WebDataBinder dataBinder) {
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");
		dateFormat.setLenient(false); 
		dataBinder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, false));
	}
2)在自定义的bind method中使用
	@RequestMapping
	@ResponseBody
	public String bind(Date myDate) {
		System.out.println(myDate);
		return "1";
	}
注: 含义是在url中myDate=2013/3/31这样的格式才能被正确解析,2013-3-31这样的格式是不能被解析的。
6、WebBindingInitializer (org.springframework.web.bind.support.WebBindingInitializer)
1) 这个是跨所有Controller都能使用的Binder
2)配置如下

		
			
		
	
3)在validator/生成一个类,类名叫做
GenericBindingInitializer 然后它 implements WebBindingInitializer
           内含有Method:
public void initBinder(WebDataBinder dataBinder, WebRequest request)

7、@ModelAttribute("name")
1)方法上
@ModelAttribute("CoC")
	public String[] model() {
		String[] strs = {"c","o","c"};
		return strs;
	}
注:model方法将在任何请求处理方法执行前调用,Spring MVC 会将该方法返回值以“CoC”为名放入到隐含的模型对象属性列表中。  
2)参数上 
        @RequestMapping
	@ResponseBody
	public String getModel(@ModelAttribute("CoC") String[] model) {
		System.out.println(model.length); // 输出为 3
	    return model.toString();
	}
 
8、@SessionAttribute 管理Session数据。
       1)在Controller之上声明
        @SessionAttributes("CoC") //type=xx.class
       2)适用的情况
        如果在一些方法参数的ModelMap变量里注入了数据,那么在其他的方法里是不能使用到该模型数据的。
        如果使用了@SessionAttribute("CoC"),  这样在某些方法参数上定义的@ModelAttribute("CoC")就可以使用了。

9、CoC之Web请求和视图之间的约定

1)在dispatcher-servelt中配置

		
		
	

        注:红色字体标注的id是必须的。而且必须是viewNameTranslator,否则框架不会启用。

2)这样在Controller,返回将可以为void
	@RequestMapping
	public void demo() {
		System.out.println("Demo.jsp");
	}
                会自动找到/webapp/jsp/sample/demo.jsp的视图。

10、基于REST风格的路径变量
url = webapp/sample/demo.do
	@RequestMapping(value = "/sample/{name}.do", method = RequestMethod.GET)
	public void demo(@PathVariable(value="name") String aName) {
		
		System.out.println("Demo.jsp " + aName);  // Demo.jsp demo 同时跳转到了jsp/sample/demo.jsp上。
	}
注:粉红色部分不是必须的,{name}.do则aName为demo。若直接输入{name} 那么aName=demo.do

11、模型视图使用
@RequestMapping(value = "{name}", method = RequestMethod.GET)
	
public void demo(@PathVariable(value="name") String aName,@ModelAttribute("CoC") String[] model) {//非必须的,因为@ModelAttibute("CoC")已经隐含在模型的对象列表中。
		
System.out.println("Demo.jsp " + aName);
}

视图demo.jsp中可以直接使用
   
  	s 

你可能感兴趣的:(Spring)