SpringMVC与Struts2区别
对比项目
SrpingMVC
Struts2
优势
国内市场情况
有大量用户,一般新项目启动都会选用springmvc
有部分老用户,老项目组,由于习惯了,一直在使用。
国内情况,springmvc的使用率已经超过Struts2
框架入口
基于servlet
基于filter
本质上没太大优势之分,只是配置方式不一样
框架设计思想
控制器基于方法级别的拦截,处理器设计为单实例
控制器基于类级别的拦截, 处理器设计为多实例
由于设计本身原因,造成了Struts2,通常来讲只能设计为多实例模式,相比于springmvc设计为单实例模式,Struts2会消耗更多的服务器内存。
参数传递
参数通过方法入参传递
参数通过类的成员变量传递
Struts2通过成员变量传递参数,导致了参数线程不安全,有可能引发并发的问题。
与spring整合
与spring同一家公司,可以与spring无缝整合
需要整合包
Springmvc可以更轻松与spring整合
简单的使用srpingmvc的开发步骤创建工程
导入jar包
编写控制类
package com.angus.springmvc.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
//使用注解标识这是一个控制器
@Controller
public class HellowControll {
//注解用来绑定请求地址
@RequestMapping("hello")
public ModelAndView hello() {
System.out.println("hello springmvc...");
ModelAndView mav = new ModelAndView();
//设置模型数据,用于传递jsp
mav.addObject("msg", "hello springmvc...");
//设置视图名字,用于相应用户
mav.setViewName("/WEB-INF/jsp/hello.jsp");
return mav;
}
}
创建页面
创建和配置springmvc.xml核心(开启包扫描)
在web.xml中配置前端控制器
01-springmvc
index.html
index.htm
index.jsp
default.html
default.htm
default.jsp
springmvc
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:springmvc.xml
springmvc
*.action
springmvc代码的执行流程
① 客户端发送名为 hello.action 的请求
② 请求被 将带 .action 的请求拦截下来,交给名为springmvc的核心控制器来处理。
③核心控制器
④核心控制器加载一些参数
⑤加载springmvc的配置文件
⑥开启控制类的包扫描
⑦找到控制器类
⑧到控制器类里边去,找到带 @Controller的注解
⑨ @Controller 与 @RequestMapping 相对照
⑩ @RequestMappin和请求相对应
最后加载控制类,完成相应,将结果处理结果返回。
springmvc默认组件的加载处理器映射器
在spring的核心配置文件里边配置一个处理器映射器
还需要配置一个处理器适配器
映射器和适配器是成套使用的,如果一个用最新的,那么另外一个也需要用最新的。
显然,这么长的一个名字,我们不一定能能够记下来,那么该怎么办呢,还可以
接着我们为了方便在控制器里边对页面的访问更加简单,我们还可以配置 视图解析器


springmvc的核心组件是:处理器映射器,处理器适配器,视图解析器,还有前端控制器
整个流程就是,用户发送一个请求,到前端控制器,然后前端控制器,到处理器映射器上去找谁来处理,接着处理器映射器返回一个处理器执行连,然后到处理器适配器上去处理,处理器适配器执行handler,然后返回一个ModelAndView,然后再回到前端控制器,请求解析视图,返回view对象,渲染视图,最后相应用户。
springmvc简单的参数传递
@RequestParam
传递简单的参数,第一个用途是,当传的参数名不相同的时候;第二个用途,可以限制必须传递参数,第三个用途是,设置默认的传递参数。
传递pojo对象要点:通过点(.)传递属性。