1、Spring mvc 学习拾遗Spring mvc 学习拾遗1:配置文件位置: mvcServlet org.springframework.web.servlet.DispatcherServlet contextConfigLocationclasspath*:/spring/web/servlet-context.xml 1 默认为/WEB-INF/dispatcher-servlet.xml2:Spring mvc 目前支持5个tag,分别是 mvc:annotation-driven,mvc:interceptors,mvc:view-controller, mvc:resource
2、s和mvc:default-servlet-handler2.1:mvc:annotation-driven 注册 DefaultAnnotationHandlerMapping(解析controller类上的注释) 和AnnotationMethodHandlerAdapter(解析controller类方法上的注释)两个bean,及一系列缺省的messageconverter其实际意义为:Xml代码 1 3 4 5 6 7 8 9 10 11 12 13 15 17 18 19 /处理json返回20 21 22 23 25 3:非代码形式配置视图mvc:view-controller 将
3、指定路径的请求直接转到对应的view上,而不需要特定的controller来处理请求。 例如 Xml代码 4:静态内容映射mvc:resources 将指定URL 的匹配模式来访问静态文件,如 表示将/WEB-INF/js/目录映射到/js/目录,cache超时时间为3600秒。 则jsp中引用 js/helloWorld.js实际上指向的是 /WEB-INF/js/helloWorld.js. 5:SessionAttributes 相当于以前的requiresSession属性,当配置此属性时,handler method中的参数值将从session中获取,如果不存在则抛出SessionR
4、equiredException,与之前提到的 SessionStatus. setComplete ()一起使用,可起到避免提及成功后按刷新键重复提交的情况。 6:ExceptionHandler 1. :RequestMapping(/exception)2. publicvoidExceptionTest()throwsException3. thrownewException(idontknow);4. 5. ExceptionHandler6. publicStringhandleException(Exceptione,HttpServletRequestrequest)7. Sy
5、stem.out.println(e.getMessage();8. returnhelloworld;9. RequestMapping(/exception) public void ExceptionTest() throws Exception throw new Exception(i dont know); ExceptionHandler public String handleException(Exception e,HttpServletRequest request) System.out.println(e.getMessage(); return helloworld
6、; 其中/exception抛出一个异常,而handleException则抓到这个异常并进行处理 7:Spring MVC 文件上传 Spring mvc使用jakarta的commons fileupload来支持文件上传。 先修改pom.xml,增加对commons fileupload lib包的引用。 Xml代码 1. 2. commons-io3. commons-io4. 2.0.15. 6. 7. 8. commons-fileupload9. commons-fileupload10. 1.2.211. commons-io commons-io 2.0.1 commons-
7、fileupload commons-fileupload 1.2.2 再修改spring的context 配置文件,增加对MultipartResolver的引用。 Xml代码 1. 3. 4. 5. 增加uploader的controller类 Java代码 1. RequestMapping(/uploader)2. publicStringuploader(RequestParam(name)Stringname,3. RequestParam(file)MultipartFilefile,4. HttpSessionsession)5. if(!file.isEmpty()6. Sy
8、stem.out.println(file.getSize();7. 8. returnhelloWorld;9. RequestMapping(/uploader) public String uploader(RequestParam(name) String name, RequestParam(file) MultipartFile file, HttpSession session) if (!file.isEmpty() System.out.println(file.getSize(); return helloWorld; 增加文件上传的jsp页面 Html代码 1. 2. 3
9、. fileuploadtest4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 8:pom.xml中UTF-8默认还是可以识别被自动采用file upload test 11: 对比:分析:public class InternalResourceViewResolver extends UrlBasedViewResolver public class UrlBasedViewResolver extends AbstractCachingViewResolverpublic class ResourceBundleViewResolver extends Abstrac
10、tCachingViewResolver表 13.4. 视图解析器ViewResolver描述AbstractCachingViewResolver抽象视图解析器实现了对视图的缓存。XmlViewResolver支持XML格式的配置文件。 该配置文件必须采用与Spring XML Bean Factory相同的DTD。默认的配置文件是 /WEB-INF/views.xml。ResourceBundleViewResolverResourceBundle中寻找所需bean的定义。 这个bundle通常定义在一个位于classpath中的属性文件中。默认的属性文件是views.properties
11、。UrlBasedViewResolver将视图名直接解析成对应的URL。 如果你的视图名和视图资源的名字是一致的,就可使用该解析器。InternalResourceViewResolver(UrlBasedViewResolver的子类)它支持InternalResourceView(对Servlet和JSP的包装), 以及其子类JstlView和TilesView。 可以用 property name=viewClass value=*指定视图类用于为该解析器生成视图。默认viewClass为: value=org.springframework.web.servlet.view.Jstl
12、ViewVelocityViewResolver/ FreeMarkerViewResolver(UrlBasedViewResolver的子类)支持VelocityView(对Velocity模版的包装)和FreeMarkerView以及它们的子类。Spring支持多个视图解析器一起使用,形成解析链。如果某个解析器没有找到合适的视图,Spring会在上下文中寻找是否配置了其它的解析器。 如果有,它会继续进行解析,否则,Srping会抛出一个Exception。12:Spring加载resource时classpath*:与classpath:的区别ApplicationContext ctx
13、 = new ClassPathXmlApplicationContext( classpath*:com/test/rs/jarAppcontext.xml); ApplicationContext ctx = new ClassPathXmlApplicationContext( classpath:com/test/rs/jarAppcontext.xml);.classpath*:为了从多个jar文件中加载相同的文件.jarAppcontext.xml。只要在com/test/rs/目录结构下就能别加载到。classpath:只能加载找到的第一个文件.jarAppcontext.xml
14、。13:1:HandlerMapping接口 - 处理请求的映射实现类:SimpleUrlHandlerMapping 通过配置文件,把一个URL映射到资源DefaultAnnotationHandlerMapping 通过注解,把一个URL映射到Controller类上2:HandlerAdapter接口 - 处理请求的映射实现类:AnnotationMethodHandlerAdapter类,通过注解,把一个URL映射到Controller类的方法上13:配置DispatcherServlet springMVC org.springframework.web.servlet.Dispat
15、cherServlet contextConfigLocation classpath*:/springMVC.xml不写,使用默认值:/WEB-INF/-servlet.xml,即springMVC-servlet.xml 1 springMVC / 1、拦截*.do,例如:/user/add.do,弊端:所有的url都要以.do结尾。不会影响访问静态文件。2、拦截/,例如:/user/add,弊端:对jpg,js,css静态文件的访问也被拦截不能正常显示。后面有解决办法。3、拦截/*,可以走到Action中,但转发到jsp时再次被拦截,不能访问到jsp。14:多个HandlerMappin
16、g的执行顺序问题: DefaultAnnotationHandlerMapping的order属性值是:0自动注册的SimpleUrlHandlerMapping的order属性值是:2147483646自动注册的SimpleUrlHandlerMapping的order属性值是:2147483647 当访问一个a.jpg图片文件时,spring会先执行order值比较小的,先通过DefaultAnnotationHandlerMapping来找处理器,一定是找不到的,我们没有叫a.jpg的controller动作。继续找由于最后一个SimpleUrlHandlerMapping是匹配/*的,所以一定会匹配上,再响应图片。SimpleUrlHandlerMapping, 把对静态资源的访问由HandlerMapping转到org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler使用各个Servlet容器自己的默认Servlet.,处理并返回.。附:Tomcat默认Servlet.为default(见tom
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1