SpringMVC学习(二)--SpringMVC的开发过程

来源:互联网 发布:影视特效需要编程吗 编辑:程序博客网 时间:2024/06/05 10:19

SpringMVC学习(二)–SpringMVC的开发过程

标签(空格分隔): SpringMVC


1、环境搭建

配置web开发环境,导入对应的SpringMVC依赖的jar包或者在pom中添加Spring MVC的依赖

<dependency>     <groupId>org.springframework</groupId>     <artifactId>spring-webmvc</artifactId>     <version>${spring.version}</version></dependency>

2、配置前端控制器

在web.xml文件中配置DispatcherServlet。

<servlet>    <servlet-name>springmvc</servlet-name>    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>    <init-param>    <param-name>contextConfigLocation</param-name>    <param-value>classpath:springmvc.xml</param-value>    </init-param>    <load-on-startup>1</load-on-startup></servlet><servlet-mapping>    <servlet-name>springmvc</servlet-name>    <url-pattern>*.action</url-pattern></servlet-mapping>

说明:
load-on-startup:表示servlet随服务启动;
url-pattern:*.action的请交给DispatcherServlet处理。
contextConfigLocation:指定springmvc配置的加载位置,如果不指定则默认加
载WEB-INF/[DispatcherServlet 的Servlet 名字]-servlet.xml。

url-pattern:Servlet的拦截模式:

① 拦截固定后缀的url,比如设置为 .do、.action, 例如:/user/add.action
此方法最简单,不会导致静态资源(jpg,js,css)被拦截。
②、拦截所有,设置为/,例如:/user/add /user/add.action
此方法可以实现REST风格的url,很多互联网类型的应用使用这种方式。
但是此方法会导致静态文件(jpg,js,css)被拦截后不能正常显示。需要特殊处理。
③、拦截所有,设置为/*,此设置方法错误,因为请求到Action,当action转到jsp时再次被拦截,提示不能根据jsp路径mapping成功。

3、SpringMVC的配置文件

1、映射器

HandlerMapping 负责根据request请求找到对应的Handler处理器及Interceptor拦截器,将它们封装在HandlerExecutionChain 对象中给前端控制器返回
1.1、BeanNameUrlHandlerMapping
BeanNameUrl处理器映射器,根据请求的url与spring容器中定义的bean的name进行匹配,从而从spring容器中找到bean实例

<!—beanName Url映射器 --><bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/><!-- controller配置 --><bean name="/items1.action" id="itemList1" class="cn.itcast.springmvc.controller.first.ItemList1"/>

根据/item1.action进行映射到指定的处理器中
1.2、SimpleUrlHandlerMapping
simpleUrlHandlerMapping是BeanNameUrlHandlerMapping的增强版本,它可以将url和处理器bean的id进行统一映射配置

<!—简单url映射 -->    <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">        <property name="mappings">            <props>                <prop key="/items1.action">controller的bean id</prop>                <prop key="/items2.action">controller的bean id</prop>            </props>        </property>    </bean>

2、适配器

HandlerAdapter会根据适配器接口对后端控制器进行包装(适配),包装后即可对处理器进行执行,通过扩展处理器适配器可以执行多种类型的处理器,这里使用了适配器设计模式
2.1、SimpleControllerHandlerAdapter
简单控制器处理器适配器,要求所有的处理器Handler(Controller)所有实现了org.springframework.web.servlet.mvc.Controller 接口的Bean通过此适配器进行适配、执行。

<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />

控制层示例代码:

public class ItemList1 implements Controller {    @Override    public ModelAndView handleRequest(HttpServletRequest request,            HttpServletResponse response) throws Exception {            //do same thing}

2.2、HttpRequestHandlerAdapter
HttpRequestHandlerAdapter,http请求处理器适配器,所有实现了org.springframework.web.HttpRequestHandler 接口的Bean通过此适配器进行适配、执行

<bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"/>

控制层代码实现示例:

public class ItemList2 implements HttpRequestHandler {    @Override    public void handleRequest(HttpServletRequest request,            HttpServletResponse response) throws ServletException, IOException {            ...}

从这个实现方法可以看出,这个方法和上面的不同在于,返回值并不是返回void。通过response进行设置返回的数据类型,例如:json

视图解析器

<!-- ViewResolver --><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/><property name="prefix" value="/WEB-INF/jsp/"/><property name="suffix" value=".jsp"/></bean>

InternalResourceViewResolver:支持JSP视图解析
viewClass:JstlView表示JSP模板页面需要使用JSTL标签库,所以classpath中必须包含jstl的相关jar 包;
prefix 和suffix:查找视图页面的前缀和后缀,最终视图的址为:
前缀+逻辑视图名+后缀,逻辑视图名需要在controller中返回ModelAndView指定,比如逻辑视图名为hello,则最终返回的jsp视图地址 “WEB-INF/jsp/hello.jsp”

注解实现适配器(@Controller)和映射器(@RequestMapping)

SpringMVC提供注解实现适配器和映射器,大大简化了开发工作量。默认都支持按这种模式开发。
1、组件扫描器
使用组件扫描器省去在spring容器声明每个controller bean类的繁琐。使用

<!-- 扫描controller注解,多个包中间使用半角逗号分隔 -->    <context:component-scan base-package="cn.itcast.springmvc.controller.first"/>

2、注解驱动配置

    <mvc:annotation-driven>

springmvc使用上述配置自动加载RequestMappingHandlerMapping和RequestMappingHandlerAdapter,可用在springmvc.xml配置文件中使用该配置替代注解处理器和适配器的配置

3、适配器配置
注解式处理器映射器,对类中标记@ResquestMapping的方法进行映射,根据ResquestMapping定义的url匹配ResquestMapping标记的方法,匹配成功返回HandlerMethod对象给前端控制器,HandlerMethod对象中封装url对应的方法Method
配置如下:

<!--注解映射器 --><bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>

注解描述:
@RequestMapping:定义请求url到处理器功能方法的映射

4、映射器配置
注解式处理器适配器,对标记@ResquestMapping的方法进行适配

<!--注解适配器 -->    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 南京南江中学 南江大峡谷在哪里 海口市南江花园 绿都南江商业中心 贵州南江大峡谷风景区 四川省南江中学 南江里小学怎么样 玉林南江高中 南江口高铁站 南江小河职业中学 南江大峡谷好玩吗 东阳南江水库 南江大峡谷漂流多少钱 南江线时刻表 四川巴中南江 云南南江医院 开阳县南江大峡谷 南江光雾山门票 南江事业单位考试 巴中南江住宿 四川南江物流 南江大峡谷激情漂流 成都到南江的车票 重庆南江地质队 南江哪里好玩 南江大峡谷游玩 南江大峡谷缆车 南江到南充汽车时刻表 平江到南江桥 贵阳怎么到南江大峡谷 南江大峡谷旅游费用 巴中南江旅游 四川南江旅游景点 南京南江中学跳楼 四川南江风景 南江旅游景点 南江教育网首页 巴中南江酒店 贵州南江大峡谷在哪里 横店南江壹号 南江到南充汽车票