spring mvc随笔

来源:互联网 发布:数控车床编程操作方法 编辑:程序博客网 时间:2024/06/05 16:03

主要类(配置在web.xml里) dispatcherservlet

Handlermapping类 把url映射到controller类中

Handleradapter类 把url映射到controller方法中(感觉和handlermapping搭配使用)

目前用到spring mvc注解 所以以上两个类为:

Defaultannotationhandlermapping

Annotationmethodhandleradapter

Controller 由于目前使用注解,在一个普通类中加入@Controller 注解就可以,所以没有用spring提供的controller接口,如果不用注解开发,那么可以实现此接口

Handlerintercepter 拦截器,这个目前没有用到,配置文件中配置了一个charaset过滤器来设置编码

Viewresolver 这个类主要是用来映射jsp文件的位置 通常需要设置 viewclassprefixsuffix这三个参数

Viewclassjstlview

Prefixjsp文件的路径 如 request/jsp/admin/

Suffix: jsp文件的后缀,需要带”.” 如 .jsp

通常用的比较多的是 internalresourceviewresolver

Modelandview 这个作为方法的返回值来使用,可以跟request一样向前台页面传递数据,方法名为addobject,除了传递数据,还要传递逻辑视图名,比如一个页面叫view.jsp 那么这里需要把”view” 传入modelandview,这样他会在指定路径查找view.jsp文件(路径和后缀的设置如上所述)

Spring工作流程(文字版):

Web页面发送请求至后台,拿注解举例,先经过annotationmethodhandlermappingdefaultadnnotationhandleradapter,如果找到了具体的controller,那么经过拦截器,执行controller,如果没找到具体的controller,那么就用simpleurlhandlermapping查找,流程同上,如果还是没找到,那么再用defaulthandler查找,流程同上,如果defaulthanlder也没找到,那么返回给页面一个404

执行完拦截器,进入controller,通过返回modelandview,来返回一个逻辑视图,通过viewresolver以及上面配置的prefixsuffix,找到具体jsp文件,返回给前端,到此流程结束。

Spring工作流程图见附图1

Dispatcherservlet

是一个servlet,所以可以配置多个,这样可以产生更灵活的映射路径,如*.do, *.action

可以在init-param中 配置**-servlet.xml的路径和名称,如果忽略该参数,那么spring会去WEB-INF下查找名称为[servletname]-servlet.xml的文件,可以识别classpath: ,如果有多个文件,用逗号分隔即可。

拦截路径可以用 和 *.do等, /* 是错误的配置方式,这种方式在路径跳转时无法访问jsp文件

Listener

如果是s2sh框架,需要这个监听器来加载spring的配置文件applicationContext.xml文件,通常和context-param配合使用,如下:

<context-param>

    < param-name>contextConfigLocation</param-name>

     < param-value>classpath:conf/spring/applicationContext.xml</param-value>

</context-param>

如果是spring mvc 那么通过servlet即可加载配置文件,所以不需要设置此监听器

配置文件:

先来一个xml头:

 <beans  

     xmlns="http://www.springframework.org/schema/beans"  

     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  

     xmlns:tx="http://www.springframework.org/schema/tx"  

     xmlns:context="http://www.springframework.org/schema/context"    

     xmlns:mvc="http://www.springframework.org/schema/mvc"    

     xsi:schemaLocation="http://www.springframework.org/schema/beans   

     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd   

     http://www.springframework.org/schema/tx   

     http://www.springframework.org/schema/tx/spring-tx-3.0.xsd  

     http://www.springframework.org/schema/context  

    http://www.springframework.org/schema/context/spring-context-3.0.xsd  

     http://www.springframework.org/schema/mvc  

     http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">

<context:component-scan base-package=”” />

这个配置可以理解为一个扫描仪,他会根据你传入的base-package,来扫描所有注解类

<mvc:annotation-driven/ />

默认的注解映射的支持(没加好像也可以运行)

Internalresourceviewresolver

开头提到了这个类,不再赘述,需要配置到xml文件里

<mvc:intercepters>

<bean class=””/>

....(可以配置多个拦截器)

</mvc:intercepters>

拦截器的配置

<mvc:default-servlet-handler/>

对项目中静态资源的访问

常用的注解:

@Controller 声明Action组件
@Service    声明Service组件    @Service("myMovieLister")
@Repository 声明Dao组件
@Component   泛指组件当不好归类时.
@RequestMapping("/menu")  请求映射
@Resource  用于注入,( j2ee提供的 默认按名称装配,@Resource(name="beanName")
@Autowired 用于注入,(srping提供的默认按类型装配

@qulifier 配合autowired使用,可以将autowired的按类型装配改为按名称装配
@Transactional( rollbackFor={Exception.class}) 事务管理

拦截器配置:

实现HandlerInterceptor 或者 继承HandlerInterceptorAdapter

Pre 进入action

Post 生成视图前

After 返回action后(释放资源)

xml中配置拦截器 有三种方式 第一种前面说过了 在标签内用匿名bean,下面是第二种方式,感觉更好一些,是通过配置路径来拦截:

<mvc:intercepters>

<mvc:intercepter>

<mvc:mapping path=”/user/*” />

<bean class=”” />

</mvc:intercepter>

</mvc:intercepters>

第三种方式是配置handlerMapping

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

 <property name="interceptors">     

     <list>     

         <bean class="com.mvc.MyInteceptor"></bean>    

     </list>     

 </property>     

</bean>

配置intercepters属性,可以达到拦截的目的。

配置异常映射:

<bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">

<property name="defaultErrorView">  

  <value>/error/error</value>

</property>

<property name="defaultStatusCode">  

  <value>500</value>

</property>

<property name="warnLogCategory">   <value>org.springframework.web.servlet.handler.

SimpleMappingExceptionResolver</value>

</property>

</bean>

转发和重定向的控制:

在返回的路径上加入 “forward:/user/login”; 转发“redirect:/user/login” 重定向;

处理ajax请求:

刚好用到这个功能,之前用的struts2,在struts.xml配置一下type=json就可以了,在spring mvc里 注解的话可以在一个返回Object的方法里(方法名任意) 加入@responseBody标签,前台按照requestMapping配置的路径访问,就可以获取到json格式的对象

 

注:本文学习自:http://elf8848.iteye.com/blog/875830

附图1

 

原创粉丝点击