SpringMVC的近期小结

106人阅读 评论(0) 收藏 举报
分类:

首先使用Spring和SpringMVC编写项目

第一步:配置Spring和SpringMVC的环境,也就是项目启动时Spring和SpringMVC要起作用

目标:web.xml中
1.Spring的配置
首先配置Spring的启动,Spring需要随着Web项目启动或者Servlet进来时,Spring需要存在。

随着web启动Spring需要启动就使用listener方式:Spring配置的方式有3种,我也只学习和使用了其中一种listener方式

如下:

  <listener>
    <description>Spring的监听器</description>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

  <!--Spring beans文件配置的地址-->

  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
  </context-param>

listener和context-param配置完成后,在项目启动后为加载到ServletContext中

注意点1.ContextLoaderListener继承自ContextLoader启动后会在上下文即ServletContext中找到contextConfigLocation取出其中的值
即我们的applicationContext.xml

注意点2.classpath:和classpath*:的区别:classpath*范围广会从导入的jar包中去找,因为有些jar包会有默认配置过的xml

以上Spring的随web项目启动就配置好了

2.SpringMVC的配置

首先SpringMVC的目的是为了处理请求的,对请求进行拦截分析是否是我们需要处理的对吧,然后找到Controller或者Action去执行其中代码,返回ModelAndView和视图解析器(JSP-JavaServer Page 或者thymeleaf等)然后范围给前端,大致过程是这样,
所以他是一个Servlet毋庸置疑!!所以开始配置SpringMVC

  <servlet>
    <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-servlet.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>

注意点1.:SpringMVC的配置过程中 init-param是通过get和set方法对其中的参数进行配置他和Spring的listener不同,虽然名字相同哦.所以相应的你还想修改DispatcherServlet的其他值也可以去他的当前类或者父类中找到,配置即可

注意点2.SpringMVC的HandlerMapping在使用过程分为两步 1.注册 2.查找 SpringMVC是一个Servlet 他的启动也就是DispatchServlet启动时间会因为配置有所不同,我们在其中配置load-on-startup即可在web启动时就进行Servlet初始化过程,即注册过程

注意点3:Servlet配置过程中必须配置ServletMapping即拦截模式,这里一般配置为/,也有配置为/*,那么他们有什么区别呢?
/优先级低于/*,
那么优先级如何排序
/servlet具体优先级最高
/*会拦截所有请求
*.do拦截后缀
/没有找到进这个
这个问题仔细说会在下面进行

一个url到前端页面究竟是怎样的!关于这个问题我已经写了4篇左右博客了,每次印象都会更加深刻,在这里谢谢龙哥,~v~

首先发起一个请求(即请求一个资源(可能是静态or需要代码处理后的)),知道有两种就行
发起请求就要有人处理这个请求对不对,那么谁处理呢!
请求是服务器来处理的,具体来说是服务器上的tomcat或者iis服务器对吧,对应的是ip地址+端口
我们前台请求如果不加端口,http是80,https是443,那么我们一般使用的是域名,怎么转变成ip地址呢
域名只是为了好记,域名是由域名提供商提供的,他们记录了域名的ip地址。每一次都问他是不是很烦?那么步骤如下
1.浏览器缓存
2.系统缓存(etc,有的进行host欺骗,说多了,你们不要干坏事~v~)
3.路由器缓存
4.DNS缓存
5.域名服务器
进行递归查找,找到就不找了,找不到页面就显示
360显示如下:

您访问的网页出错了!
网络连接异常、网站服务器失去响应

那么找到了呢?接着说
请求中的除host+port剩下就是uri(统一资源定位符)
统一资源定位符就是为了找到资源
Tomcat服务器中的web.xml中配置了Servlet就是为了判断请求是谁,他要找谁,找的顺序是什么,这里就会涉及到刚才的/*or/

1.如果是静态资源,img,js等他该怎么找呢?假设现在SpringMVC即DispatchServlet的servlet-mapping配置为/
他的优先级是最低的,他会先找web.xml中有没有配置如下:

<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.js</url-pattern>
</servlet-mapping>

有?那就走的是defaultServelt处理静态资源 (但是资源一般都不放在webapp目录下都放在WEB-INF目录下,所以他找不到的)
没有?那就去DispatchServlet中找静态资源,看有没有如下:

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

有:返回!
没有:404!

/*会在解析器中找目录下的.jsp找不到

所以综上所述用/

如果是Controller请求
我们找到handler他会调用Service方法….很多很多,然后返回一般是两种吧,String or ModelAndView

如果是ModelAndView会找到他对应的jsp,进行渲染然后返回

如果是String返回即可

前端接收到Html之后:

会将Html部分解析成DOM树
CSS部分解析成DOM树
CSS+HTML 为Render Tree 渲染树,因为加上css样式后可能有些就不显示了
下面进行布局和绘制

在自上而下 深度遍历的过程中 涉及到link,script,img会进行异步加载

涉及到js问题就来了

如果在head中且没有defer or onload话操作了dom就会报错

js的执行顺序
按自上而下执行
优先外部后内部
defer执行页面是否加载完毕
onload页面是否加载完毕
read 页面dom是否生成

查看评论

对最近一段时间学习的总结

今晚做导师的实验任务,当我把程序写好的时候,自己有点不能确定自己所写的程序是否符合要求,于是qq一下ff,让他过来帮我看看。他过来后,看了我写的程序,然后不停的摇头,说我写得程序是在是太稀烂了,然后一...
  • whq19890827
  • whq19890827
  • 2014-12-30 21:11:02
  • 1445

近期小结

开学来都一个多月了,感觉什么好象都没做,倒是也没闲着,但现在的心态和本科时的心态完全不同了,总在思考我们的人生,说得夸张一点就是我们人生的意义吧,呵呵,不知道是不是到我们这个阶段的学生都在经常思考这个...
  • henry_dx
  • henry_dx
  • 2008-03-22 11:01:00
  • 238

我近期的目标

感觉很久没有来csdn来了,昨天在sina blog上写了一篇心情,挺舒服的。前几天因为要忙可恶的课程设计,没有时间来更新blog,也没有时间来亲笔写,十分的惭愧。马上就暑假了,我也要去祖国的首都去看...
  • beta2
  • beta2
  • 2006-07-03 13:57:00
  • 1703

近期学习小结(2005-2-13)

近期的时间比较紧张,需要暂时放慢《Undocumented Windows 2000 Secrets》的翻译进度。而且自己也需要在翻译的过程中消化其中的内容,这需要花费大量的时间和精力,虽然这本书提供...
  • Kendiv
  • Kendiv
  • 2005-02-13 06:05:00
  • 2625

近期笔试题小结

对近期笔试题的一个小小的小结 一、标准C的笔试题大概也就做过一次,大概是因为公司做手机吧。这题里面影响比较深的是volatile关键词吧。网上的评价是,这个关键词的掌握是普通C程序员和嵌入式C程序员的...
  • RaReXray
  • RaReXray
  • 2008-08-07 10:38:00
  • 1509

【20170221】近期小结

好久不见的近期小结,这个系列我觉得还是得坚持更新啊…   1)windows mysql中文入库乱码问题。 在确定服务端的中文编码是UTF-8无误后,就需要考虑mysql的编码设置问题了。用sq...
  • qq_18875541
  • qq_18875541
  • 2017-04-06 16:12:49
  • 157

近期Android游戏开发小结

以上,就是我最近做的地图编辑器,这样我就可以编辑各种2D地图,间接导致我开发Android游戏热情的空前高涨。于是就有了以下几款作品的诞生: 上图,是一个捡金币类的游戏。就是,巫婆(自动寻路杀英...
  • rongyongfeikai2
  • rongyongfeikai2
  • 2012-11-29 16:13:29
  • 1616

近期个人总结~

周五临下班的时候,开了部门总结会议,主要是针对最近两个周期的工作,我个人也是明显地感觉到自己的工作状态远远不如从前了。 漫无目的地过一天又一天,平日盼着周末,周末盼着假期,每天按点上下班,丝毫没有动...
  • AmberWu
  • AmberWu
  • 2017-05-14 21:54:20
  • 316

【2016-03-29】近期小结

1.replace和replaceAll 大部分情况下,两者的作用几乎是等效的。当你想替换一个掉一个子字符串时,两者的作用等效。但是还是要注意他们2者的区别: replace的参数是char和Ch...
  • qq_18875541
  • qq_18875541
  • 2017-04-06 16:09:01
  • 107

【2016-02-23】近期小结

1)如何在Action或Servlet中获得webRoot下的文件的File对象? HttpServletRequest request = (HttpServletRequest) ActionC...
  • qq_18875541
  • qq_18875541
  • 2017-04-06 16:07:00
  • 74
    个人资料
    持之以恒
    等级:
    访问量: 16万+
    积分: 3680
    排名: 1万+
    博客专栏