Spring mvc 学习拾遗.docx

上传人:b****7 文档编号:23356256 上传时间:2023-05-16 格式:DOCX 页数:20 大小:115.22KB
下载 相关 举报
Spring mvc 学习拾遗.docx_第1页
第1页 / 共20页
Spring mvc 学习拾遗.docx_第2页
第2页 / 共20页
Spring mvc 学习拾遗.docx_第3页
第3页 / 共20页
Spring mvc 学习拾遗.docx_第4页
第4页 / 共20页
Spring mvc 学习拾遗.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

Spring mvc 学习拾遗.docx

《Spring mvc 学习拾遗.docx》由会员分享,可在线阅读,更多相关《Spring mvc 学习拾遗.docx(20页珍藏版)》请在冰豆网上搜索。

Spring mvc 学习拾遗.docx

Springmvc学习拾遗

Springmvc学习拾遗

1:

配置文件位置:

  

    mvcServlet  

    org.springframework.web.servlet.DispatcherServlet  

      

        contextConfigLocation

classpath*:

/spring/web/servlet-context.xml

  

      

    1  

  

默认为/WEB-INF/dispatcher-servlet.xml

 

2:

Springmvc目前支持5个tag,分别是

mvc:

annotation-driven,mvc:

interceptors,mvc:

view-controller,mvc:

resources和mvc:

default-servlet-handler

2.1:

mvc:

annotation-driven

 注册DefaultAnnotationHandlerMapping(解析controller类上的注释)和AnnotationMethodHandlerAdapter(解析controller类方法上的注释)两个bean,及一系列缺省的messageconverter

其实际意义为:

Xml代码

1

2class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">

3

4

5

6

7

8

9

10

11

12

13

14class="org.springframework.http.converter.ByteArrayHttpMessageConverter"/>

15

16class="org.springframework.http.converter.StringHttpMessageConverter"/>

17

18

class="org.springframework.http.converter.xml.SourceHttpMessageConverter"/>

19//处理json返回

20

21

22

23

24class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>

25

26class="org.springframework.format.support.FormattingConversionServiceFactoryBean"/>

3:

非代码形式配置视图

mvc:

view-controller

将指定路径的请求直接转到对应的view上,而不需要特定的controller来处理请求。

例如

Xml代码 

view-controller path="/hello/*" view-name="helloWorld"/>  

 

4:

静态内容映射

mvc:

resources

将指定URL的匹配模式来访问静态文件,如

resources mapping="/js/**" location="/WEB-INF/js/" cache-period="3600"/>  

resourcesmapping="/js/**"location="/WEB-INF/js/"cache-period="3600"/>

表示将/WEB-INF/js/目录映射到/js/目录,cache超时时间为3600秒。

则jsp中引用js/helloWorld.js实际上指向的是/WEB-INF/js/helloWorld.js.

 

5:

@SessionAttributes

 相当于以前的requiresSession属性,当配置此属性时,handlermethod中的参数值将从session中获取,如果不存在则抛出SessionRequiredException,与之前提到的SessionStatus.setComplete()一起使用,可起到避免提及成功后按刷新键重复提交的情况。

6:

@ExceptionHandler

1.:

@RequestMapping("/exception")  

2. public void ExceptionTest() throws Exception{  

3.    throw new Exception("i don't know");  

4. }    

5. @ExceptionHandler  

6. public String handleException(Exception e,HttpServletRequest request){  

7.    System.out.println(e.getMessage());  

8.    return "helloworld";  

9. }  

@RequestMapping("/exception")

publicvoidExceptionTest()throwsException{

thrownewException("idon'tknow");

}

@ExceptionHandler

publicStringhandleException(Exceptione,HttpServletRequestrequest){

System.out.println(e.getMessage());

return"helloworld";

}

其中/exception抛出一个异常,而handleException则抓到这个异常并进行处理

7:

SpringMVC文件上传

Springmvc使用jakarta的commonsfileupload来支持文件上传。

先修改pom.xml,增加对commonsfileuploadlib包的引用。

Xml代码 

1.  

2.    commons-io  

3.    commons-io  

4.    2.0.1  

5.  

6.  

7.  

8.    commons-fileupload  

9.    commons-fileupload  

10.    1.2.2  

11.  

commons-io

commons-io

2.0.1

commons-fileupload

commons-fileupload

1.2.2

再修改spring的context配置文件,增加对MultipartResolver的引用。

Xml代码 

1.

2.    class="mons.CommonsMultipartResolver">  

3.    

-- one of the properties available; the maximum file size in bytes -->  

4.      

5.  

class="mons.CommonsMultipartResolver">

--oneofthepropertiesavailable;themaximumfilesizeinbytes-->

增加uploader的controller类

Java代码 

1.@RequestMapping("/uploader")  

2.public String uploader(@RequestParam("name") String name,  

3.        @RequestParam("file") MultipartFile file,  

4.        HttpSession session){  

5.    if (!

file.isEmpty()) {  

6.        System.out.println(file.getSize());  

7.    }  

8.    return "helloWorld";  

9.}  

@RequestMapping("/uploader")

publicStringuploader(@RequestParam("name")Stringname,

@RequestParam("file")MultipartFilefile,

HttpSessionsession){

if(!

file.isEmpty()){

System.out.println(file.getSize());

}

return"helloWorld";

}

增加文件上传的jsp页面

Html代码 

1.  

2.  

3.file upload test  

4.  

5.  

6.      

7.      

8.          

9.          

10.          

11.    

  

12.  

13.  

8:

pom.xml中

UTF-8默认还是可以识别被自动采用

fileuploadtest

view-controllerpath="/hello/*"view-name="helloWorld"/>

 

11:

class="org.springframework.web.servlet.view.UrlBasedViewResolver">

value="org.springframework.web.servlet.view.JstlView"/>

对比:

class="org.springframework.web.servlet.view.InternalResourceViewResolver"

p:

prefix="/WEB-INF/jsp/"

p:

suffix=".jsp"/>

分析:

publicclassInternalResourceViewResolverextendsUrlBasedViewResolver{

publicclassUrlBasedViewResolverextendsAbstractCachingViewResolver

 

publicclassResourceBundleViewResolverextendsAbstractCachingViewResolver

 

表13.4.视图解析器

ViewResolver

描述

AbstractCachingViewResolver

抽象视图解析器实现了对视图的缓存。

XmlViewResolver

支持XML格式的配置文件。

该配置文件必须采用与SpringXMLBeanFactory相同的DTD。

默认的配置文件是/WEB-INF/views.xml。

ResourceBundleViewResolver

ResourceBundle中寻找所需bean的定义。

这个bundle通常定义在一个位于classpath中的属性文件中。

默认的属性文件是views.properties。

UrlBasedViewResolver

将视图名直接解析成对应的URL。

如果你的视图名和视图资源的名字是一致的,就可使用该解析器。

InternalResourceViewResolver

(UrlBasedViewResolver的子类)

它支持InternalResourceView(对Servlet和JSP的包装),以及其子类JstlView和TilesView。

可以用

默认"viewClass"为:

value="org.springframework.web.servlet.view.JstlView"

VelocityViewResolver/FreeMarkerViewResolver

(UrlBasedViewResolver的子类)

支持VelocityView(对Velocity模版的包装)和FreeMarkerView以及它们的子类。

Spring支持多个视图解析器一起使用,形成解析链。

如果某个解析器没有找到合适的视图,Spring会在上下文中寻找是否配置了其它的解析器。

如果有,它会继续进行解析,否则,Srping会抛出一个Exception。

12:

Spring加载resource时classpath*:

与classpath:

的区别

ApplicationContextctx=newClassPathXmlApplicationContext(

"classpath*:

com/test/rs/jarAppcontext.xml");

ApplicationContextctx=newClassPathXmlApplicationContext(

"classpath:

com/test/rs/jarAppcontext.xml");

.classpath*:

为了从多个jar文件中加载相同的文件.jarAppcontext.xml。

只要在com/test/rs/目录结构下就能别加载到。

classpath:

只能加载找到的第一个文件.jarAppcontext.xml。

 

13:

1:

HandlerMapping接口--处理请求的映射

实现类:

SimpleUrlHandlerMapping通过配置文件,把一个URL映射到资源DefaultAnnotationHandlerMapping通过注解,把一个URL映射到Controller类上

2:

HandlerAdapter接口--处理请求的映射

实现类:

AnnotationMethodHandlerAdapter类,通过注解,把一个URL映射到Controller类的方法上

13:

配置DispatcherServlet

springMVC

org.springframework.web.servlet.DispatcherServlet

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:

多个HandlerMapping的执行顺序问题:

--对静态资源文件的访问方案一(二选一)-->

default-servlet-handler/>

--对静态资源文件的访问方案二(二选一)-->

resourcesmapping="/js/**"location="/js/"cache-period="31556926"/>

resourcesmapping="/css/**"location="/css/"cache-period="31556926"/>

 

DefaultAnnotationHandlerMapping的order属性值是:

0

resources/>自动注册的SimpleUrlHandlerMapping的order属性值是:

2147483646

default-servlet-handler/>自动注册的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