java+springmvc,springmvc帮你做了什么
大家好,今天来为大家解答java+springmvc这个问题的一些问题点,包括springmvc帮你做了什么也一样很多人还不知道,因此呢,今天就来为大家分析分析,现在让我们一起来看看吧!如果解决了您的问题,还望您关注下本站哦,谢谢~
Spring和SpringMVC的区别
spring是是一个开源框架,是为了解决企业应用程序开发,功能如下
◆目的:解决企业应用开发的复杂性
◆功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能
◆范围:任何Java应用
简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
◆轻量——从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。
◆控制反转——Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。
◆面向切面——Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务(transaction)管理)进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。
◆容器——Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean如何被创建——基于一个可配置原型(prototype),你的bean可以创建一个单独的实例或者每次需要时都生成一个新的实例——以及它们是如何相互关联的。然而,Spring不应该被混同于传统的重量级的EJB容器,它们经常是庞大与笨重的,难以使用。
◆框架——Spring可以将简单的组件配置、组合成为复杂的应用。在Spring中,应用对象被声明式地组合,典型地是在一个XML文件里。Spring也提供了很多基础功能(事务管理、持久化框架集成等等),将应用逻辑的开发留给了你。
所有Spring的这些特征使你能够编写更干净、更可管理、并且更易于测试的代码。它们也为Spring中的各种模块提供了基础支持。
Spring的两大核心AOP与IOC,可以单独用于任何应用,包括与Struts等MVC框架与Hibernate等ORM框架的集成,目前很多公司所谓的轻量级开发就是用 Spring+ Struts(2)+Hibernate。
Spring MVC就是一个MVC框架,个人觉得Spring MVC annotation式的开发比Struts2方便,可以直接代替上面的Struts(当然Struts的做为一个非常成熟的MVC,功能上感觉还是比Spring强一点,不过Spring MVC已经足够用了)。当然spring mvc的执行效率比struts高,是因为struts的值栈影响效率
spring mvc类似于struts的一个MVC开框架,其实都是属于spring,spring mvc需要有spring的架包作为支撑才能跑起来
如果有人问你什么事控制反转(spring的核心面试常问道):你就回答,本来程序是由我们new出来的嘛,后来交给程序控制进行new出来了嘛,这就是控制反转嘛,打了那么多手都麻了,看在我那么辛苦的份上给分吧
Spring和SpringMVC的区别是什么
Spring与SpringMVC的区别
1、Spring是是一个开源框架,是为了解决企业应用程序开发,简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。Spring可以将简单的组件配置、组合成为复杂的应用。在Spring中,应用对象被声明式地组合,典型地是在一个XML文件里。
Spring也提供了很多基础功能(事务管理、持久化框架集成等等,将应用逻辑的开发留给了你。Spring使你能够编写更干净、更可管理、并且更易于测试的代码。
它们也为Spring中的各种模块提供了基础支持。Spring的两大核心AOP与IOC,可以单独用于任何应用,包括与Struts等MVC框架与Hibernate等ORM框架的集成,目前很多公司所谓的轻量级开发就是用 Spring+ Struts(2)+Hibernate。
2、Spring MVC就是一个MVC框架,Spring MVC annotation式的开发比Struts2方便,可以直接代替上面的Struts(当然Struts的做为一个非常成熟的MVC,功能上感觉还是比Spring强一点,不过Spring MVC已经足够用了)。
spring mvc的执行效率比struts高,是因为struts的值栈影响效率Spring MVC类似于struts的一个MVC开框架,其实都是属于Spring,Spring MVC需要有Spring的架包作为支撑才能跑起来。
3、Spring是IOC和AOP的容器框架,SpringMVC是基于Spring功能之上添加的Web框架,想用SpringMVC必须先依赖Spring。可以将SpringMVC类比于Struts。
Spring是IOC和AOP的容器框架,SpringMVC是基于Spring功能之上添加的Web框架,想用SpringMVC必须先依赖Spring。
Spring可以说是一个管理bean的容器,也可以说是包括很多开源项目的总称,spring mvc是其中一个开源项目,所以简单走个流程的话,http请求一到,由容器(如:tomact)解析http搞成一个request,通过映射关系(路径,方法,参数啊)被spring mvc一个分发器去找到可以处理这个请求的bean,那tomcat里面就由spring管理bean的一个池子(bean容器)里面找到,处理完了就把响应返回回去。
SpringMVC是一个MVC模式的WEB开发框架;
Spring是一个通用解决方案,最大的用处就是通过Ioc/AOP解耦,降低软件复杂性,所以Spring可以结合SpringMVC等很多其他解决方案一起使用,不仅仅只适用于WEB开发
SSH:
SSH为 struts+spring+hibernate的一个集成框架,是目前较流行的一种JAVA Web应用程序开源框架。
如何深入 spring mvc
SpringMVC是一个轻量级的MVC框架,SpringMVC由于其轻量级的实现以及与Spring框架的无缝整合等诸多优势,近年来在MVC框架中脱颖而出,受到诸多开发人员的青睐,学习SpringMVC势在必行。
Web环境中使用SpringMVC:SpringMVC提供了可插拔式的框架嵌入形式,将SpirngMVC插入或者从Web项目中卸载只需要简单的修改配置文件即可。
配置前端控制器,SpringMVC的入口程序为一个全局的Servlet,该Servlet拦截指定的一组请求交给SpringMVC框架执行后续的处理操作,在Web.xml中配置如下字段。
[java]view plaincopy
<!--SpingMVC的前端控制器-->
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--配置SpringMVC的IOC容器-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/root-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!--配置拦截所有的请求-->
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping></span></span>
创建SpringMVC IOC容器的配置文件root-context.xml并定义视图解析器,位置/WEB-INF/
[java]view plaincopy
<!--配置自动扫面的包-->
<context:component-scanbase-package="cn.com.xiaofen"/>
<!--定义视图解析器-->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<propertyname="prefix"value="/WEB-INF/view/"></property>
<propertyname="suffix"value=".jsp"></property>
</bean>
<!--<mvc:default-servlet-handler/><mvc:annotation-driven/>--></span></span>
定义控制器,SpringMVC中定义方法来响应客户端请求,内存开销更小效率更高。
[java]view plaincopy
@Controller
@RequestMapping("/T")
publicclassT{
@RequestMapping("/t_1")
publicStringt_1(){
System.out.println("t_1");
return"index";
}
}
定义视图,根据实际的视图解析器完成相关视图的配置,当前配置视图应该在/WEB-INF/view/下且文件类型为JSP文件,具体的应该在该目录下新建一个名称为index的jsp文件名称。
SpringMVC处理请求的工作流:DispatcherServlet作为SpringMVC框架的入口程序,负责调度SpringMVC框架响应用户的请求,如下图为宏观上SpingMVC处理一次请求大概需要经过以下调度过程。
请求进入由前端控制器(DispatcherServlet)拦截。
前端控制器分析请求将请求委托至具体的控制器来处理。
控制器处理请求返回逻辑视图(Model)。
前端控制器得到逻辑视图对象,调度视图解析器,解析视图模版给用户响应。
返回前端控制器。
SpringMVC请求流程(部分源码分析):由DispatcherServlet的doService()方法入手,篇幅关系,下文仅列出核心的代码,下文的代码并并保证时间上的顺序性。
DispatcherServlet调用doDispatch处理请求。
[java]view plaincopy
try{
/*逻辑视图及上文提到的Model*/
ModelAndViewmv=null;
ExceptiondispatchException=null;
try{
/*文件上传预处理*/
processedRequest=checkMultipart(request);
multipartRequestParsed=(processedRequest!=request);
/*确定当前请求的处理者*/
mappedHandler=getHandler(processedRequest);
/*请求资源未发现*/
if(mappedHandler==null||mappedHandler.getHandler()==null){
noHandlerFound(processedRequest,response);
return;
}
/*确定当前请求的处理者适配器*/
HandlerAdapterha=getHandlerAdapter(mappedHandler.getHandler());
//...............
/*请求调度前应用的拦截器*/
if(!mappedHandler.applyPreHandle(processedRequest,response)){
return;
}
/*调用处理程序*/
mv=ha.handle(processedRequest,response,mappedHandler.getHandler());
//......
/*请求调度后应用的拦截器*/
mappedHandler.applyPostHandle(processedRequest,response,mv);
}
catch(Exceptionex){
dispatchException=ex;
}
/*解析视图给用户响应*/
processDispatchResult(processedRequest,response,mappedHandler,mv,dispatchException);
}
理解HandlerMapper,一个HandlerMapper代表一个请求到到处理对象的映射,该对象的创建依据是请求响应关系。getHandler方法部分源码分析如下。
[java]view plaincopy
protectedHandlerExecutionChaingetHandler(HttpServletRequestrequest)throwsException{
遍历查找满足条件的HandlerMapping
for(HandlerMappinghm:this.handlerMappings){
if(logger.isTraceEnabled()){
logger.trace(
"Testinghandlermap["+hm+"]inDispatcherServletwithname'"+getServletName()+"'");
}
HandlerExecutionChainhandler=hm.getHandler(request);
if(handler!=null){
存在
returnhandler;
}
}
不存在
returnnull;
}
理解HandlerAapter,SpringMVC中通过HandlerAdapter的handler方法来调用实际的处理请求的函数。getHandlerAapter部分源码如下。
[java]view plaincopy
protectedHandlerAdaptergetHandlerAdapter(Objecthandler)throwsServletException{
for(HandlerAdapterha:this.handlerAdapters){
if(logger.isTraceEnabled()){
logger.trace("Testinghandleradapter["+ha+"]");
}
是否支持处理当前的HandlerMapper
if(ha.supports(handler)){
returnha;
}
}
当前的HandlerMapper不能被处理报异常
thrownewServletException("Noadapterforhandler["+handler+
"]:TheDispatcherServletconfigurationneedstoincludeaHandlerAdapterthatsupportsthishandler");
}
Model到视图,SpringMVC中ModelAndView保存了逻辑视图与真实视图的关系,确定了当前请求为用户返回的View,processDispatchResult源码分析如下。
[java]view plaincopy
privatevoidprocessDispatchResult(HttpServletRequestrequest,HttpServletResponseresponse,
HandlerExecutionChainmappedHandler,ModelAndViewmv,Exceptionexception)throwsException{
booleanerrorView=false;
/*处理异常信息*/
if(exception!=null){
if(exceptioninstanceofModelAndViewDefiningException){
logger.debug("ModelAndViewDefiningExceptionencountered",exception);
mv=((ModelAndViewDefiningException)exception).getModelAndView();
}
else{
Objecthandler=(mappedHandler!=null?mappedHandler.getHandler():null);
mv=processHandlerException(request,response,handler,exception);
errorView=(mv!=null);
}
}
/*渲染视图,返回响应*/
if(mv!=null&&!mv.wasCleared()){
render(mv,request,response);
if(errorView){
WebUtils.clearErrorRequestAttributes(request);
}
}
else{
if(logger.isDebugEnabled()){
logger.debug("NullModelAndViewreturnedtoDispatcherServletwithname'"+getServletName()+
"':assumingHandlerAdaptercompletedrequesthandling");
}
}
}
好了,关于java+springmvc和springmvc帮你做了什么的问题到这里结束啦,希望可以解决您的问题哈!