回顾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从入门到精通视频教程

springmvc IDEA的更多相关文章

  1. 【分享】标准springMVC+mybatis项目maven搭建最精简教程

    文章由来:公司有个实习同学需要做毕业设计,不会搭建环境,我就代劳了,顺便分享给刚入门的小伙伴,我是自学的JAVA,所以我懂的.... (大图直接观看显示很模糊,请在图片上点击右键然后在新窗口打开看) ...

  2. Springmvc数据校验

    步骤一:导入四个jar包 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=" ...

  3. 为什么做java的web开发我们会使用struts2,springMVC和spring这样的框架?

    今年我一直在思考web开发里的前后端分离的问题,到了现在也颇有点心得了,随着这个问题的深入,再加以现在公司很多web项目的控制层的技术框架由struts2迁移到springMVC,我突然有了一个新的疑 ...

  4. 【SSM框架】Spring + Springmvc + Mybatis 基本框架搭建集成教程

    本文将讲解SSM框架的基本搭建集成,并有一个简单demo案例 说明:1.本文暂未使用maven集成,jar包需要手动导入. 2.本文为基础教程,大神切勿见笑. 3.如果对您学习有帮助,欢迎各种转载,注 ...

  5. 快速搭建springmvc+spring data jpa工程

    一.前言 这里简单讲述一下如何快速使用springmvc和spring data jpa搭建后台开发工程,并提供了一个简单的demo作为参考. 二.创建maven工程 http://www.cnblo ...

  6. redis集成到Springmvc中及使用实例

    redis是现在主流的缓存工具了,因为使用简单.高效且对服务器要求较小,用于大数据量下的缓存 spring也提供了对redis的支持: org.springframework.data.redis.c ...

  7. 流程开发Activiti 与SpringMVC整合实例

    流程(Activiti) 流程是完成一系列有序动作的概述.每一个节点动作的结果将对后面的具体操作步骤产生影响.信息化系统中流程的功能完全等同于纸上办公的层级审批,尤其在oa系统中各类电子流提现较为明显 ...

  8. springMVC学习笔记--知识点总结1

    以下是学习springmvc框架时的笔记整理: 结果跳转方式 1.设置ModelAndView,根据view的名称,和视图渲染器跳转到指定的页面. 比如jsp的视图渲染器是如下配置的: <!-- ...

  9. springMVC初探--环境搭建和第一个HelloWorld简单项目

    注:此篇为学习springMVC时,做的笔记整理. MVC框架要做哪些事情? a,将url映射到java类,或者java类的方法上 b,封装用户提交的数据 c,处理请求->调用相关的业务处理—& ...

  10. springmvc的拦截器

    什么是拦截器                                                         java里的拦截器是动态拦截action调用的对象.它提供了一种机制可以使 ...

随机推荐

  1. 基于JSP的RSS阅读器的设计与实现

    阅读器访问地址:http://easyrss.tk/,欢迎体验! 阅读导览 一.    概述  二.    设计的基本概念和原理 三.    设计方案 四.    主要源代码 五.    阅读器使用说 ...

  2. Zookeeper学习文章目录1

    目录:参考文章如下 1.ZooKeeper学习第一期---Zookeeper简单介绍 2. ZooKeeper学习第二期--ZooKeeper安装配置 3. ZooKeeper学习第三期---Zook ...

  3. JavaScript之DOM操作(二)

    这一篇写写常用并且通用的操作节点的一些方法. 1.节点方法 1>appendChild() 向childNodes列表的末尾添加一个节点,语法 var aChild = element.appe ...

  4. 全功能开发团队(FSD)

  5. 对抗网络GAN的应用实例

      https://sigmoidal.io/beginners-review-of-gan-architectures/ 嗨,大家好!像许多追随AI进展的人一样,我无法忽略生成建模的最新进展,尤其是 ...

  6. RollViewPager图片轮播效果开源框架的使用

    RollViewPager是一个自动轮播的Viewpager, 支持无限循环. 触摸时会暂停播放,直到结束触摸一个延迟周期以后继续播放. 看起来就像这样.指示器可以为点可以为数字还可以自定义,位置也可 ...

  7. git clone过程中发生的错误

    错误提示: 问题原因以及解决方式:http://blog.csdn.net/huihut/article/details/79404421

  8. 如何使用CSS进行网页布局(HTML/CSS)

    什么叫做布局? 又称为版式布局,是网页UI设计师将有限的视觉元素进行有机的排列组合. 题目:假设高度已知,请写出三栏布局,其中左栏和右栏宽度各为300px,中间自适应 1.浮动布局 <!DOCT ...

  9. JVM知识(二):类加载器原理

    我们知道我们编写的java代码,会经过编译器编译成字节码(class文件),再把字节码文件装载到JVM中,最后映射到各个内存区域中,我们的程序就可以在内存中运行了.那么问题来了,这些字节码文件是怎么装 ...

  10. spring boot(12)-数据源配置原理

    本篇讲的不仅是数据源配置,这也是spring boot实现自动配置的一部分.要理解数据源的配置原理,首先要理解第十篇tomcat连接池的配置 数据源配置源码 这里截取org.springframewo ...