springMVC是什么
来源:互联网 发布:阿姆斯特丹大学 知乎 编辑:程序博客网 时间:2024/06/13 21:25
Spring MVC框架是一个MVC框架,通过实现Model-View-Controller模式来很好地将数据、业务与展现进行分离。从这样一个角度来说,Spring MVC和Struts、Struts2非常类似。Spring MVC的设计是围绕DispatcherServlet展开的,DispatcherServlet负责将请求派发到特定的handler。通过可配置的handler mappings、view resolution、locale以及theme resolution来处理请求并且转到对应的视图。Spring MVC请求处理的整体流程如图:
spring和springMVC的关系
Spring MVC属于Spring FrameWork的后续产品,SpringMVC的整个配置都是基于IOC容器的,可以与Spring无缝结合。
springMVC(基于注解)
在Spring MVC中开始比较全面的支持注解,通过注解可以大大简化J2EE应用开发的配置、精简开发人员的工作量从而提高开发效率。 好处:
- Controller不需要继承任何AbstractController等Controller;
- 无需通过配置文件配置,大大简化了Spring MVC相关的配置;
- 细粒度处理各种request请求,针对最基础的统一请求的GET/POST方式进行不同处理,除此还还可以对拥有不同请求参数的同一request请求分别用不同的方法处理{灵活};
- 更加丰富的参数绑定机制,可以在Controller方法定义中,通过注解将某个或某些参数直接绑定到Controller方法的参数上,从而在方法体内,可以完全对HttpServletRequest视而不见,直接使用已经绑定好的参数。
DispatcherServlet是继承自HttpServlet的,既然SpringMVC是基于DispatcherServlet的,那么使用springMVC前,需要在web.xml中配置如下:
<servlet>
<description>spring mvc servlet</description>
<servlet-name>springMvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param><!-- 可以自定义配置文件路径和文件名 -->
<description>spring mvc 配置文件</description>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springMvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
使用mvc注解方式,需要了解一下<mvc:annotation-driven />标签意义:
<mvc:annotation-driven /> 是一种简写形式,完全可以手动配置替代这种简写形式,简写形式可以让初学都快速应用默认配置方案。<mvc:annotation-driven /> 会自动注册DefaultAnnotationHandlerMapping与AnnotationMethodHandlerAdapter 两个bean,是spring MVC为@Controllers分发请求所必须的。并提供了:数据绑定支持,@NumberFormatannotation支持,@DateTimeFormat支持,@Valid支持,读写XML的支持(JAXB),读写JSON的支持(Jackson)。
后面,我们处理响应ajax请求时,就使用到了对json的支持。写JUnit单元测试时,要从spring IOC容器中取DefaultAnnotationHandlerMapping与AnnotationMethodHandlerAdapter 两个bean,来完成测试,取的时候要知道是<mvc:annotation-driven />这一句注册的这两个bean。
Spring 2.5 中除了提供 @Component注解外,还定义了几个拥有特殊语义的注解,它们分别是:@Repository、@Service 和 @Controller。在目前的 Spring 版本中,这 3 个注解和 @Component 是等效的,但是从注释类的命名上,很容易看出这 3 个注解分别和持久层、业务层和控制层(Web 层)相对应。虽然目前这 3 个注解和 @Component 相比没有什么新意,但 Spring 将在后面的版本中为它们添加特殊的功能。所以,如果 Web 应用程序采用了经典的三层分层结构的话,最好在持久层、业务层和控制层分别采用 @Repository、@Service 和 @Controller 对分层中的类进行注释,而用 @Component 对那些比较中立的类进行注解。
Spring3.x中定义一个控制器类,必须以@Controller注解标记。当控制器类接收到一个请求时,它会在自己内部寻找一个合适的处理方法来处理请求。使用@RequestMapping注解将方法映射到一些请求上,以便让该方法处理那些请求。这种方法就像一般的类中的方法,方法名参数列表和返回值并不像Struts2之类的框架有很强的限制。方法参数列表具体以及返回值具体都有哪些,这里先不细说。
控制器在选择好适合处理请求的方法时,传入收到的请求(根据方法参数类型,可能以不同的类型传入),并且调用该方法中的逻辑来进行处理(也可以是调用Service来真正处理)。方法逻辑可能也会在参数中添加或者删除数据。处理方法处理完之后,会委派给一个视图,由该视图来处理方法的返回值。处理程序的返回值并不代表视图的具体实现,可以只是String类型,代表视图名,甚至是void(这时候SpringMVC可以根据方法名或者控制器名找默认视图)。也不需要担心返回值只是视图名称的话,视图拿不到要显示的数据,因为方法参数对于视图来说也是可以拿到的(使用model)。比如说,如果处理方法以Map为参数,那么这个Map对于视图也是可以拿到的,使用model的addAttribute方法。
返回的视图名称会返回给DispatcherServlet,它会根据一个视图解析器将视图名称解析为一个具体的视图实现。这里说到的视图解析器是一个实现了ViewResolver接口的Bean,它的任务就是返回一个视图的具体实现(jsp、ftl、pdf、html等等).
@Controller(value="studentLoginController")
@RequestMapping("/student/login")
public class StudentLoginController {
@Resource(name="studentLoginServiceImpl")
private StudentLoginService studentLoginService;
@RequestMapping("/chooseRole")
public String getStudentRole(Model model){
......
model.addAttribute("studentRoles", studentRoles);
return "student/login/choose_role";
}
@RequestMapping("/studentCheckSuccess")
@ResponseBody
public Map<String, Object> studentCheckSuccess(HttpServletRequest req,HttpServletResponse resp) {
......
return map;
}
}
SpringMVC实现RESTful请求
springmvc的resturl是通过@RequestMapping 及@PathVariable annotation提供的
一般请求:
@Controller
@RequestMapping("/aaa")//类级别,可以不需要,如果要了,下面所有的请求路径前都需要加入 /aaa
public class MyController{
@RequestMapping(value="/bbb", method=RequestMethod.GET)//方法级别,必须有,决定这个方法处理哪个请求,如果有类级别 /aaa/bbb?no=001&name=ylm,如果没有类级别的就直接请求/bbb?no=001&name=ylm
public String xxx(User user, Model model)
{
//直接操作user对象
model.addAttributes("user", user);
return "/index";
}
}
RESTful风格请求:
@Controller
@RequestMapping("/aaa")//类级别,可以不需要,如果要了,下面所有的请求路径前都需要加入 /aaa
public class MyController{
//方法级别,必须有,决定这个方法处理哪个请求,如果有类级别 /aaa/bbb/001/ylm,如果没有类级别的就直接请求/bbb/001/ylm
@RequestMapping(value="/bbb/{no}/{name}", method=RequestMethod.GET)
@ResponseBody
public User xxx(User user)
{
//直接操作user对象
return user;
}
}
0 0
- springMVC是什么
- SpringMVC是什么?
- SpringMVC是什么?
- SpringMVC框架是什么
- SpringMVC和Spring是什么关系?
- 不知道是什么问题,SpringMVC的问题
- spring springMvc spring-boot spring-cloud分别是什么
- 讲下SpringMvc的核心入口类是什么,Struts1,Struts2的分别是什么
- SpringMVC
- springmvc
- SpringMVC
- SpringMVC
- springMvc
- springMVC
- springmvc
- springMVC
- springMVC
- springmvc
- Ubuntu-14 sshd 快速安装、配置、使用
- spring是什么
- OC中有关的内存泄露
- hdu 3038(How Many Answers Are Wrong)+3047(Zjnu Stadium)(种类并查集)
- POJ 2528 线段树离散化
- springMVC是什么
- OTG – Android USB Hos
- 使用Charles抓取ios http请求
- 将项目部署到linux步骤小记
- 动态规划问题的一般解决方案
- ORA-01938: 必须为 CREATE USER 指定 IDENTIFIED BY
- Struts框架配置Action和JSP的交互 如何在Action里面获取作用域
- linux安装apache2.4.9
- UI基础-多线程