废话不多说,直接捞干货:

1、环境:

JDK1.6.0_43

Tomcat6.0.32

Spring4.0.0.Release

Eclipse3.7.2

2、下载Spring4:

http://repo.springsource.org/libs-release-local/org/springframework/spring/4.0.0.RELEASE/spring-framework-4.0.0.RELEASE-dist.zip

3、由于spring3之后jar包分离,还需要下载相关的jar

4、eclipse中新建一个动态web项目,导入spring4的所有jar包(也可以逐步导入,用到哪个导入哪个)。

5、修改web.xml,引入spring4:

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4"
 xmlns="http://java.sun.com/xml/ns/j2ee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/j2eehttp://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

<!-- 这里的名字是dispatcher,xml的名字就应该是dispatcher-servlet.xml -->
 <servlet>
  <servlet-name>dispatcher</servlet-name>
  <servlet-class>
   org.springframework.web.servlet.DispatcherServlet
  </servlet-class>
  <load-on-startup>1</load-on-startup>
 </servlet>

<servlet-mapping>
  <servlet-name>dispatcher</servlet-name>
  <url-pattern>/</url-pattern>
 </servlet-mapping>

<!-- 由于上边的url-pattern配置,会拦截静态文件导致静态文件无法访问,所以单独处理一下,用到哪些静态文件,就添加一个相应的servlet-mapping-->

<servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.css</url-pattern>
    </servlet-mapping>

<context-param>
       <param-name>contextConfigLocation</param-name>
      <param-value>  /WEB-INF/dispatcher-servlet.xml,/WEB-INF/application-context.xml  </param-value>
  </context-param>

<listener>
  <listener-class>
   org.springframework.web.context.ContextLoaderListener
  </listener-class>
 </listener>
</web-app>

6、编写spring4配置文件dispachter-servlet.xml,注释已经够详细了,不用再解释了吧:

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
 xmlns:context="http://www.springframework.org/schema/context"
 xmlns:aop="http://www.springframework.org/schema/aop"
 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
      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
       http://www.springframework.org/schema/aop
       http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
  <!-- 启动注解驱动的Spring MVC功能注册请求url和注解POJO类方法的映射-->
 <mvc:annotation-driven/>
 <context:component-scan base-package="com" />
 <!-- 让@Autowired 生效  -->
 <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor" />
 <!-- 让@Resource 生效 -->
 <!--<context:annotation-config />  -->
 
 <!--不能同时配置两种视图解析方式,要么使用jsp,要么使用freemarker-->
 <bean  class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <property name="prefix">   <value>/WEB-INF/views/</value> </property>
  <property name="suffix">   <value>.jsp</value>  </property>
 </bean>
  <!-- 启用aop -->
 <!--<aop:aspectj-autoproxy proxy-target-class="true"/>  -->

<!-- freemarker的配置 -->
 <!--
  <bean id="freemarkerConfig"
   class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
   <property name="templateLoaderPath" value="/WEB-INF/views/" />
   <property name="defaultEncoding" value="utf-8" />
   <property name="freemarkerSettings">
    <props>
     <prop key="template_update_delay">10</prop>
     <prop key="locale">zh_CN</prop>
     <prop key="datetime_format">yyyy-MM-dd</prop>
     <prop key="date_format">yyyy-MM-dd</prop>
     <prop key="number_format">#.##</prop>
    </props>
   </property>
  </bean>
 
  <bean id="viewResolver"
   class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
   <property name="viewClass" value="org.springframework.web.servlet.view.freemarker.FreeMarkerView"></property>
   <property name="suffix" value=".ftl" />
   <property name="contentType" value="text/html;charset=utf-8" />
   <property name="exposeRequestAttributes" value="true" />
   <property name="exposeSessionAttributes" value="true" />
   <property name="exposeSpringMacroHelpers" value="true" />
  </bean>
  -->
  
  <!--execution(* com.wh.*.*(..))
   第一个*表示返回值类型
   第二个*表示com.wh包下的所有类
   第三个*表示所有方法
  ..表示所有参数 -->
  <!-- 下面的配置表示拦截com.wh.HelloWorldController类的hello方法 -->
       <bean id="aopHandler2" class="com.mvc.intec.AopDemo"></bean> 
    <aop:config> 
         <aop:aspect  id="hello" ref="aopHandler2"> 
         <aop:pointcut id="poicut" expression="execution(* com.wh.HelloWorldController.hello(..))" />
         <!-- method 指出before要调用的方法 --> 
         <aop:before method="beforeTest" pointcut-ref="poicut"/> 
         <aop:before method="afterTest" pointcut-ref="poicut"/> 
         </aop:aspect> 
     </aop:config> 
   
 <!-- 上传文件时需要做的配置 --> 
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> 
        <property name="maxUploadSize" value="5000000"></property> 
    </bean> 
</beans>

7、数据源配置文件(mysql 5.5)application-context.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/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"  destroy-method="close">
  <!-- Connection Info -->
  <property name="driverClassName" value="com.mysql.jdbc.Driver" />
  <property name="url" value="jdbc:mysql://localhost:7006/dtp?useUnicode=true&amp;characterEncoding=UTF-8" />
  <property name="username" value="kiger" />
  <property name="password" value="kiger"></property>

<!-- Connection Pooling Info -->
  <property name="maxIdle" value="5" />
  <property name="maxActive" value="40" />
  <!--  设置事务是否自动提交,如果设置为false,则需要在代码中手动提交 -->
  <property name="defaultAutoCommit" value="true" />
  <property name="timeBetweenEvictionRunsMillis" value="3600000" />
  <property name="minEvictableIdleTimeMillis" value="3600000" />
 </bean>

<!-- 注入 -->
 <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
  <property name="dataSource">   <ref bean="dataSource" />  </property>
 </bean>
   <!--     注入 -->
 <bean id="userDao" class="com.mvc.dao.UserDao">
  <!-- <property name="jdbcTemplate">   <ref bean="jdbcTemplate" />  </property> --> </bean>
<!--   删除了property,因为userDao可以通过@Autowired注解得到-->
 <bean id="userService" class="com.mvc.service.UserService">
  <!-- <property name="userDao">   <ref bean="userDao" />  </property> -->
 </bean>
  </beans>

8、创建一个Controller:com.wh.HelloWorldController

package com.wh;

import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.io.FileUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import com.mvc.rest.User;
import com.mvc.service.UserService;

/**
 * spring4MVC测试类,主要测试各种注解的用法 tomcat:6.0.30以上(tomcat6.0.32) JDK :jdk6
 * update10以上(jdk6 update43s) spring:spring4.0.4Release
 *
 * @ClassName: HelloWorldController
 * @Description:
 * @author wh

* @date 2014-7-16 上午10:40:39
 * @Controller:将当前类注册成一个controller
 */
@Controller
public class HelloWorldController {

//autowired是自动装载,通过这个注解可以直接获取配置的bean,而不同通过set方法来获取
 @Autowired
 private UserService userService;

private static final Logger logger = LoggerFactory
   .getLogger(HelloWorldController.class);

public HelloWorldController() {
  System.out.println("初始化....");
  }

/**
  * @RequestMapping("/hello/{name "):注册一个REST风格的url访问地址,hello是路径,name是参数,称为模板
  * @PathVariable String name:将mapping中的参数绑定到name中
  * @Title: hello
  * @Description: TODO
  * @param  name
  * @param  model
  * @return String 返回类型
  * @throws
  */

@RequestMapping("/hello/{name}")
 public String hello(@PathVariable String name, Model model) {
  model.addAttribute("name", name);
    return "hello";
 }

}

9、WEB-INF/views目录下创建hello.jsp:

<%@ page language="java" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath =
request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style>
 body{ height:100%; overflow:auto; }
</style>
</head>
<html>

<head>
    <base href="<%=basePath%>">
    <title>My JSP 'hello.jsp' starting page</title>   
  <meta http-equiv="pragma" content="no-cache">
  <meta http-equiv="cache-control" content="no-cache">
  </head>

<body> 
                   <span style=" font-weight:bold;">你好${name},这是我的第一个springMVC页面! </span>
     </body>
 
</html>

10、相关jar包说明,下载spring老版本的依赖库,大部分jar都能找到:

EL表达式相关:jstl-1.2.jar,standard-1.0.2.jar

Spring相关:log4j-1.2.16.jar,commons-logging-1.1.jar

数据库连接:mysql-connector-java-5.1.0-bin.jar

log4j日志相关:slf4j-api-1.6.4.jar,slf4j-log4j12-1.6.4.jar

附件上传相关:commons-fileupload-1.3.1.jar,commons-io-2.2.jar

FreeMarker相关:freemarker.jar

AOP相关:aopalliance.jar,aspectjrt.jar,aspectjweaver.jar

Spring4MVC相关推荐

  1. Spring4MVC 请求参数映射和Content-type

    目录 前言 不使用注解(不传则为null) 基本数据类型和日期类型 自定义类型POJO @PathVariable注解 @RequestParam 注解 @RequestBody注解 复杂对象Arra ...

  2. Spring4 MVC Hello Wrold

    项目目录结构图: 1.maven pom.xml: <!-- spring版本号 --><properties><spring.version>4.1.1.RELE ...

最新文章

  1. mysql 5.7 收费_MySQL5.7 常用用户操作
  2. spring整合mybatis(入门级简单教程1)--在spring中配置c3p0,并成功测试
  3. SQL语句中between and 范围
  4. Cloud for Customer里点了Opportunity ID的超链接到进入overview page,背后发生了什么事?
  5. 机试题:地图定位、拍照并显示、录制视频并播放
  6. DTD(Document Type Definition) 简介
  7. iOS dSYM详解和分析crash,ips文件
  8. ECharts快速上手 入门教学
  9. nps内网穿透p2p隧道实战
  10. Mongodb 设置过期时间Expire Date
  11. 以图搜图 图像匹配_sift 实现以图搜图
  12. matlab符号函数subs,什么是matlab subs函数?
  13. 哇!家居环境居然能“可视化”?这守护真的牛
  14. 怎么用计算机检测颜色的深浅,真假10bit? !怎么测试呢?两种测试显示器10位色深的方法...
  15. 求最大公因数的几种算法
  16. 公共艺术与计算机论文题目,优秀公共艺术论文选题 公共艺术论文题目如何定...
  17. 大数据 Linux 搭建(一)
  18. 7月火影忍者服务器维护,7月12日停机更新公告
  19. Fast Global Registration(快速全局配准)
  20. java double类型判空,简单封装JAVA空判断

热门文章

  1. 【循环测试试题】数字游戏
  2. Linux电源管理(6)_Generic PM之Suspend功能【重磅文章】-- wowo
  3. NBT封面:水稻NRT1.1B基因调控根系微生物组参与氮利用(作者解读)
  4. MTK的Flashtool 加载scatter-loading是报错
  5. 在Windows10系统下安装SQL Server2000
  6. 一次看懂 IQC / IPQC / PQC / FQC / OQC!
  7. oracle order by 走索引吗,oracle order by 索引是否使用的情况
  8. win10系统如何关闭任务栏缩略图预览
  9. Spring Event 业务解耦神器,刷爆了
  10. navi push navi,