回顾Java平台上Web开发历程来看,从Servlet出现开始,到JSP繁盛一时,然后是Servlet+JSP时代,最后演化为现在Web开发框架盛行的时代。一般接触到一个新的Web框架,都会想问这个框架优势在哪?或者比其他框架好在哪里?如果没有使用Spring MVC框架,而是使用其他框架并且能够很好地满足要求,这样转换框架或许不是一个好主意。如果像我这样首次接触Web开发框架,Spring MVC还是值得优先考虑的。

  • Web层,更确切说是在框架处理器方面,Spring MVC对请求处理期间涉及的各种关注点进行了合理而完全的分离,并明确设置了响应的角色用于建模并处理整个声明周期中的各个关注点。其中包括:HandlerMapping用于处理Web请求与具体请求处理控制器的映射关系;LocaleResolver用于国际化处理;ViewResolver用于灵活的视图选择。
  • 从表现层来看,Spring MVC用了逻辑命名视图策略,通过引入ViewResolver和View,清晰分离了视图策略的选择和渲染与具体控制器之间的耦合,适合各种视图技术很容易集成到Spring MVC中,不管是JSP/JSTL作为视图技术,还是Velocity/FreeMarker,甚至是PDF/Excel等二进制格式视图形式,使用它们,只需要简单的配置。
  • Spring MVC还有另一个特色,就是“师出名门”,作为Spring大家族中的一员,很容易得到家族中其他兄弟的支持,从IoC到AOP的支持,以及数据访问层、事务管理层的支持等。Spring MVC属于请求驱动的Web框架,将单一Servlet作为整个应用的Front Controller,该Servlet收到具体的Web请求后,会参考设置的映射关系,将待处理的Web请求转发给次一级的控制器来处理。

建立Spring MVC工程

  LZ的开发环境是IDEA,这几天使用IDEA的感觉来看,IDEA整体界面比eclipse清爽,打开和关闭速度要快好多,但是好多功能还不知道在哪里,呜呜呜…

1 打开IDEA,新建工程

2 工程选择如下所示

  当然,新建工程时也可以选择Spring – Spring MVC(这里把Web Application也要选择上)

3 工程命名为mvcdemo,如下所示,然后点击finash

4 新建工程完成后,需要手动添加关联的jar包(LZ没有使用maven,为什么呢,因为现在还不会…),鼠标移动工程名处右键点击Open Module Settings,添加对应的Jar包

5 最后工程整体如下所示,为了方便,把spring所有的jar包都给添加上了,还有commons-logging包。

6 配置web.xml文件和mvcdemo-servlet.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1"> <display-name>Spring MVC</display-name> <servlet>
<servlet-name>mvcdemo</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>mvcdemo</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping> </web-app>

  以上是web.xml文件,DispatcherServlet作为整个应用的Front Controller,其用来处理所有请求,而不能像“一个Web请求对应一个Servlet”那样获取Web容器对URL映射匹配的支持,而只好自己处理具体的Web请求和具体的处理类之间的映射关系了,也就是需要借助于ControllerBeanNameHandlerMapping了。

<?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"> <!-- HandlerMapping 根据benaname找到对应的controller -->
<bean class="org.springframework.web.servlet.mvc.support.ControllerBeanNameHandlerMapping"/> <!-- controller 配置处理器 -->
<bean name="/hello" class="com.luoxn28.hello.HelloController"/> <!-- ViewResolver 视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 前缀 和 后缀 -->
<property name="prefix" value="/WEB-INF/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>

  ControllerBeanNameHandlerMapping用来处理具体的Web请求和具体的处理类之间的映射关系,而Controller(HelloController是Controller的实现类)也就是一个具体的处理类。InternalResourceViewResolver配置的是视图解析相关信息。

7 在src文件夹下新建com.luoxn28.hello包,然后在包下新建HelloController类。

package com.luoxn28.hello;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class HelloController extends AbstractController {
@Override
protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) {
String hello = request.getParameter("hello"); System.out.println("HelloController: " + hello);
ModelAndView mav = new ModelAndView("hello");
mav.addObject("hello", hello); return mav;
}
}

8 在WEB-INF文件夹下新建hello.jsp文件,内容如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>springmvc</title>
</head>
<body>
Spring MVC<br/>
${hello}
</body>
</html>

9 更改index.jsp文件如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<form action="hello" method="post">
hello:<input type="text" name="hello"/>
<input type="submit" value="提交"/>
</form>
</body>
</html>

10 至此,整个工程建立完毕,现在的工程视图如下:

  然后鼠标移动工程名处右键点击Open Module Settings,进行配置,在Modules下添加Spring,选择Spring Application Context为WEB-INF下的mvc-demo-servlet.xml,如下图所示:

  点击Artifacts,下面有提示信息,点击Fix...按钮,如下所示:

  一切设置完毕后,点击启动按钮,显示画面如下所示:

  随便输入一串字符串后点击提交,比如输入"luoxn28",最后会跳转到如下界面,到此整个工程结束。

参考资料

  1、Spring MVC从入门到精通视频教程

  2、《Spring揭秘》Spring MVC章节

Spring学习之第一个Spring MVC程序(IDEA开发环境)的更多相关文章

  1. Spring学习之第一个hello world程序

    Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development a ...

  2. spring学习之第一个spring程序

    spring的入门程序 1.在Eclipse中创建Java项目,并将spring的四个核心包和依赖包添加到src里,发布到类路劲下,项目如图所示: 2.UserDao程序如下: package com ...

  3. Spring学习之第一个AOP程序

    IOC和AOP是Spring的两大基石,AOP(面向方面编程),也可称为面向切面编程,是一种编程范式,提供从另一个角度来考虑程序结构从而完善面向对象编程(OOP). 在进行 OOP 开发时,都是基于对 ...

  4. Spring学习之——手写Spring源码V2.0(实现IOC、D、MVC、AOP)

    前言 在上一篇<Spring学习之——手写Spring源码(V1.0)>中,我实现了一个Mini版本的Spring框架,在这几天,博主又看了不少关于Spring源码解析的视频,受益匪浅,也 ...

  5. ASP.NET MVC Web API 学习笔记---第一个Web API程序

    http://www.cnblogs.com/qingyuan/archive/2012/10/12/2720824.html GetListAll /api/Contact GetListBySex ...

  6. Spring学习(三)——Spring中的依赖注入的方式

    [前面的话] Spring对我太重要了,做个关于web相关的项目都要使用Spring,每次去看Spring相关的知识,总是感觉一知半解,没有很好的系统去学习一下,现在抽点时间学习一下Spring.不知 ...

  7. Spring学习(二)——Spring中的AOP的初步理解[转]

      [前面的话] Spring对我太重要了,做个关于web相关的项目都要使用Spring,每次去看Spring相关的知识,总是感觉一知半解,没有很好的系统去学习一下,现在抽点时间学习一下Spring. ...

  8. Spring学习(二)——Spring中的AOP的初步理解

    [前面的话] Spring对我太重要了,做个关于web相关的项目都要使用Spring,每次去看Spring相关的知识,总是感觉一知半解,没有很好的系统去学习一下,现在抽点时间学习一下Spring.不知 ...

  9. spring 学习(四): spring 的 jdbcTemplate 操作

    spring 学习(四): spring 的 jdbcTemplate 操作 spring 针对 javaee 的每一层,都提供了相应的解决技术,jdbcTemplate 的主要操作在 dao 层. ...

随机推荐

  1. WPF如何实现一款类似360安全卫士界面的程序?(共享源码!)

    以前学习Windows Form编程的时候,总感觉自己做的界面很丑,看到360安全卫士.迅雷等软件的UI设计都非常美观,心里总是憧憬着要是自己能实现这样的UI效果该多好!!!另一个困扰我的问题是,这个 ...

  2. 极富创意的3D文件夹切换效果

    今天分享的是一个极富创意的文件夹切换效果.这个案例使用CSS 3动画实现了一个3D的平行六面体旋转效果.点击顶部的3个按钮可以旋转并切换.另外,每个六面体本身是一个文件夹,点击后可以展开查看里面的详情 ...

  3. JavaScript中使用typeof运算符需要注意的几个坑

    typeof是一个运算符,它对操作数返回的结果是一个字符串,有6种(只针对ES,不包含HOST环境对象). 1.'undefined'2.'boolean'3.'string'4.'number'5. ...

  4. AFNetworking二次封装的那些事

    AFNetworking可是iOS网络开发的神器,大大简便了操作.不过网络可是重中之重,不能只会用AFNetworking.我觉得网络开发首先要懂基本的理论,例如tcp/ip,http协议,之后要了解 ...

  5. Android pull解析xml文件

    本文介绍android中使用pull来解析xml文件 先自己写一个xml文件,存一些天气信息 <?xml version="1.0" encoding="UTF-8 ...

  6. iOS关于菜单滚动视图实现

    菜单滚动视图也是在项目开发过程中比较常用到的功能,先直接看效果图 实现的效果如下: 当菜单个数的总长度超过一个屏宽度就计算每一个的文字宽度,若没有则只进行一个屏平分,点击菜单项时,滚动的视图位置会随着 ...

  7. Python语法基础

    # coding=utf-8import random teacher = (1 < 3) and (2 > 5)print (teacher) index = random.randin ...

  8. 【代码笔记】iOS-点击搜索跳转到另外一个页面

    一,效果图. 二,工程图. 三,代码. RootViewController.h #import <UIKit/UIKit.h> @interface RootViewController ...

  9. c中的基本运算

    一. 算术运算 C语言一共有34种运算符,包括了常见的加减乘除运算 1. 加法运算+ l 除开能做加法运算,还能表示正号:+5.+90 2. 减法运算- l 除开能做减法运算,还能表示符号:-10.- ...

  10. 关于激活Bentley软件详细步骤介绍(再补充一个)

    在安装完ContextCapture软件之后,大家怀着迫不及待的心情双击了运行快捷键.但是很遗憾的是,会产生下面的提示窗口: 也许大家并不在意,就觉得关掉这个窗口不就行了.然而,头疼的问题来了.这个窗 ...