MVC模式很好的提高了Web项目的开发效率,同时也提高了系统的可维护性。基于mvc模式的Web层框架也是琳琅满目,从最开始的struts1、struts2(风靡n年),到现在的springMVC。这些框架的基本目的大致有两个:一个是简化web开发过程中的常见操作,入表单数据的封装,校验,请求的处理,数据的回显,文件上传下载及安全性问题等;第二就是基于mvc模式,构建结构良好的应用程序。
常见的web层框架很多,也各有千秋,经过长时间的演化,目前在web项目开发中最常用、最简洁高效的就是springmvc,它就像mybatis一样,去除了jdbc的繁琐,但保持了灵活性,同时又不像hibernate那样难以控制。
- 一个mvc框架最基本的要完成以下工作:
1)根据uri调用相应的action
2)实例化正确的控制器
3)根据请求参数值来构造表单
4)调用控制器对象的相应方法
5)转向一个视图(jsp页面)
- 利用springmvc作为web层框架的好处有很多
1)springmvc提供了一个DispatcherServlet,用作请求分发
2)springmvc中使用基于xml的配置文件
3)springmvc实例化控制器,根据用户输入自动构造bean
4)springmvc提供完善的校验框架
5)sringmvc是spring的一部分,可以充分利用spring的强大功能
6)sprngmvc支持国际化和本地化
7)sprigmvc支持多视图技术
在真正进入springmvc前,我们要先来了解一个类和一个接口:DispatcherServlet和Controller.
- DispatcherServlet
它是springmvc的入口,也是用于处理请求的核心分发器,在应用springmvc时,第一件事就是在web.xml文件中配置改servlet,就像下面这样
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
需要注意的是,利用<servlet-name/>
指定的名字是有意义的,在加载springmvc配置文件的时候,会根据这个名字到classpath下寻找servletName-servlet.xml文件。
但有时我们的配置文件可以不是直接在classpath下,而是在别的什么位置,那也没关系,值需要为DispatcherServlet指定contextConfigLocation就可以了
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:action-servlet.xml</param-value>
</init-param>
- Controller接口
在spring2.5之前,开发一个控制器的唯一方法就是实现org.springframework.web.servlet.mvc.Controller接口。这个接口有一个handleRequest方法
ModelAndView handleRequest(HttpServletRequest request,HttpServletResponse response)
实现类可以访问对应请求的request和response,还必须返回一个包含视图路径或视图路径和模型的ModelAndView对象。
Controller接口只能处理单一动作,而一个基于注解的控制器可以通知支持多个请求处理动作,并且无需实现任何接口。
下面,我们就来创建第一个SpringMVC应用。
- 首先,配置SpringMVC核心请求分发器
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
由于<url-pattern>
配置成了/*
,所以,所有的请求都要被SpringMVC处理。
- 第二步,配置springmvc的配置文件。
注意配置文件的名字要与
<servlet-name/>
向对应:action-servlet.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean name="/product_input.action"class="com.controller.InputProductController"/>
<bean name="/product_save.action" class="com.controller.SaveProductController"/>
<beans/>
这里声明了两个控制器,分别映射到/product_input.action和/product_save.action.
- 第三步,定义实体类
/**
- @Description: Spring mvc.
- @Author:Zander
- @CreateDate:Aug 8, 2015
- @Company:
*/
@SuppressWarnings("serial")
public class Product implements Serializable{
private String name;
private String description;
private Float price;
private Date productionDate;
getter/setter
......
}
- 第四步,创建Controller
package com.springmvc.test.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import com.springmvc.test.domain.Product;
/**
* @Description:
* @Author:Zander
* @CreateDate:Aug 16, 2015
* @Company:
*/
public class SaveProductController implements Controller{
private static final Logger logger = Logger.getLogger(SaveProductController.class);
@Override
public ModelAndView handleRequest(HttpServletRequest request,
HttpServletResponse response) throws Exception {
logger.info("SaveProductController called");
Product product = new Product();
product.setName(request.getParameter("name"));
product.setDescription(request.getParameter("description"));
product.setPrice(Float.parseFloat(request.getParameter("price")));
//插入数据的代码
return new ModelAndView("/WEB-INF/jsp/productDetails.jsp","product",product);
}
}
- 第五步,创建jsp页面(略)
请求上面两个Controller的路径分别是 :
host:port/webroot/product_input.action
host:port/webroot/product_save.ation
版权声明:本文为博主原创文章,未经博主允许不得转载。