发表于: 2017-04-11 22:22:27

1 1371


 一、今天完成的事情:

 学习了一些基础概念的东西,没有进行实际操作:

 学习了Ioc控制反转的概念:

  前面就学习了Spring的一大特点就是解耦合,可是这个解耦合的真正过程是没有清楚的理解的。

   Ioc控制反转:

   原先所有的class之间都是存在的关联性的,可是关联性越强,它们之间的联系也就越强,当有一天其中的一个class失效了,就会影响到依赖它的class,会造成很多问题。所以人们考虑了很多之后,想要解决这个问题,控制反转的概念就被证实提现出来

 IOCInversion of Control的缩写,多数书籍翻译成控制反转,还有些书籍翻译成为控制反向或者控制倒置 
    1996年,Michael Mattson在一篇有关探讨面向对象框架的文章中,首先提出了IOC 这个概念。对于面向对象设计及编程的基本思想,前面我们已经讲了很多了,不再赘述,简单来说就是把复杂系统分解成相互合作的对象,这些对象类通过封装以后,内部实现对外部是透明的,从而降低了解决问题的复杂度,而且可以灵活地被重用和扩展。IOC理论提出的观点大体是这样的:借助于第三方实现具有依赖关系的对象之间的解耦,如下图:

IOC的别名:依赖注入(DI)

   2004年,Martin Fowler探讨了同一个问题,既然IOC是控制反转,那么到底是“哪些方面的控制被反转了呢?”,经过详细地分析和论证后,他得出了答案:“获得依赖对象的过程被反转了”。控制被反转之后,获得依赖对象的过程由自身管理变为了由IOC容器主动注入。于是,他给“控制反转”取了一个更合适的名字叫做“依赖注入(Dependency Injection)”。他的这个答案,实际上给出了实现IOC的方法:注入。所谓依赖注入,就是由IOC容器在运行期间,动态地将某种依赖关系注入到对象之中。

 

 

所以,依赖注入(DI)和控制反转(IOC)是从不同的角度的描述的同一件事情,就是指通过引入IOC容器,利用依赖关系注入的方式,实现对象之间的解耦。

  

 对象A依赖于对象B,当对象 A需要用到对象B的时候,IOC容器就会立即创建一个对象B送给对象A。IOC容器就是一个对象制造工厂,你需要什么,它会给你送去,你直接使用就行了,而再也不用去关心你所用的东西是如何制成的,也不用关心最后是怎么被销毁的,这一切全部由IOC容器包办。

在传统的实现中,由程序内部代码来控制组件之间的关系。我们经常使用new关键字来实现两个组件之间关系的组合,这种实现方式会造成组件之间耦合。IOC很好地解决了该问题,它将实现组件间关系从程序内部提到外部容器,也就是说由容器在运行期将组件间的某种依赖关系动态注入组件中。

 

 

html转换为jsp 的时候,会有一部分静态资源访问不到,这其中造成的原因很多,学习了spring mvc的静态资源的三种访问方式:

如何你的DispatcherServlet拦截 *.do这样的URL,就不存在访问不到静态资源的问题。如果你的DispatcherServlet拦截“/”,拦截了所有的请求,同时对*.js,*.jpg的访问也就被拦截了。

 目的:可以正常访问静态文件,不要找不到静态文件报404。
 
方案一:激活Tomcat的defaultServlet来处理静态文件

<servlet-mapping>

    <servlet-name>default</servlet-name>

    <url-pattern>*.jpg</url-pattern>

</servlet-mapping>

<servlet-mapping>

    <servlet-name>default</servlet-name>

    <url-pattern>*.js</url-pattern>

</servlet-mapping>

<servlet-mapping>

    <servlet-name>default</servlet-name>

    <url-pattern>*.css</url-pattern>

</servlet-mapping>  

要配置多个,每种文件配置一个   

要写在DispatcherServlet的前面, 让defaultServlet先拦截,这个就不会进入Spring了,我想性能是最好的吧。

Tomcat, Jetty, JBoss, and GlassFish  默认 Servlet的名字 -- "default"

Google App Engine 默认 Servlet的名字 -- "_ah_default"

Resin 默认 Servlet的名字 -- "resin-file"

WebLogic 默认 Servlet的名字  -- "FileServlet"

WebSphere  默认 Servlet的名字 -- "SimpleFileServlet"

方案二: spring3.0.4以后版本提供了mvc:resources 

<mvc:resources 的使用方法:

<!--对静态资源文件的访问-->

<mvc:resources mapping="/images/**" location="/images/" />

  /images /**映射到 ResourceHttpRequestHandler 进行处理,location指定静态资源的位置.可以是web application根目录下、jar包里面,这样可以把静态资源压缩到jar包中。cache-period可以使得静态资源进行web cache  

如果出现下面的错误,可能是没有配置 <mvc:annotation-driven /> 的原因。 
报错WARNING: No mapping found for HTTP request with URI [/mvc/user/findUser/lisi/770] in DispatcherServlet with name 'springMVC'

使用 <mvc:resources/> 元素,把 mapping 的 URI 注册到 SimpleUrlHandlerMapping的urlMap 中,
key 为 mapping 的 URI pattern值,而 value为 ResourceHttpRequestHandler,
这样就巧妙的把对静态资源的访问由 HandlerMapping 转到 ResourceHttpRequestHandler 处理并返回,所以就支持 classpath 目录, jar 包内静态资源的访问.
另外需要注意的一点是,不要对 SimpleUrlHandlerMapping 设置 defaultHandler. 因为对 static uri 的 defaultHandler 就是ResourceHttpRequestHandler,
否则无法处理static resources request.

方案三 ,使用<mvc:default-servlet-handler/>

本文原始链接:http://unmi.cc/spring-mvc-access-static-resources-jpgjscss, 来自:隔叶黄莺 Unmi Blog

<mvc:default-servlet-handler/>

会把 "/**" url,注册到 SimpleUrlHandlerMapping 的 urlMap 中,把对静态资源的访问由 HandlerMapping 转到 org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler 处理并返回.
DefaultServletHttpRequestHandler 使用就是各个 Servlet 容器自己的默认 Servlet.

http://lzy83925.iteye.com/blog/1186609

 

初步看了一些el表达式的东西,没有细看,这里就不写出来了

二:遇到的问题:无

三:明天计划做的事情:

写一个rest风格的java文件,用来实现官网的总人数的测试

学习el表达式

学习一点jsp的东西

学习jstl

四、收货:

今天学习了额很多基本知识,没有太多的进行实际代码的操作,今天看了一份面试题,很多的感念的东西都是迷迷糊糊的,我们也要多补一些概念的东西来增加自己的知识积累。加油吧。



返回列表 返回列表
评论

    分享到