与struts2一样SpringMVC也是一个MVC框架。Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。
在配置上SpringMVC可以和Spring无缝连接,性能上Spring也会比Struts2要好。
SpringMVC与struts2对比(在网上复制粘贴的)
1. 机制:spring mvc的入口是servlet,而struts2是filter(这里要指出,filter和servlet是不同的。以前认为filter是servlet的一种特殊),这样就导致了二者的机制不同,这里就牵涉到servlet和filter的区别了。
2. 性能:spring会稍微比struts快。spring mvc是基于方法的设计,而sturts是基于类,每次发一次请求都会实例一个action,每个action都会被注入属性,而spring基于方法,粒度更细,但要小心把握像在servlet控制数据一样。spring3 mvc是方法级别的拦截,拦截到方法后根据参数上的注解,把request数据注入进去,在spring3 mvc中,一个方法对应一个request上下文。而struts2框架是类级别的拦截,每次来了请求就创建一个Action,然后调用setter getter方法把request中的数据注入;struts2实际上是通过setter getter方法与request打交道的;struts2中,一个Action对象对应一个request上下文。
3. 参数传递:struts是在接受参数的时候,可以用属性来接受参数,这就说明参数是让多个方法共享的。
4. 设计思想上:struts更加符合oop的编程思想, spring就比较谨慎,在servlet上扩展。
5. intercepter的实现机制:struts有以自己的interceptor机制,spring mvc用的是独立的AOP方式。这样导致struts的配置文件量还是比spring mvc大,虽然struts的配置能继承,所以我觉得论使用上来讲,spring mvc使用更加简洁,开发效率Spring MVC确实比struts2高。spring mvc是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,所以说从架构本身上spring3 mvc就容易实现restful url。struts2是类级别的拦截,一个类对应一个request上下文;实现restful url要费劲,因为struts2 action的一个方法可以对应一个url;而其类属性却被所有方法共享,这也就无法用注解或其他方式标识其所属方法了。spring3 mvc的方法之间基本上独立的,独享request response数据,请求数据通过参数获取,处理结果通过ModelMap交回给框架方法之间不共享变量,而struts2搞的就比较乱,虽然方法之间也是独立的,但其所有Action变量是共享的,这不会影响程序运行,却给我们编码,读程序时带来麻烦。
如何使用SpringMVC
学习一个框架,当然需要知道这个框架如何使用,这时候就要需要一个文档了,说到文档最好的文档当然是官方的文档了。
首先下载spring-framework,具体怎么下载百度吧。这里用的是4.1.6版本的。
下载好之后打开
spring-framework-4.1.6.RELEASE\docs\spring-framework-reference\html下的index.html
找到第五部分The Web(文档太多?谷歌浏览器ctrl+F搜索the web)
查看文档17 web MVC framework
英文看不懂?谷歌翻译了解一下
进入之后往下看可以看到一个Spring Web MVC的请求处理工作流程
在往下看就可以看到就是教我们如何使用SpringMVC了
步骤1建立一个web工程
导入jar包
commons-logging-1.1.1.jar
spring-beans-4.1.6.RELEASE.jar
spring-context-4.1.6.RELEASE.jar
spring-context-support-4.1.6.RELEASE.jar
spring-core-4.1.6.RELEASE.jar
spring-expression-4.1.6.RELEASE.jar
spring-web-4.1.6.RELEASE.jar
spring-webmvc-4.1.6.RELEASE.jar
首先官方文档是这样说的,然后下面是一个在web.xml的配置
它 |
步骤2配置web.xml
类名太长不用记只要记住红色部分然后在eclipse里shift+t搜索这个类就可以了
<servlet> <servlet-name>SpringMvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>SpringMvc</servlet-name> <url-pattern>*.html</url-pattern> </servlet-mapping> |
步骤3编写controller类
//controller类需要实现controller接口 public class HelloController implements Controller {
@Override public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse rep) throws Exception { ModelAndView mv=new ModelAndView(); //封装要在视图中显示的数据 mv.addObject("msg", "hello springMvc"); //设置视图名 mv.setViewName("hello"); return mv; } |
步骤4关联Controller类
在SpringMVC中是如何关联controller呢?和struts2在struts.xml里面配置action一样SpringMVC也需要一个xml文件。
如官方文档中的说明
With the above Servlet configuration in place, you will need to have a file called 翻译: 使用上面的Servlet配置,您需要 |
简单来说就是需要在WEB-INF/下面创建一个你在web.xml中配置的【servlet-name】-servlet.xml的文件,根据上面的web.xml所以本例的是SpringMvc-setvlet.xml
SpringMvc-setvlet.xml配置(官方文档中有例子)
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" 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"> <!-- 配置BeanNameUrlHandlerMapping --> <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/> <!-- 配置SimpleHandlerAdapter --> <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/> <!-- 配置渲染器 --> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> <!-- 前缀 --> <property name="prefix" value="/WEB-INF/jsp/"/> <!-- 后缀 --> <property name="suffix" value=".jsp"/> </bean> <!-- 关联自己写的hello Controller --> <bean name="/hello.html" class="com.controller.HelloController"/> </beans> |
注意“:试图渲染器中的前缀与后缀就是在执行controller后返回的ModelAndView的Name的前缀+后缀,本例中的步骤3里面的
mv.setViewName("hello"); 所以加上前缀与后缀后就是 /WEB-INF/jsp/hello.jsp |
所以我们在WEB-INF中创建以下路径
内容:<body> hello springMvc </body> |
到这里我们就可以发布测试了:
如果出现以下报错:
web项目运行报错:
java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/Config
参考https://blog.csdn.net/itbiggod/article/details/79397661
为了避免少包的问题以后我也要开始慢慢的习惯使用maven来学习了。