1.MVC(Model-View-Controller)

用慕课网上的一个图来看看MVC

Front Controller(前端控制器):把客户的请求分发给不同的控制器去生成业务数据,将生成的业务数据分发给恰当的视图模板生成我们最终的图形界面

Controller(控制层):实现业务数据的抽取,Controller-->Service-->dao-->ORM-->数据持久化

Model(模型层):我认为像是一个中间件,如果需要数据持久化的时候,model将会成为PO(persistant object),和dao层进行数据持久化;如果需要给View层展示的话,model将会成为VO(value object),不一定和数据库中的表对应,将View需要的数据封装传过去;有时候一个VO可能满足不了View层的需求,所以BO(business objec)就出来了;最后就是Pojo了,VO和PO应该都属于它。java的几种对象(PO,VO,DAO,BO,POJO)解释

View(视图层):显示呗

2.SpringMVC

a.DispatcherServlet

SpringMVC很好的体现了MVC的核心风格:业务数据抽取同业务数据呈现相分离,只不过DispatcherServlet成了我们(1)中提出的前端控制器。DispatcherServlet拦截了我们的请求,将请求分发给不同的Controller,但他是怎么知道不同的Controller的呢?所以有一个东西出现了

b.HandlerAdapter

HandlerAdapter是一个接口,有5个实现类,我们在springMVC中大多数用的是@Controller,所以我们看看它的实现类SimpleControllerHandlerAdapter,在Dispatcher中我们看一下这个:

  1. /**
  2. * Initialize the HandlerAdapters used by this class.
  3. * <p>If no HandlerAdapter beans are defined in the BeanFactory for this namespace,
  4. * we default to SimpleControllerHandlerAdapter.(如果工厂中没有这个handlerAdapter这个命名空间的话,我们就默认使用SimpleControllerHandlerAdapter)
  5. */
  6. private void initHandlerAdapters(ApplicationContext context) {
  7. this.handlerAdapters = null;
  8.  
  9. if (this.detectAllHandlerAdapters) {
  10. // Find all HandlerAdapters in the ApplicationContext, including ancestor contexts.
  11. Map<String, HandlerAdapter> matchingBeans =
  12. BeanFactoryUtils.beansOfTypeIncludingAncestors(context, HandlerAdapter.class, true, false);
  13. if (!matchingBeans.isEmpty()) {
  14. this.handlerAdapters = new ArrayList<HandlerAdapter>(matchingBeans.values());
  15. // We keep HandlerAdapters in sorted order.
  16. OrderComparator.sort(this.handlerAdapters);
  17. }
  18. }
  19. else {
  20. try {
  21. HandlerAdapter ha = context.getBean(HANDLER_ADAPTER_BEAN_NAME, HandlerAdapter.class);
  22. this.handlerAdapters = Collections.singletonList(ha);
  23. }
  24. catch (NoSuchBeanDefinitionException ex) {
  25. // Ignore, we'll add a default HandlerAdapter later.
  26. }
  27. }
  28.  
  29. // Ensure we have at least some HandlerAdapters, by registering
  30. // default HandlerAdapters if no other adapters are found.
  31. if (this.handlerAdapters == null) {
  32. this.handlerAdapters = getDefaultStrategies(context, HandlerAdapter.class);
  33. if (logger.isDebugEnabled()) {
  34. logger.debug("No HandlerAdapters found in servlet '" + getServletName() + "': using default");
  35. }
  36. }
  37. }

就这样知道了我们写的Controller,本人小白,理解有误,请大神指点!

c.HandlerInterceptor

接口,在调用Controller之前或者之后干点什么,类似AOP的思想。

d.HandlerMapping

既然用HandlerAdapter知道了那个对应的那个Controller,这个HandlerMapping就是分发请求的啦

e.HandlerExecutionChain

这个就是controller处理完与HandlerInterceptor生成handler传给DispatcherServlet

f.ModeAndView

Model的具体表现,我们在controller中使用map或者model,这个东西的作用就是将所有的东西转换成modelandview

g.ViewResolver

视图解析器,决定要用那个对象,如jstl,json

来,我们上个图理解一下:

总结一下:当请求传到DispatcherServlet上的时候,由HandlerMapping分发请求到Controller,Controller处理完相应的操作,如业务逻辑,数据的持久化啊等等,然后和HandlerInterceptor把结果生成ModelandView返还给DispatcherServlet,然后DispatcherServlet决定用那个Resolver来解析数据,如jstl,xml,json啊等等,最后让view层显示就行了。

3.SpringMVC中的过程具体实操

a.先看看demo结构

b.上码

a.web.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- 如果为2.4版本的,就会默认支持EL -->
  3. <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
  6. http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  7. <display-name>Archetype Created Web Application</display-name>
  8.  
  9. <!-- Spring的应用上下文,理解层次化的ApplicationContext -->
  10. <!-- 定时任务都建议放在全局监听的<context-param>中,而不建议放在<servlet>的<init-param>中. -->
  11. <context-param>
  12. <param-name>contextConfigLocation</param-name>
  13. <param-value>/WEB-INF/configs/spring/applicationContext*.xml</param-value>
  14. </context-param>
  15.  
  16. <listener>
  17. <listener-class>
  18. org.springframework.web.context.ContextLoaderListener
  19. </listener-class>
  20. </listener>
  21.  
  22. <!-- DispatcherServlet,Spring MVC的核心 -->
  23. <servlet>
  24. <servlet-name>mvc-dispatcher</servlet-name>
  25. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  26. <!-- DispatcherServlet对应的上下文配置,如果不配置下面的<init-param>,默认为/WEB-INF/${servlet-name}-servlet.xml -->
  27. <init-param>
  28. <!-- contextConfigLocation为固定的写法 -->
  29. <param-name>contextConfigLocation</param-name>
  30. <param-value>/WEB-INF/configs/spring/mvc-dispatcher-servlet.xml</param-value>
  31.  
  32. </init-param>
  33. <!-- 1)load-on-startup元素标记容器是否在启动的时候就加载这个servlet(实例化并调用其init()方法)。
  34. 2)它的值必须是一个整数,表示servlet应该被载入的顺序
  35. 2)当值为0或者大于0时,表示容器在应用启动时就加载并初始化这个servlet;
  36. 3)当值小于0或者没有指定时,则表示容器在该servlet被选择时才会去加载。
  37. 4)正数的值越小,该servlet的优先级越高,应用启动时就越先加载。
  38. 5)当值相同时,容器就会自己选择顺序来加载。 -->
  39. <load-on-startup>1</load-on-startup>
  40. </servlet>
  41.  
  42. <servlet-mapping>
  43. <servlet-name>mvc-dispatcher</servlet-name>
  44. <!-- 表示拦截所有请求 -->
  45. <url-pattern>/</url-pattern>
  46. </servlet-mapping>
  47.  
  48. </web-app>

b.mvc-dispatcher-servlet.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:aop="http://www.springframework.org/schema/aop"
  6. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
  7. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
  8. http://www.springframework.org/schema/mvc
  9. http://www.springframework.org/schema/mvc/spring-mvc.xsd">
  10.  
  11. <!-- 本配置文件是工名为mvc-dispatcher的DispatcherServlet使用,提供与其相关的Spring MVC的配置 -->
  12.  
  13. <!--标签支持,生命周期的管理 ,激活了我们spring关于annotation的DI,当自动扫描启动后,该配置可以去掉-->
  14. <context:annotation-config />
  15.  
  16. <!-- 自动扫描,只搜索@Controller标注的类,不搜索其他标注的类 -->
  17. <context:component-scan base-package="com.huhu.spring">
  18. <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
  19. </context:component-scan>
  20.  
  21. <!--HandlerMapping,会自动注册DefaultAnnotationHandlerMapping与AnnotationMethodHandlerAdapter两个bean,
  22. 是spring MVC为@Controllers分发请求所必须的,无需配置,spring MVC可以默认启动
  23. RequestMappingHandlerMapping 处理@RequestMapping注解的
  24. RequestMappingHandlerAdapter 处理@Controller注解的控制器类-->
  25. <!-- 扩充了注解驱动,可以将请求参数绑定到控制器参数 (也就是说,URL查询参数的某一个变量可以直接映射到@Controller的某个方法的输入参数)-->
  26. <mvc:annotation-driven />
  27.  
  28. <!-- 静态资源处理,css,js,images -->
  29. <!--
  30. <mvc:resources mapping="/resources/**" location="/resources/"/>
  31. -->
  32.  
  33. <!--配置ViewResolver,可以使用多个ViewResolver,使用order排序,但是InternalResourceViewResolver放在最后-->
  34. <!-- ViewResolver用那个viewresolver来获取bean -->
  35. <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  36. <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
  37. <property name="prefix" value="/WEB-INF/jsps/"></property>
  38. <property name="suffix" value=".jsp"></property>
  39. </bean>
  40.  
  41. <!-- 文件上传 -->
  42. <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
  43. <property name="maxUploadSize" value="10485760"/> <!-- 10m -->
  44. <property name="maxInMemorySize" value="4096" />
  45. <property name="defaultEncoding" value="UTF-8"></property>
  46. </bean>
  47.  
  48. <!-- viewResolver -->
  49. <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
  50. <property name="mediaTypes">
  51. <map>
  52. <entry key="html" value="text/html"/>
  53. <entry key="xml" value="application/xml"/>
  54. <entry key="json" value="application/json"/>
  55. </map>
  56. </property>
  57. <!-- ViewResolver 负责怎么去解析, 而View只代表一种 视图层的技术 -->
  58. <!--<property name="viewResolvers"> <list> </list> </property>-->
  59. <property name="defaultViews">
  60. <list>
  61. <bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView"/>
  62. </list>
  63. </property>
  64. </bean>
  65.  
  66. </beans>

c.applicationContext.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
  3. xmlns:tx="http://www.springframework.org/schema/tx" xmlns:p="http://www.springframework.org/schema/p" xmlns:util="http://www.springframework.org/schema/util" xmlns:jdbc="http://www.springframework.org/schema/jdbc"
  4. xmlns:cache="http://www.springframework.org/schema/cache"
  5. xsi:schemaLocation="
  6. http://www.springframework.org/schema/context
  7. http://www.springframework.org/schema/context/spring-context.xsd
  8. http://www.springframework.org/schema/beans
  9. http://www.springframework.org/schema/beans/spring-beans.xsd
  10. http://www.springframework.org/schema/mvc
  11. http://www.springframework.org/schema/mvc/spring-mvc.xsd" default-autowire="byName">
  12.  
  13. <!--
  14. 自动扫描web包 ,将带有注解的类 纳入spring容器管理
  15. 默认执行<context:annotation-config />
  16. -->
  17. <context:component-scan base-package="com.huhu" >
  18. <!-- 不把@Controller纳入到spring容器中 -->
  19. <context:exclude-filter type="annotation"
  20. expression="org.springframework.stereotype.Controller"/>
  21. </context:component-scan>
  22.  
  23. </beans>

具体的xml语句的含义在文件注释中已经标注,我想谈谈xml语句的运行流程:

web.xml的运行流程(context-param >> listener  >> fileter  >> servlet):

  1. 在启动Web项目时,容器(比如Tomcat)会读web.xml配置文件中的两个节点<listener>和<contex-param>。
  2. 接着容器会创建一个ServletContext(上下文),应用范围内即整个WEB项目都能使用这个上下文。
  3. 接着容器会将读取到<context-param>转化为键值对,并交给ServletContext。
  4. 容器创建<listener></listener>中的类实例,即创建监听(备注:listener定义的类可以是自定义的类但必须需要继承ServletContextListener)。
  5. 在监听的类中会有一个contextInitialized(ServletContextEvent event)初始化方法,在这个方法中可以通event.getServletContext().getInitParameter("contextConfigLocation"来得到context-param 设定的值。在这个类中还必须有一个contextDestroyed(ServletContextEvent event) 销毁方法.用于关闭应用前释放资源,比如说数据库连接的关闭。
  6. 得到这个context-param的值之后,你就可以做一些操作了.注意,这个时候你的WEB项目还没有完全启动完成.这个动作会比所有的Servlet都要早

web.xml中的bean加载(ContextLoaderListener,ContextLoaderServlet,servlet.DispatcherServlet):

  1. ContextLoaderListener 和 ContextLoaderServlet : 本质上是等同的,都是调用ContextLoader来加载web程序的上下文,加载完成以后,都是在ServletContext中,只不过listener需要Servlet2.3及以上支持。
  2. ContextLoaderListene与DispatcherServlet : 用DispatcherServlet载入的Bean是隶属于此Servlet的(所以spring可以配置多个分别拥有各自环境的DispatcherServlet),因此其他servlet无法获取到该Context。

d.TestController.java

  1. @Controller
  2. @RequestMapping("/test")
  3. public class TestController {
  4.  
  5. private static Logger logger =LoggerFactory.getLogger(TestController.class);
  6. @Autowired
  7. private TestService testService;
  8.  
  9. @RequestMapping("/{s}")
  10. @ResponseBody
  11. public String test(@PathVariable("s") String s) {
  12. logger.info(s);
  13. String str1 = testService.test(s);
  14. return str1;
  15. }
  16.  
  17. //用于文件上传,需要在pom.xml中添加依赖commons-fileupload
  18.  
  19. @RequestMapping("/upload")
  20. public String upLoad(@RequestParam("file") MultipartFile file) throws IOException {
  21. if(!file.isEmpty()) {
  22. FileUtils.copyInputStreamToFile(file.getInputStream(), new File("D:\\demo\\image",System.currentTimeMillis()+".jpg"));
  23. }
  24. return "success";
  25.  
  26. }
  27.  
  28. //json测试,需要在pom.xml中添加依赖jackson-databind
  29. @RequestMapping(value="/json/{id}",method=RequestMethod.GET)
  30. @ResponseBody
  31. public Map<String,String> json(@PathVariable("id") String id ) {
  32.  
  33. Map<String, String> map=testService.jsonTest();
  34.  
  35. return map;
  36.  
  37. }
  38.  
  39. }

e.TestService.java

  1. public interface TestService {
  2. public String test(String s);
  3. Map<String, String> jsonTest();
  4. }

f.TestServiceImpl.java

  1. @Service("testService")
  2. public class TestServiceImpl implements TestService{
  3.  
  4. public String test(String s) {
  5.  
  6. return "hello"+s;
  7. }
  8.  
  9. public Map<String, String> jsonTest(){
  10. Map<String, String> map=new HashMap();
  11. map.put("id", "1");
  12. map.put("name", "huhu");
  13. map.put("age", "23");
  14. return map;
  15. }
  16.  
  17. }

g.pom.xml

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  3. <modelVersion>4.0.0</modelVersion>
  4. <groupId>huhu</groupId>
  5. <artifactId>test</artifactId>
  6. <version>1.0-SNAPSHOT</version>
  7. <name>test Maven Webapp</name>
  8. <url>http://maven.apache.org</url>
  9.  
  10. <!-- 变量,来替代一些工程版本 -->
  11. <properties>
  12. <commons-lang.version>2.6</commons-lang.version>
  13. <slf4j.version>1.7.6</slf4j.version>
  14. <spring.version>4.1.3.RELEASE</spring.version>
  15. </properties>
  16.  
  17. <!-- 统一管理jar包的版本 -->
  18. <dependencyManagement>
  19. <dependencies>
  20. <dependency>
  21. <groupId>org.springframework</groupId>
  22. <artifactId>spring-framework-bom</artifactId>
  23. <version>${spring.version}</version>
  24. <type>pom</type>
  25. <scope>import</scope>
  26. </dependency>
  27. </dependencies>
  28. </dependencyManagement>
  29.  
  30. <dependencies>
  31. <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
  32. <dependency>
  33. <groupId>org.slf4j</groupId>
  34. <artifactId>slf4j-api</artifactId>
  35. <version>${slf4j.version}</version>
  36. </dependency>
  37.  
  38. <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
  39. <dependency>
  40. <groupId>org.springframework</groupId>
  41. <artifactId>spring-webmvc</artifactId>
  42. </dependency>
  43.  
  44. <dependency>
  45. <groupId>commons-lang</groupId>
  46. <artifactId>commons-lang</artifactId>
  47. <version>${commons-lang.version}</version>
  48. </dependency>
  49.  
  50. <dependency>
  51. <groupId>javax.servlet</groupId>
  52. <artifactId>jstl</artifactId>
  53. <version>1.2</version>
  54. <scope>runtime</scope>
  55. </dependency>
  56.  
  57. <!-- 文件上传需要依赖的包-->
  58. <dependency>
  59. <groupId>commons-fileupload</groupId>
  60. <artifactId>commons-fileupload</artifactId>
  61. <version>1.3.1</version>
  62. </dependency>
  63.  
  64. <!-- viewResolver中所需要的json -->
  65. <dependency>
  66. <groupId>com.fasterxml.jackson.core</groupId>
  67. <artifactId>jackson-databind</artifactId>
  68. <version>2.8.5</version>
  69. </dependency>
  70.  
  71. </dependencies>
  72.  
  73. <!-- 运行项目的插件 如mvn jetty:run -->
  74. <build>
  75. <!-- https://mvnrepository.com/artifact/org.eclipse.jetty/jetty-maven-plugin -->
  76. <plugins>
  77. <plugin>
  78. <groupId>org.eclipse.jetty</groupId>
  79. <artifactId>jetty-maven-plugin</artifactId>
  80. <version>9.2.2.v20140723</version>
  81. </plugin>
  82. </plugins>
  83. </build>
  84.  
  85. </project>

文件都上传了,练练手吧!

4.SpringMVC中的数据绑定

a.什么是数据绑定?
将界面用户所填的属性和程序内部设定的类型绑定
b.基本类型和包装类型
1.基本类型
key是必须传的,只能是int类型
2.包装类型
可以不传key,可以通过注解@RequestParam()可以指定默认值
@RequestParam():
value() 对传入参数指定名称例如ecif
required() @RequestParam配置的传入参数是否一定要传
required=false表示可以不传,默认给参数赋值为null注意(参数为基本的数据类型int时不能使用 因为null不能赋值给int )
required=true 就是必须要有传入参数,不传会报400参数错误
value与required配合使用如没有配置任何信息为默认值 必须输入对应参数名
3.数组
页面可以传相同属性的多个值,如name=qw&name=er
c.简单对象,多层级对象,同属性对象
简单对象绑定:地址栏传对象的属性就好了
多层级对象(对象中含有一个属性是另外一种对象)绑定:只需要地址栏中输入对象的属性.属性就可以了
同属性对象(拥有相同属性的对象,地址栏该怎么输入呢):使用@InitBinder("")
函数体为:
@InitBinder("user")
public void initUser(WebDataBinder binder){
binder.setFieldDefaultPrefix("user.");
}
ps:如果没有使用@InitBinder(""),那么同属性对象该怎么赋值呢

d.list,set,map的数据绑定
1.list
可以通过索引下标进行绑定,地址栏直接写对象的属性,如users[0].name=qw&users[1].name=er
如果前台请求,users[0].name=qw&users[20].name=er的时候,中间会出现一些空的对象,浪费资源空间,所以当我们请求的时候注意索引下标
2.set
ps:set需要在运行的时候进行初始化,主要作用是在实际运用中进行对象的重复判断,以及排除重复
直接请求会出现500错误,说set of size 0,创建对象的时候给他申请空间
set需要重写equals()和hashcode()方法,无序,不重复,hashcode是唯一的,但是不符合实际,所以重写object的hashcode()方法,重写的话会出现相同属性的对象产生相同的hashcode(),所以还要通过equals()方法来判断是否是同一个对象。
3.map
通过键值对来存储值
场景:一个班级,不需要重名的
URL请求:map.do?users['X'].name=qw&users['X'].age=23

------------------------------------------------------------------------------------------------补充-----------------------------------------------------------------------------

1.是谁关联了****Mapper.xml和****.java的?

当然是通过xml关联的,下面放一个mybatis.xml的配置文件。

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
  3. <configuration>
  4. <!-- 读入properties配置文件 -->
  5. <properties resource="init.properties">
  6.  
  7. </properties>
  8. <!-- 对象别名 -->
  9. <typeAliases>
  10. <typeAlias type="com.huhu.pojo.Person" alias="Person"/>
  11. </typeAliases>
  12. <!-- 数据源配置 -->
  13. <environments default="development">
  14. <environment id="development">
  15. <!-- 事务类型 -->
  16. <transactionManager type="JDBC"/>
  17. <!-- 数据源 -->
  18. <dataSource type="POOLED">
  19. <property name="driver" value="${jdbc.driver}"/>
  20. <property name="url" value="${jdbc.url}"/>
  21. <property name="username" value="${jdbc.username}"/>
  22. <property name="password" value="${jdbc.password}"/>
  23. </dataSource>
  24. </environment>
  25. </environments>
  26. <!-- 注册xml文件 -->
  27. <mappers>
  28. <!-- 注册PersonMapper.xml文件,PersonMapper.xml位于com.huhu.dao.mapper这个包下,
  29. 所以resource写成com/huhu/dao/mapper/PersonMapper.xml-->
  30. <mapper resource="com/huhu/dao/mapper/PersonMapper.xml"/>
  31. <!-- 将map下的*.java和*.xml都注册到SqlSession实例中 -->
  32. <package name="com.huhu.dao.PersonMapper"/>
  33. </mappers>
  34. </configuration>

2.那是谁注入了mybatis.xml呢?

web.xml中注入的

  1. <context-param>
  2. <param-name>contextConfigLocation</param-name>
  3. <param-value>
  4. classpath:spring/applicationContext.xml,
  5. classpath:mybatis/mybatis.xml
  6. </param-value>
  7. </context-param>

真正的加载顺序为:context-param -> listener -> filter -> servlet

参考资料:

慕课网-Spring MVC起步

pring3.0中返回Json

spring web.xml 难点配置总结【转】

解析mediaTypes+viewResolvers+viewResolvers

谢谢大家的阅读,博客不易,请转载注明地址:http://www.cnblogs.com/huhu1203/p/7633060.html

SpringMVC的一点理解的更多相关文章

  1. opencv笔记5:频域和空域的一点理解

    time:2015年10月06日 星期二 12时14分51秒 # opencv笔记5:频域和空域的一点理解 空间域和频率域 傅立叶变换是f(t)乘以正弦项的展开,正弦项的频率由u(其实是miu)的值决 ...

  2. 对socket的一点理解笔记

    需要学web service,但是在视频中讲解到了socket套接字编程.以前貌似课上老师有提过,只是没用到也感觉乏味.现在遇到,自己看了些博客和资料.记录一点理解,不知正确与否. 首先说这个名字,叫 ...

  3. iOS 的一点理解(一) 代理delegate

    做了一年的iOS,想记录自己对知识点的一点理解. 第一篇,想记录一下iOS中delegate(委托,也有人称作代理)的理解吧. 故名思议,delegate就是代理的含义, 一件事情自己不方便做,然后交 ...

  4. 关于web开发的一点理解

    对于web开发上的一点理解 1 宏观上的一点理解 网页从请求第地址 到获得页面的过程:从客户端(浏览器)通过地址 从soket把请求报文封装发往服务端   服务端通过解析报文并处理报文最后把处理的结果 ...

  5. angular.js的一点理解

    对angular.js的一点理解 2015-01-14 13:18 by MrGeorgeZhao, 317 阅读, 4 评论, 收藏, 编辑 最近一直在学习angular.js.不得不说和jquer ...

  6. RxSwift 入坑好多天 - 终于有了一点理解

    一.前言 江湖上都在说现在就要赶紧学 swift 了,即将是 swift 的天下了.在 api 变化不大的情况下,swift 作为一门新的语言,集众家之所长,普通编码确实比 oc 要好用的多了 老早就 ...

  7. rt-thread中动态内存分配之小内存管理模块方法的一点理解

    @2019-01-18 [小记] rt-thread中动态内存分配之小内存管理模块方法的一点理解 > 内存初始化后的布局示意 lfree指向内存空闲区首地址 /** * @ingroup Sys ...

  8. rt-thread中软件定时器组件超时界限的一点理解

    @2019-01-15 [小记] 对 rt-thread 中的软件定时器组件中超时界限的一点理解 rt_thread_timer_entry(void *parameter)函数中if ((next_ ...

  9. mycat的schema.xml的个人的一点理解

    官方文档里讲的详细的部分的我就不再赘述了,我只是谈谈我自己的理解 刚开始接触mycat,最重要的几个配置文件有server.xml,schema.xml,还有个rule.xml配置文件 具体都是干啥用 ...

随机推荐

  1. mysql存储过程 基本语法

    话不多说 一.MySQL 创建存储过程 "pr_add" 是个简单的 MySQL 存储过程,这个存储过程有两个 int 类型的输入参数 "a"."b& ...

  2. chrome保持元素hover,active状态

    审查元素,选中需要hover的标签 点击"Styles"菜单中的":hov",弹出 Force element state 选中相应的 :hover :acti ...

  3. Java异常的性能分析

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt276 在Java中抛异常的性能是非常差的.通常来说,抛一个异常大概会消耗10 ...

  4. 第4阶段——制作根文件系统之分析init进程(2)

    本节目标: (1) 了解busybox(init进程和命令都放在busybox中) (2) 创建SI工程,分析busybox源码来知道init进程做了哪些事情 (3)  分析busybox中init进 ...

  5. angularjs-1.3代码学习-$parse

    这次我们来看一下angular的Sandboxing Angular Expressions.关于内置方法的,核心有两块:Lexer和Parser.其中大家对$parse可能更了解一点.好了不多废话, ...

  6. Java 定时器 Timer 的使用.

    一.概念       定时计划任务功能在Java中主要使用的就是Timer对象,它在内部使用多线程的方式进行处理,所以它和多线程技术还是有非常大的关联的.在JDK中Timer类主要负责计划任务的功能, ...

  7. 201521123015 《Java程序设计》第4周学习总结

    本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结其他上课内容. 1.多态:使用单一接口操作多种类型的对象. 2.private修饰属性,public修饰方法. 3 ...

  8. 201521123047 《Java学习笔记》第二周学习总结

    1. 本周学习总结 -知道并了解到浮点数的误差关系,懂得运java.math.BigDecimal来进行浮点数的精确计算 -对于"="与"=="的区分 -字符串 ...

  9. 201521123057 《Java程序设计》第11周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 2. 书面作业 本次PTA作业题集多线程 1.互斥访问与同步访问 完成题集4-4(互斥访问)与4-5(同步访问) ...

  10. 201521123048 《java程序设计》 第11周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 2. 书面作业 本次PTA作业题集多线程 互斥访问与同步访问 完成题集4-4(互斥访问)与4-5(同步访问) 1. ...