前言
既然大家看到这篇文章,相信大家都听说过SpringMVC也大概知道它是做什么的。请允许我简单的介绍一下SpringMVC 给那些初学者一些入门的提示。
对于Java的码农来说,Web应用应该都是很熟悉的。而Web应用的展现层是Web应用必不可少的环节。而SpringMVC就是为展现层提供的一个优秀的Web框架。和众多Web框架一样,它基于MVC设计模式,此外它采用的松散耦合可插拔的组件结构,比其它的MVC框架更具有拓展性和灵活性。SpringMVC通过一套注解,让POJO成为请求处理的控制器,无需实现或者继承任何接口或者父类,大大增加了代码的灵活程度,减少了耦合度。另外SpringMVC还支持REST风格的URL请求:注解驱动及REST风格的SpringMVC是Spring3.0的最出彩的功能之一。此外,SpringMVC在数据绑定、视图解析、本地化处理及静态资源处理上都有许多不俗的表现。它在框架的拓展性、灵活性方面全面超越了Struts、WebWork等MVC框架。越来越多的企业已经开始把原来的Struts换成了SpringMVC,为了让 大家快速的熟悉SpringMVC我编写了此系列的文章。把我在工作中常用的功能展现给大家,让大家快速的学习使用它。本人技术水平有限,如果有错误请大家指正。说了那么多废话,现在开始进入正题吧,编写那万能的入门开篇 Hello World!
声明:本人的开发环境为Eclipse,使用Maven的朋友我会把pom文件也上传上来的。
前期准备
1.到Spring官网下载Spring框架最新版本3.2.1 http://www.springsource.org/download/community?project=Spring%2520Framework
2.创建Web项目SpringMVC File->New->Other>Web>Dynamic WebProject
3.增加一个新的文件夹config.files用来存放配置文件
4.修改Context Directory为webapp
6.添加j2ee依赖包
右键项目->Build Path->Add Libraries..->Server Runtime->Apache Tomcat xx(注意:这个需要你在eclipse添加tomcat配置)
添加springmvc依赖jar包
到此,基本项目创建已经完成。下面开始编写代码。
配置SpringMVC框架
首先要对web.xml文件进行配置,以便Web容器启动时能够自动启动Spring容器
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
- <display-name>SpringMVC</display-name>
- <!-- 配置Spring配置文件的加载路径 -->
- <context-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>/WEB-INF/spring/root-context.xml</param-value>
- </context-param>
- <!-- 配置Spring容器的监听器,它将使用上配置的contextConfigLocation的值的路径来获得Spring配置文件的路径 -->
- <listener>
- <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
- </listener>
- <!-- SpringMVC的主控Servlet -->
- <servlet>
- <servlet-name>appServlet</servlet-name>
- <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
- <init-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
- </init-param>
- <load-on-startup>1</load-on-startup>
- </servlet>
- <!--SpringMVC处理的URL -->
- <servlet-mapping>
- <servlet-name>appServlet</servlet-name>
- <url-pattern>/</url-pattern>
- </servlet-mapping>
- <welcome-file-list>
- <welcome-file></welcome-file>
- </welcome-file-list>
- </web-app>
配置好web.xml后 我们首先写一个控制器HomeController,来处理首页请求。
- package com.yubai.springmvc;
- import java.text.DateFormat;
- import java.util.Date;
- import java.util.Locale;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.stereotype.Controller;
- import org.springframework.ui.Model;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RequestMethod;
- /**
- * 处理首页请求
- *
- * @author SongYF
- *
- */
- @Controller
- public class HomeController {
- private static final Logger logger = LoggerFactory
- .getLogger(HomeController.class);
- /**
- * 处理首页请求
- */
- @RequestMapping(value = "/", method = RequestMethod.GET)
- public String home(Locale locale, Model model) {
- // 显示当前地域
- logger.info("Welcome home! The client locale is {}.", locale);
- Date date = new Date();
- DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG,
- DateFormat.LONG, locale);
- String formattedDate = dateFormat.format(date);
- model.addAttribute("serverTime", formattedDate);
- return "home";
- }
- }
SpringMVC的Controller注解可以讲任何一个POJO类标注为SpringMVC的控制器,处理HTTP请求。具体其它部分代码是什么意思,暂不讲解。首先教大家入门。
接下来创建SpringMVC的配置文件 在WEB-INF中创建spring/appServlet文件夹 创建servlet-context.xml配置文件
- <?xml version="1.0" encoding="UTF-8"?>
- <beans:beans xmlns="http://www.springframework.org/schema/mvc"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:beans="http://www.springframework.org/schema/beans"
- xmlns:context="http://www.springframework.org/schema/context"
- xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
- http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
- http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
- <!-- 开启 Spring MVC @Controller设计模型-->
- <annotation-driven />
- <!-- 处理HTTP GET请求 /resources/** 使之直接从 ${webappRoot}/resources文件夹下返回资源 -->
- <resources mapping="/resources/**" location="/resources/" />
- <!-- 配置视图解析器 把控制器返回的字符串解析为/WEB-INFO/views/下面的jsp页面 具体做法就是讲返回的字符串加上你指定的后缀.jsp -->
- <beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
- <beans:property name="prefix" value="/WEB-INF/views/" />
- <beans:property name="suffix" value=".jsp" />
- </beans:bean>
- <!--配置SpringMVC扫描路径 -->
- <context:component-scan base-package="com.yubai.springmvc.web" />
- </beans:beans>
在这里解释一下HomeController里面home方法返回的“home”是啥意思? SpringMVC讲home方法返回的home字符串 匹配配置文件里面的配置 到prefix指定的/WEB-INF/views/文件夹里面去找 home.jsp这个界面 渲染后返回给用户。
现在在/WEB-INF/views/下面建立 home.jsp
- <%@ page language="java" contentType="text/html; charset=GBK"
- pageEncoding="GBK"%>
- <html>
- <head>
- <title>SpringMVC学习首页</title>
- </head>
- <body>
- <h1>
- Hello world!
- </h1>
- <P> 当前服务器时间 ${serverTime}. </P>
- </body>
- </html>
最后一项任务,将log4j的配置文件增加到config.files文件夹中
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd">
- <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
- <!-- Appenders -->
- <appender name="console" class="org.apache.log4j.ConsoleAppender">
- <param name="Target" value="System.out" />
- <layout class="org.apache.log4j.PatternLayout">
- <param name="ConversionPattern" value="%-5p: %c - %m%n" />
- </layout>
- </appender>
- <!-- Application Loggers -->
- <logger name="com.yubai.springmvc">
- <level value="info" />
- </logger>
- <!-- 3rdparty Loggers -->
- <logger name="org.springframework.core">
- <level value="info" />
- </logger>
- <logger name="org.springframework.beans">
- <level value="info" />
- </logger>
- <logger name="org.springframework.context">
- <level value="info" />
- </logger>
- <logger name="org.springframework.web">
- <level value="info" />
- </logger>
- <!-- Root Logger -->
- <root>
- <priority value="warn" />
- <appender-ref ref="console" />
- </root>
- </log4j:configuration>
到现在项目的截图如下
其中root-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/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
- <!-- Root Context: defines shared resources visible to all other web components -->
- </beans>
发布项目测试运行
关于eclipse如何部署项目我就不再赘述了,如果不会的同学可以到baidu上去查询一下。
在浏览器中输入http://localhost:9080/SpringMVC/ (我将我的tomcat端口修改为9080了 大家的应该是8080)就可以看到效果了。
结束语
到目前为止大家已经看到了如何搭建一个基础的SpringMVC开发环境,后面的文章我会陆续的和大家分享SpringMVC的原理以及各种功能。这篇文章仅作为HelloWorld给大家呈现。代码在后面添加上了了,但是建议大家还是自己动手写一下。另外使用MAVENd的同学(.pom文件我给放在config.files文件夹下面了,不使用MAVEN的同学可以删除掉)。如有不足请联系我,谢谢!