Spring学习笔记-springMVC入门Demo

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值