1,配置文件使用
(配置文件和web.xml中的加载语句用 --> 关联)
WEB-INF/配置文件 --> web.xml中的加载语句
1) applicationContext.xml -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
2) dispatcher-servlet.xml -->
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
2、WEB/INF/dispatcher-servlet.xml 中对Annotation的配置
1) 使用annocation创建Controller的bean
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>(可有可无,default会自动添加)
2)controller bean的扫描
<context:component-scan base-package="controller" />
二、基于CoC的MVC的配置
1、WEB/INF/dispatcher-servlet.xml 中对于url-pattern --> urlHandler的CoC的配置
<bean id="cocHandlerMapping" class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" >
<property name="caseSensitive" value="false"/>
</bean>
注:如果不配置这个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)配置如下
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="webBindingInitializer">
<bean class="validator.GenericBindingInitializer" />
</property>
</bean>
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中配置
<bean id="viewNameTranslator" class="org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator">
<property name="prefix" value="/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
注:红色字体标注的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中可以直接使用
<c:forEach var="item" items="${CoC}" step="1">
<c:out value="${item}"></c:out>s </br>
</c:forEach>
本文详细介绍了SpringMVC的高级配置,包括配置文件的使用、基于CoC的MVC配置、@InitBinder和WebBindingInitializer的应用、@ModelAttribute与@SessionAttribute的使用,以及REST风格的路径变量和模型视图的处理。通过这些配置和实践,可以深入理解SpringMVC的工作原理和增强应用能力。

556

被折叠的 条评论
为什么被折叠?



